Sub RECAP()
Dim i As Long, j As Long, k As Long, B1, B2, R, nR As Long
B1 = Me.Range("BASE_1").Value ' B1 prend les données de la zone BASE_1 sous forme
' d'un tableau. B(i, j) correspond à la cellule en ligne i et en colonne j.
B2 = Me.Range("BASE_2").Value ' Idem avec la zone BASE_2.
Me.Range("RECAP").ClearContents ' La zone RECAP est vidée.
R = Me.Range("RECAP").Value ' R prend les données de la zone RECAP (toutes vides
' à cause de la ligne précédente).
For i = 1 To UBound(B1, 1) ' pour i de 1 à 'nombre de lignes de B1' : on va
' explorer le tableau B1 ligne par ligne.
For j = 1 To UBound(B2, 1) ' idem pour le tableau B2.
If B1(i, 1) = B2(j, 1) Then ' Si la valeur de la 1ére colonne de la ligne i
' de B1 est égale à la valeur de la 1ére colonne de la ligne j de B2 ...
nR = nR + 1 ' ... on va placer dans la ligne nR de R ...
For k = 1 To UBound(B1, 2) ' ... les valeurs de toutes les colonnes de
' la ligne i de B1 dans la ligne nR de R :
R(nR, k) = B1(i, k)
Next k ' Renvoie à 'For k...' pour la colonne suivante de B1 si k < nombre
' de colonnes de B1. Sinon on passe à la suite :
R(nR, k) = B2(j, 2) ' On complète la ligne nR de R par la valeur de la
' deuxième colonne de la ligne j de B2
End If
Next j ' Renvoie à For j...' tant qu'on a pas lu toutes les lignes de B2.
Next i ' Renvoie à For i...' tant qu'on a pas lu toutes les lignes de B1.
Me.Range("RECAP").Value = R ' Affiche le tableau R dans la zone RECAP.
' Pour adapter la procédure à une autre configuration, par exemple si la zone BASE_2 est
' dans une autre feuille nommée "Fournisseur-Client", il suffira de remplacer :
'
' B2 = Me.Range("BASE_2").Value
' par :
' B2 = Worksheets("Fournisseur-Client").Range("BASE_2").Value
'
' Si le code n'est pas placé dans la feuille contenant la zone BASE_1 mais dans un module
' standard, il faudra remplacer :
' Me.Range("BASE_1")
' par :
' Worksheets("nom de la feuille contenant la zone BASE_1").Range("BASE_1")
' etc.
End Sub