Private Sub CommandButton1_Click() 'au clic du bouton
Dim OA As Worksheet 'déclare la variable OA (Onglet Analyse)
Dim PL As Range 'déclare la variable PL (PLage)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
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)
ActiveCell.Select 'enlève le focus au bouton
Set OA = Worksheets("Analyse") 'définit l'onglet OA
If OA.Range("B1").Value = "" Then 'condition : si B1 de l'onglet OA est vide
MsgBox "Vous devez renseigner le type de câble !" 'message
OA.Range("B1").Select 'sélectionne B1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If OA.Range("B2").Value = "" Then 'condition : si B2 de l'onglet OA est vide
MsgBox "Vous devez renseigner la section du câble !" 'message
OA.Range("B2").Select 'sélectionne B1
Exit Sub 'sort de la procédure
End If 'fin de la condition
If Not Range("A7").Value = "" Then 'condition si A7 n'est pas vide
Set PL = OA.Range("A5").CurrentRegion 'définit la plage PL
Set PL = PL.Offset(2, 0).Resize(PL.Rows.Count - 2, PL.Columns.Count) 'redéfinit la plage PL (sans les deux première lignes)
PL.ClearContents 'efface les anciennes données
End If 'fin de la condition
K = 1 'initialise la variable K
For Each O In Sheets 'boucle 1 : sur tous les onglets O du classeur
If Not O.Name = "Analyse" Then 'condition 1 : si l'onglet O n'est pas l'ongletalyse"
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 (en partant de la seconde)
'condition 2 : si la données en ligne I colonne 8 de TV est égale à B1 et la donnée ligne I colonne 7 de TV est égale à B2
If TV(I, 8) = OA.Range("B1").Value And TV(I, 7) = OA.Range("B2").Value Then
ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau de lignes TL (autant de lignes que TV a de colonnes, K colonnes)
For J = 1 To UBound(TV, 2) 'boucle 3 : sur toutes le colonne J du tableau des valeurs TV
TL(J, K) = TV(I, J) 'récupère dans la ligne J de TL, la donné en colonne I de TV (=> Transposition)
Next J 'prochaine colonne de la boucle 3
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition 2
Next I 'prochaine ligne de la boucle 2
End If 'fin de la condition 1
Next O 'prochaien onglet de la boucle 1
If K > 1 Then 'condition : si K est supérieur à 1
'renvoie dans A7 redimensionnée de l'onglet OA le tableau TL transposé
OA.Range("A7").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
Else 'sinon
MsgBox "Aucune câble de cette section trouvé !" 'message
End If 'fin de la condition
End Sub