RECHERCHEV en VBA avec index differé

Bonjour,

je souhaite faire une sorte de recherche verticale avec (comme exemple) ces deux tableaux :

3
4
6
8
9
12

et

1     200
2     250
3     546
4     948
5     145
6     784
7     15
8     100
9     741
10     365

Donc rechercher où les valeurs du premier tableau se trouvent, et une fois qu'il les a trouvés, me donner le nombre correspondant de la deuxième colonne.

Donc je voudrais avec VBA obtenir une nouvelle colonne (en position D dans le tableur par exemple), ce qui donnerait au final :

3    1    200    546
4    2    250    948
6    3    546    784
8    4    948    100
9    5    145    741
12    6    784    N/A
    7    15    
    8    100    
    9    741    
    10    365    

Il faut prendre en compte que lorsque j'applique cette méthode, le nombre de lignes peut varier (je voudrais l'automatiser pour le faire tous les mois sur différentes colonnes).

Il faut donc parcourir la colonne en entier et non pas sur une plage précise.

Voici ce que j'ai pu essayer :

Sub recherche()

    Dim Plage As Range
    Dim PlgValeur As Range
    Dim Cel As Range
    Dim Valeur As Integer
    Dim I As Integer

    With Worksheets("Feuil1") '<--adapter le nom de la feuille...

        'matrice en colonnes B et C
        Set Plage = .Range(.Cells(1, 2), .Cells(.Rows.Count, 3).End(xlUp))

        'plage des valeurs à chercher en colonne A
        Set PlgValeur = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))

    End With

    For Each Cel In PlgValeur

        'gère l'erreur de la non correspondance pour la fonction "VLookup" qui retourne la valeur de la colonne C
        On Error Resume Next
        Valeur = Application.WorksheetFunction.VLookup(Cel.Value, Plage, 2, False)

        'si pas d'erreur inscrit la valeur correspondante en colonne D
        If Err.Number = 0 Then

            I = I + 1
            Cells(I, 4).Value = Valeur

        End If

    Next Cel

End Sub

Mais cela ne me renvoie que la première ligne (546 dans l'exemple).

Sinon autre chose :

Sub recherche()
    Dim C As Range, I As Long
    For Each C In Range([A1], Cells(Rows.Count, 1).End(xlUp))
        For I = 1 To Cells(Rows.Count, 2).End(xlUp).Row
            If Cells(I, 2) = C.Value Then
            Cells(C, 5).Value = Cells(I, 3).Value
            End If
        Next I
    Next C
End Sub

Mais ça me met "incompatibilité de type" et me surligne la ligne avec "Cells(C, 5).Value = Cells(I, 3).Value". Je précise bien que je veux que la colonne D soit en phase avec la colonne A. (Donc remplacer Cells(C,5) par Cells(I,5) ne donne pas ce que je veux).

Je tourne en rond depuis tout à l'heure...

J'ai essayé avec ou sans les value, rien à faire, je ne sais pas d'où ça vient...

Si quelqu'un a une idée, peut-il m'éclairer?

Merci beaucoup pour votre temps!

Après quelques tests, j'ai pu remarquer que lorsque le code (le premier, qui semble plus marcher) ne trouvait pas de valeur avec la recherche, il ne sautait pas la ligne.

Voici le résultat avec des valeurs qui ne sont pas dans le tableau :

3    1    200    546
10    2    250    365
6    3    546    784
8    4    948    100
9    5    145    741
12    6    784    145
14    7    15    
5    8    100    
    9    741    
    10    365    

Alors qu'il faudrait :

3    1    200    546
10    2    250    365
6    3    546    784
8    4    948    100
9    5    145    741
12    6    784    
14    7    15    
5    8    100    145
    9    741    
    10    365    

Une idée? Merci par avance! Je sais qu'il manque pas grand chose pour la victoire!

Bonjour,

et si tu remplaces

Cells(I, 4).Value = Valeur

par

Cel.offset(,3) = Valeur

ça donne quoi ?

eric

Bonjour,

J'obtiens un résultat correct avec

Sub recherche()
Dim C As Range, I As Long
    For Each C In Range([A1], Cells(Rows.Count, 1).End(xlUp))
        For I = 1 To Cells(Rows.Count, 2).End(xlUp).Row
            If Cells(I, 2) = C.Value Then
                Cells(C.Row, 5).Value = Cells(I, 3).Value
            End If
        Next I
    Next C
End Sub

A+

Bonjour à tous!

Ça marche! Merci beaucoup pour votre aide ça déchire! Je vais pouvoir faire des recherches à foison désormais.

Merci encore, à bientôt.

Rechercher des sujets similaires à "recherchev vba index differe"