Private Sub Worksheet_Activate() 'a l'activation de l'onglet
Module1.ListValid 'lance la procédure [ListValid] du module [Module1]
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
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 TL() As Variant 'déclare la variable TL (Tableau des Lignes)
If Target.Address <> "$O$1" Then Exit Sub 'si le changement à lieu ailleurs qu'en O1, sort de la procédure
Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface les éventuelles anciennes valeurs
If Target.Value = "" Then Exit Sub 'si O1 est effacée, sort de la procédure
For Each O In Sheets 'boucle 1 : sur tous les ongelts O du classeur
If O.Name <> Me.Name Then 'condition 1 : si l'onglet n'est pas "SYNTHESE"
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If CStr(TV(I, 7)) = CStr(Target.Value) Then 'condition 2 : si la donnée ligne I colonne I de TV est égale à la valeur de O1
K = K + 1 'incrémente K
ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes TL (autant de ligne que TV a de colonnes, K colonnes)
For J = 1 To UBound(TV, 2) 'boucle 3 : sur toutes les colonnes J du tableau des valeurs TV
TL(J, K) = TV(I, J) 'récupère dans la ligne J de TL la donnée en colonne J de TV (=> transposition)
Next J 'prochaine colonne de la boucle 3
End If 'fin de la condition 2
Next I 'prochaine ligne de la boucle 2
End If 'fin de la condition 1
Next O 'prochain onglet de la boucle 1
Range("A2").Resize(K, UBound(TV, 2)).Value = Application.Transpose(TL) 'renvoie le tableau TL transposé dans A2 redimensionnée
Me.Columns("I:J").NumberFormat = "0" 'format des colonne I et J
End Sub