Appliquer la même macro sur plusieurs lignes
Bonjour,
J'ai une macro qui me permet de faire une rechecheV et qui fonctionne mais je ne sais pas comment l'appliquer sur plus d'une cellule.
Dans ma situation, par exemple la rechercheV fonction avec ce qui est indiqué en cellule M5 mais comment faire pour que la même recherche soit faite (on garde la matrice ligne 508 et plus) mais à partir d'autres cellules de la colonne exemple M10 ?
Sachant que je suis obligé d'utiliser la VBA.
Après j'ai toujours la possibilité de réécrire 2000 fois la commande mais avant d'y arriver je voudrais savoir s'il existe une alternative.
Voici le code utilisé pour faciliter la compréhension :
Option Explicit
Option Compare Text
'Permet de faire une rechercheV pour les matériaux
Sub Matériaux()
Dim Ligne As Integer
Range("o5:o2000,q5:q2000") = Empty
For Ligne = 508 To Range("a9999").End(xlUp).Row
If Range("a" & Ligne) = Range("m5") Then
Range("m5") = Range("a" & Ligne)
Range("o5") = Range("b" & Ligne)
Range("q5") = Range("c" & Ligne)
Exit Sub
End If
Next Ligne
End Sub
Stein
Bonjour,
Voici un essai avec une seconde boucle :
Option Explicit
Option Compare Text
'Permet de faire une rechercheV pour les matériaux
Sub Matériaux()
Dim j%, i%
Range("o5:o2000,q5:q2000") = Empty
for j = 5 to 10
For i = 508 To Range("a9999").End(xlUp).Row
If Range("m" & j) = Range("a" & i) Then
Range("o" & j) = Range("b" & i)
Range("q" & j) = Range("c" & i)
Exit for
End If
next i
Next j
End Sub
On répète l'opération pour chaque ligne de 5 à 10 par exemple.
Mais, s'il ne s'agit pas d'un exercice où la boucle est imposée, avec un recherchev directement
Option Explicit
Option Compare Text
'Permet de faire une rechercheV pour les matériaux
Sub Matériaux()
Dim j%, dl%
Range("o5:o2000,q5:q2000") = Empty
dl = Range("a9999").End(xlUp).Row
for j = 5 to 10
Range("o" & j) = application.vlookup(Range("m" & j), Range("a508:c" & dl), 2, 0)
Range("q" & j) = application.vlookup(Range("m" & j), Range("a508:c" & dl), 3, 0)
Next j
End Sub
Cdlt,
Bonjour,
Merci ça fonctionne bien, par contre c'est normal que ça rame énormément ?
Oui, c'est normal, surtout si j parcourt un grand nombre de lignes.
Vous pouvez déjà mettre les instructions : Application.screenupdating = false avant les boucles et Application.screenupdating = true après. Mais le mieux serait de passer par des tableaux dynamiques pour n'avoir qu'une seule opération de collage de valeurs.
Cdlt,
Bonjour,
Par curiosité tu saurais comment modifier le code pour utiliser un tableau à la place apparemment ça permettrait de considérablement réduire le temps de calcul mais je ne vois pas comment réaliser cela.
Cordialement Stein.
Bonjour,
Voici un essai où, au lieu de saisir à chaque itération le résultat, on alimente le tableau et on en colle l'intégralité des valeurs à la fin de la boucle. C'est fait à l'aveugle donc il est possible qu'il faille corriger. En tout cas, il faut adapter le nom de la feuille concernée dans le code. La boucle commence à 5 (d'où le j - 4), les résultats sont reportés en O5, la colonne P est considérée vide et sans importance...
Option Explicit
Option Compare Text
'Permet de faire une rechercheV pour les matériaux
Sub Matériaux()
Dim j%, dlA%, dlM%, resultats(1 to 1996, 1 to 3)
with sheets("nomfeuille") '<<< adapter
.Range("o5:o2000,q5:q2000") = Empty
dlA = .cells(.rows.count, 1).End(xlUp).Row
dlM = .cells(.rows.count, 13).End(xlUp).Row
for j = 5 to dlM
resultats(j - 4, 1) = application.vlookup(Range("m" & j), Range("a508:c" & dlA), 2, 0)
resultats(j - 4, 3) = application.vlookup(Range("m" & j), Range("a508:c" & dlA), 3, 0)
Next j
.range("O5").resize(ubound(resultats), ubound(resultats,2)) = resultats
end with
End Sub
Cdlt,