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,

Rechercher des sujets similaires à "appliquer meme macro lignes"