1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| Sub MacroRechercheV()
Dim FL1 As Worksheet, FL2 As Worksheet, FL3 As Worksheet
Dim rngPlage As Range, MaRech As Range
Dim DerLigne1 As Long, DerLigne2 As Long, DerLigne3 As Long 'Derligne par feuille
Dim i As Long, k As Long, j As Long 'Pour la boucle
Dim intCpteLignes As Long
Dim rngPlageDonnees As Range
' Initialisation
Set rngPlageDonnees = Nothing
Set rngPlage = Nothing
Set FL1 = Worksheets("FeuilleDestination") 'Affecte le nom de la feuille à la variable
Set FL2 = Worksheets("FeuilleSource")
Set FL3 = Worksheets("FeuilleResultats")
DerLigne1 = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'Def dernière ligne col. A
DerLigne2 = FL2.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'Def dernière ligne col. A
DerLigne3 = FL3.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'Def dernière ligne col. A
DerCol = FL1.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column 'Def dernière colonne ligne 1
DerCol2 = FL2.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
FL1.Activate 'Nécessaire pour pouvoir affecter la variable rngPlage
Set rngPlage = FL1.Range(Cells(1, 1), Cells(DerLigne1, 1)) 'Défini la plage de recherche
k = 2 'affecte 2 car titre pour collage du résultat
intCpteLignes = 2
'Boucle de la ligne 2 (car titre) à la dernière ligne remplie de la col. A
For i = 2 To DerLigne2
With rngPlage 'Sur base de la plage
'Affecte l'élément à rechercher sur base de la col. A
Set MaRech = .Find(FL2.Cells(i, 1).Value, LookIn:=xlValues)
If Not MaRech Is Nothing Then 'Si la recherche est positive alors
' copie les données de FL1 dans FL3 (colonne A identique entre les 2)
FL1.Range(Cells(MaRech.Row, 1), Cells(MaRech.Row, DerCol)).Copy (FL3.Cells(k, 1))
' Récupérer la dernière colonne de la feuille de Résultats
DerCol3 = FL3.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
'Boucle permettant de copier toutes les autres colonnes de la feuille Source à la feuille résultats
'dont la 1ère colonne est identique
For j = 2 To DerCol2
FL3.Cells(k, (DerCol - 1) + j) = FL2.Cells(MaRech.Row, j).Value
Next j
'On incrémente k pour affecter à la ligne suivant le prochain élément trouvé
k = k + 1
End If
End With
Next i
'Copier les entêtes de ma feuille Destination dans ma feuille Résultats
' Pour chaque colonne à la première ligne
For i = 1 To DerCol
FL3.Cells(1, i) = FL1.Cells(1, i).Value
Next i
'Copier les entêtes de ma feuille Source dans ma feuille Résultats
' Pour chaque colonne à la première ligne
For i = 2 To DerCol2
FL3.Cells(1, i + (DerCol - 1)) = FL2.Cells(1, i).Value
Next i
MsgBox "Fonction RechercheV réussie avec succès.", vbOKOnly + vbInformation, "Fonction RechercheV" |
Partager