J'ai une autre question que j'espère résoudre avec votre aide.
Ce que je veux faire, c'est ceci:
- Appuyez sur un bouton et ajoutez une ligne.
- Augmentez le numéro de suivi avec 1
- Insérez des valeurs par défaut p> le code. Strong>
Pour automatiser cela, j'ai trouvé (copier, collé, ajusté à mes besoins) le code suivant: p> le problème. Strong>
Dans cette feuille, j'ouvre de nouveaux articles, mais je les ferme aussi. Je le fais en changeant leur statut et en les cache de la vue. Et c'est le point où cela va mal. Lorsque je ferme le dernier article em> sur la liste et souhaitez ajouter une nouvelle ligne, la macro ajoute une nouvelle ligne em> sous la dernière entrée de la dernière em>. Il ne trouve pas la dernière entrée que je viens de cacher. Et aussi, lorsque cela se produit, l'ajout des valeurs par défaut à la nouvelle ligne ne fonctionne pas. Il les ajoute à la rangée au-dessus de l'ajout. P> En quelque sorte cela fait un sens parfait. Je dis à la macro de chercher la dernière entrée, mais ce que je ne comprends pas, c'est pourquoi il regarde la dernière entrée visible em> et pourquoi il ne regarde pas dans les rangées cachées. P> à reproduire. strong> Copiez le code dans une feuille (vous devez peut-être modifier le nom de la feuille) et ajouter quelques lignes. Mettez des informations dans la dernière rangée et cachez-la. Ajoutez quelques autres lignes et voyez ce qui se passe. p> Merci pour votre contribution, s'il y a des questions s'il vous plaît faites le moi savoir. p> simon
4 Réponses :
dire que nous avons une colonne d'état
Merci pour votre commentaire Gary's Student. Je peux voir comment cela peut fonctionner sur ma feuille. Mais je dois demander, d'exécuter ces actions à chaque fois que j'ajoute une ligne, cela va-t-il ralentir ma feuille beaucoup?
Utilisez ceci pour obtenir la dernière ligne et il verra la dernière ligne, même si elle est cachée.
LastRow = wsActiviteiten.UsedRange.Rows.Count
L'inversedrange ne commence pas nécessairement dans la ligne 1. Ceci n'est pas fiable.
Lorsque j'essaie avec l'exemple que l'OP a suggéré que nous utilisions, cela fonctionne. Alors en fonction de cela ... il semble fonctionner très bien. o.o
Je comprends que cela peut être peu fiable, mais dans cette macro spécifique, à ce point spécifique, je pense que cela peut fonctionner. Merci pour votre réponse Rodger.
Ajouter à mon commentaire précédent. J'ai testé cela et cela fait ce qu'il dit.
Cela peut fonctionner pour le cas tel que testé, mais utilisé code> n'est pas fiable comme Excel régulièrement "oublie" la plage réelle et les lignes de la présente manière suppose qu'il existe des données à partir de la ligne1.
update em> Je vois que votre feuille a une autofiltre "masquant" les lignes d'état - quel Vous suggère d'essayer ce code mis à jour ci-dessous: p> message initial em> p> Si vous cachez Les lignes alors vous pouvez utiliser trouver code> ne détecte pas, contrairement aux lignes cachées. p> trouver code> avec l'option xlformulas code> pour rechercher des entrées dans des lignes cachées (contrairement à xlvalues code>). P> Dim rng1 As Range
Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
MsgBox rng1.Address
J'essaie d'utiliser ce code spécifique dans un module séparé sur ma feuille. Lorsque je cache une ligne, cette macro s'allume avec l'emplacement de la prochaine valeur, mais pas le caché. Lors de la lecture sur XLformulas, il devrait augmenter une valeur d'un emplacement caché. Y a-t-il quelque chose qui me manque ici?
@simon êtes-vous capable de télécharger un exemplaire de classeur (sur le nuage, etc.)?
Bien sûr, vous allez ici: we.tl/smyhlfdm49. J'ai déjà ajouté votre code à la feuille déjà. (C'est le deuxième lien, l'autre n'était pas bon).
@simon pls Essayez ce code mis à jour. Le fichier était utile :)
Merci pour le code de travail. C'est des choses que je n'ai pas utilisées auparavant, alors je vais voir si je peux comprendre ce qui se passe et comment je peux l'utiliser dans mon code. Je vais faire un voyage dans quelques jours, si je n'ai pas répondu à ce moment-là, je vais répondre quand je viendrai. J'apprécie que vous prenez le temps de m'aider et je crois que ce n'est que juste que je vous réponds lorsque j'ai craqué cette noix. Pour l'instant, je ne vais pas la marquer comme répondu, car j'ai besoin de comprendre et d'appliquer ceci en premier. Bravo, Simon
Ça marche! Avec une aide locale, j'ai réussi à le faire fonctionner dans ma feuille. Pouvez-vous expliquer ce que le code fait? Nous ne pourrions pas le comprendre complètement. Pour autant que je sache, c'est que la scission localise la ligne vide sous une plage de données. Quelle gamme (1) signifie que nous n'avons pas pu le savoir. Il existe d'autres éléments qui vont au-delà de mes compétences en VBA, mais je suis assez certain que le temps sera clair. De plus, sur une autre feuille, j'ai essayé d'utiliser le code, mais celui-ci a une formule dans les cellules de la formule et que cette méthode voit des formules et se rend à la ligne suivante à coller. Mais c'est une autre question pour plus tard.cheers, Simon
@simon Cette ligne renvoie la plage de l'autofilter activesheet.autofilter.range.address code>. La scission brise la plage, puis renvoie la deuxième partie (c.-à-d. C10 si la plage était C1: C10). Split (ActiveHeet.Autofilter.Range.Address, ":") (0)) Code> retournerait la première partie C1. La gamme fait ensuite une adresse à cet égard.
Pouvez-vous m'aider avec une autre question qui est liée à celle-ci? Cela m'aiderait beaucoup, acclamations.
Je viens de trouver une solution:
Si vous avez au moins une colonne de votre gamme avec des données «cohérentes» (toutes les cellules de cette colonne ne sont pas vides / vides), vous pouvez utiliser Formula Counta et vous pouvez vous référer code à valeur de cette formule de comptage. p>
par exemple: p>
insérer formule '= comptage (A1: A100000)' dans la cellule 'B1'. P>
B1 Vous obtiendrez combien de lignes que vous avez elles sont cachées ou non. P>
dans votre code change: p> à p> wsActiviteiten.Range("A" & Range("B1").Value).Offset(1, 0).PasteSpecial (xlPasteAll)
Je vais utiliser votre question comme exemple de la façon de poser une question.
Peut-être MSDN - spécialcells pourrait aider. Notamment
xlcelltypelaastcell code>