Boucle For avec variable vlookup
Bonjour à tous,
Je cherche à utiliser la boucle For un certain nombre de fois, ce nombre de fois étant déterminé par le résultat d'une recherchev.
Je n'arrive pas à écrire ma variable avec un vlookup :
nombredecopie = worksheetfunction.VLookup(activecell,'ongletcontenantleresultat'!B:T,19,FALSE)J'ai le message d'erreur "erreur de compilation, attendu expression ou)" et VBA me surligne le premier guillemet apostrophe devant le nom de l'onglet dans lequel je souhaite rechercher la valeur de ma variable.
Savez-vous ce qui merdouille dans mon code ? :/
Par avance je vous remercie.
PS : si ça peut aider, voici le code entier :
Sub dupliquerlignesvisite()
'étape 5
'dupliquer 1 ensemble de 12 lignes x fois selon une variable. Répéter cette boucle autant de fois qu'il y a de lignes
'non vide en dessous de ce qu'on vient de dupliquer
Dim lignedebut As Integer
Dim lignefin As Integer
Dim i As Integer
Dim nombredecopie As Integer
'test du contenu de la ligne
Do While ActiveCell <> ""
nombredecopie = worksheetfunction.VLookup(activecell,'ongletcontenantleresultat'!B:T,19,FALSE)
'début boucle dupliquer l'ensemble de lignes x fois selon résultat variable nombredecopie
For i = 1 To nombredecopie
lignedebut = ActiveCell.Row
lignefin = (lignedebut + 11)
With Rows(lignedebut & ":" & lignefin).EntireRow
.Offset(12, 0).Insert Shift:=xlDown
.Copy Destination:=.Offset(12, 0)
End With
Next i 'next i = pour relancer la boucle For
'sélection de la prochaine ligne à dupliquer pour vérifier si elle est vide ou pas
ActiveCell.Offset(nombredecopie * 12 + 12, 0).Select
Loop
End Sub
Bonjour,
l'erreur provient d'un mélange d'écriture de formule de feuille de calculs dans un code VBA !
L'apostrophe - et non un guillemet ! - servant de commentaire dans le code, le texte apparaissant bien en vert …
nombredecopie = Application.VLookup(ActiveCell.Value, ['ongletcontenantleresultat'!B:T], 19, False)Consulter l'aide VBA intégrée de la méthode Evaluate …
Bonjour,
A priori ... plusieurs petits points ...
Mais pour le premier :
nombredecopie = Application.Worksheetfunction.VLookup(activecell,'ongletcontenantleresultat'!B1:T250,19,FALSE)
Bonjour et merci à tous les deux pour vos réponses rapides.
Merci Marc ta solution fonctionne à merveille.
Par contre je n'arrive pas à utiliser
Application.Vlookupune fois "application." écrit, la fonction "vlookup" n'est pas disponible dans le menu déroulant. Dois-je activer une ou plusieurs références ? Si oui, savez-vous lesquelles svp ?
Là ça marche mais j'ai dû utiliser
WorksheetFunction.VLookupEt donc si j'ai bien compris, le principe de la méthode Evaluate est d'éviter d'écrire Sheets("feuil1") et d'utiliser directement ['feuil1']. C'est ça ?
Merci encore pour vos conseils.
Les fonctions de feuille de calculs au niveau Application ne disposent pas effectivement de l'Intellisense au niveau de l'éditeur VBA - l'aide étant aussi disponible au niveau d'Excel ! - mais si une formule correcte renvoie une valeur d'erreur,
c'est plus souple à gérer que via WorksheetFunction; bon les goûts, les couleurs …
La méthode Evaluate interprète nativement (donc English only !) un objet d'Excel comme ici une formule de feuille de calculs …
Fonctionne aussi bien avec Worksheets.Range mais c'est plus long à taper !
D'accord! J'ai essayé et effectivement ça marche direct même sans proposer le vlookup.
5000 lignes créées parfaitement en 3 minutes sans me faire ch*** avec des copier coller, c'est beau le VBA!
Si j'ai fait cette erreur c'est parce que dans un autre fichier j'avais utilisé une recherchev comme ça
With Range("AP2:AP" & v_derligne)
.Formula = "=VLOOKUP(AN2,'ARBRE CRN'!A:Q,3,FALSE)"
.Value = .Value
End WithIl y a donc une nette différente entre un code qui écrit une formule dans une cellule et un code qui utilise une fonction..
Cela va me permettre d'optimiser mes autres fichiers et virer les ".Formula"!
Merci encore, je valide la résolution du sujet.
Bonne soirée.