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 Macro1()
Dim P12 As Worksheet 'déclare la variable P12 (onglet F ph1etph2)
Dim O(1 To 4) As Worksheet 'déclare la tableau de 4 onglets O
Dim DL(1 To 4) As Integer 'déclare le tableau de 4 Dernières Lignes)
Dim TV(1 To 4) As Variant 'déclare le tableau de 4 Tableaux des Valeurs
Dim PH As String 'déclare la variable PH (PHase)
Dim ET As String 'déclare la variable ET (ÉTat)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Set P12 = Worksheets("F ph1etph2") 'définit l'onglet P12
P12.Rows.Delete 'supprime toutes lignes de l'onglet P12
For I = 1 To 4 'boucle sur 4 éléments
Set O(I) = Worksheets(I) 'définit l'onglet O de la boucle
DL(I) = O(I).Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne édité DL de la colonne A de l'onglet de la boucle
TV(I) = O(I).Range("A1").CurrentRegion 'définit le tableau des valeurs de la boucle
Next I 'prochain élément de la boucle
For I = 2 To UBound(TV(1), 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV(1) de l'onglet O(1) (en partant de la seconde)
For J = 2 To UBound(TV(2), 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs TV(2) de l'onglet O(2) (en partant de la seconde)
If TV(1)(I, 1) = TV(2)(J, 1) Then 'condition 1 : si les noms coïncident
PH = TV(2)(I, 2): ET = TV(2)(I, 3) 'définit la phase PH en colonne 2 du TV(2), définit l'état ET en colonne 3 de TV(2)
If ET <> "chk" Then GoTo suite 'si l'état est différent de "chk", va a l'étiquette "suite"
Select Case PH 'agit en foction de la phase PH
Case "PH1" 'cas PH1
For K = 2 To UBound(TV(3), 1) 'boucle 3 : sur toutes les lignes K du tableau des valeurs TV(3) de l'onglet O(3) (en partant de la seconde)
If TV(1)(I, 1) = TV(3)(K, 1) Then 'condition si les noms coïncident
Set DEST = P12.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST de l'onglet P12
O(3).Rows(K).Copy DEST 'copie la ligne K de l'onglet O(3) et la colle dans DEST
End If 'fin de la condition
Next K 'prochaine ligne de la boucle 3
Case "PH2" 'cas PH1
For L = 2 To UBound(TV(4), 1) 'boucle 4 : sur toutes les lignes L du tableau des valeurs TV(4) de l'onglet O(4) (en partant de la seconde)
If TV(1)(I, 1) = TV(4)(L, 1) Then 'condition si les noms coïncident
Set DEST = P12.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST de l'onglet P12
O(4).Rows(L).Copy DEST 'copie la ligne L de l'onglet O(4) et la colle dans DEST
End If 'fin de la condition
Next L 'prochaine ligne de la boucle 4
End Select 'fin de l'action en fonction de la phase PH
End If 'fin de la condition 1
Next J 'prochaine ligne de la boucle 2
suite: 'étiquette
Next I 'prochaine ligne de la boucle 1
End Sub |
Partager