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
| Sub Recup_Valeurs()
Dim f1 As Worksheet, f2 As Worksheet
Dim DerLig_f2 As Long, i As Long, DerCol_f1 As Long
Dim ID As String, Titre As String
Dim x As Object, y As Object
Application.ScreenUpdating = False 'Evite les rafraîchissements de l'écran et augmente la vitesse d'exécution
Set f1 = Sheets("Feuil1") 'on attribue la variable f1 à la feuille 1
Set f2 = Sheets("Feuil2") 'on attribue la variable f2 à la feuille 2
Set f3 = Sheets("Feuil3") 'on attribue la variable f3 à la feuille 3
DerLig_f2 = f2.Range("B" & Rows.Count).End(xlUp).Row 'Dernière ligne de la feuille 2
DerCol_f1 = f2.Cells.Find("*", , , , xlByColumns, xlPrevious).Column 'Dernière ligne de la feuille 1
'On fait une copie des codes (colonne B) de la feuille2 vers la feuille 3 (colonne B)
f2.Columns(2).Copy f3.Columns(2)
'on recopie la ligne des titres de la feuille 1 vers la feuille 3
f1.Rows(10).Copy f3.Rows(10)
'Rapatriement des données de la feuille 1 vers la feuille 3
For i = 11 To DerLig_f2 ' la variable i prend successivement la valeur de la ligne 11 à la dernière ligne de la feuille 1
ID = f1.Cells(i, "B")
Set x = f3.Columns(2).Find(ID, LookIn:=xlValues, lookat:=xlWhole) 'on recherche l'ID dans la colonne 2 (la B) de la feuille 3
If Not x Is Nothing Then 'si x n'est pas rien alors:
'pour chaque ligne i testée, on copie la plage qui va de la colonne B à la dernière colonne de la feuille 1 destination feuille 3 colonne B
f1.Range(f1.Cells(i, "B"), f1.Cells(i, DerCol_f1)).Copy Destination:=f3.Cells(x.Row, "B")
End If
Next i 'on passe à la valeur suivante de i
'recopie des données dans la feuille 2
f3.Select
For i = 3 To DerCol_f1
Titre = f3.Cells(10, i) 'on récupère l'entête de chaque colonne
Set y = f2.Rows(10).Find(Titre, LookIn:=xlValues, lookat:=xlWhole) 'on recherche l'entête dans la ligne 10 de la feuille 2
If Not y Is Nothing Then 'si y n'est pas rien alors:
'on prend les colonnes (une par une) de la feuille 3 qu'on redistribue à leurs places respectives dans la feuille 2
f3.Range(Cells(11, i), Cells(DerLig_f2, i)).Copy Destination:=f2.Cells(11, y.Column)
End If
Next i
f3.Cells.ClearContents
f2.Select 'affichage de la feuille 2
Set x = Nothing
Set y = Nothing
Set f1 = Nothing
Set f2 = Nothing
Set f3 = Nothing
End Sub |
Partager