Index et Match avec deux critères vba

lemarcheurfou

XLDnaute Nouveau
Bonjour à tous.

Je suis face à un petit problème depuis hier, je vous explique mon souci.
J'ai deux feuilles dans mon fichier excel, les deux feuilles ont 3 colonnes distincte le "Nom", "Prénom" et "Age". Je veux donc récuperer dans ma deuxième feuille l'age de chaque personne grace à leur nom et prénom.

J'ai utilisé la combinaison Index et Match mais sa marche pas.:confused::confused:

Je vous fourni un fichier exemple avec la macro que j'ai créée.

Je vous remercie de votre aide par avance.
 

Pièces jointes

  • Test5.xlsm
    19.5 KB · Affichages: 62
  • Test5.xlsm
    19.5 KB · Affichages: 63
  • Test5.xlsm
    19.5 KB · Affichages: 67

lemarcheurfou

XLDnaute Nouveau
Re : Index et Match avec deux critères vba

Bonjour,

Merci pour ta réponse David, mais je voudrais faire ça en vba car mon fichier ici est juste un exemple. J'ai réussi à trouver une solution mais elle n'est pas très top. Si quelqu'un pourrais simplifier ça.

Code:
Dim cellule As Range, c As Range
Dim Sh1, Sh2 As String
Sh1 = "Sheet1"
Sh2 = "Sheet2"
i = Sheets(Sh2).Range("A" & Rows.Count).End(xlUp).Row
For A = 2 To i

For Each cellule In Sheets(Sh2).Range("A2:B" & i)

With Sheets(Sh1).Range("B2:D30000")
    Set c = .Find(cellule.Value, LookIn:=xlValues)
    If Not c Is Nothing Then
    cellule.Offset(0, 1) = c.Offset(0, 1)
    End If
End With
Next
Next A
 

david84

XLDnaute Barbatruc
Re : Index et Match avec deux critères vba

Bonjour,
en VBA différentes possibilités existent (utiliser la formule via l'enregistreur de macro et remplacer la formule par sa valeur, utiliser un Evaluate, passer par Find, ...).
Ci-joint une proposition en regroupant les données dans un array et en utilisant Match :
Code:
Sub test3()
Dim Pl As Range, T() As String, DLig As Long, LigNP As Long
DLig = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Set Pl = Sheets("Sheet1").Range("A2:B" & DLig)
ReDim T(1 To Pl.Rows.Count)
For i = LBound(T) To UBound(T)
  T(i) = Pl(i, 1) & Pl(i, 2)
Next i
With Sheets("Sheet2")
For i = 2 To DLig
  On Error Resume Next
  LigNP = Application.Match(.Cells(i, 1) & .Cells(i, 2), T, 0) + 1
  If LigNP > 0 Then .Cells(i, 3) = Sheets("Sheet1").Cells(LigNP, 3): Err.Clear: LigNP = 0
Next i
End With
End Sub
Vois si cela peut t'aider.
A+
 

Statistiques des forums

Discussions
312 493
Messages
2 088 955
Membres
103 989
dernier inscrit
jralonso