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
| 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 ph1et2") 'définit l'onglet P12
P12.Range("A1").CurrentRegion.Offset(1, 0).Rows.Delete 'supprime toutes lignes éditées de l'onglet P12
'en une seule boucle on définit l'onglet O(I) (= sheets(I)), la dernière ligne éditée DL(I) de la colonne A de l'onglet O(I) et la tableau des valeurs TV(I) de l'onglet O(I)
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
'CurrentRegion revient à faire [Ctrl] + [*] sur la cellule indiqué donc cellectionne les cellules ajjacentes
TV(I) = O(I).Range("A1").CurrentRegion 'définit le tableau des valeurs de la boucle
Next I 'prochain élément de la boucle
'Tout tableau a des limites supérieure pour les lignes (TV(l),1) et pour les colonnes (TV(1),2) et des limites inférieures avec LBound
'UBound(TV(1),1)) correspond donc à la derniere ligne du tableau TV(1) / Ubound(TV(I),2) correspond à la dernière colonne du Tableau TV(1) (ici une seule colonne)
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)(J, 2): ET = TV(2)(J, 3) 'définit la phase PH en colonne 2 du TV(2), définit l'état ET en colonne 3 de TV(2)
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) And ET = "chk" Then 'condition si les noms coïncident et l'etat ET vaur "chk"
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
GoTo suite 'va à l'étiquette suite
End If 'fin de la condition
Next K 'prochaine ligne de la boucle 3
Case "PH2" 'cas PH2
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) And ET = "chk" Then 'condition si les noms coïncident et l'état vaut "chk"
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
GoTo suite 'va à l'étiquette suite
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
suite: 'étiquette
Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub |
Partager