Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Integer 'déclare la variable NL (Nombre de lignes)
'Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
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)
Dim LS As Integer 'déclare la variable LS (LigneS)
If Application.Intersect(Target, Range("C4:G4")) Is Nothing Then Exit Sub 'si le changement à lieu ailleurs que dans C4:G4, sort de la procédure
Range("A8:Z10").ClearContents 'efface le contenu de la plage A8:z10
Rows("10:" & Application.Rows.Count).Delete 'supprime toutes les lignes à partir de la 10ème
If Target(1, 1).Value = "" Then Exit Sub 'si la cellue est effacée, sort de la procédure
Set OS = Worksheets("SUIVI PAD") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
'NC = UBound(TV, 2)
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
If CStr(TV(I, 2)) = CStr(Target.Value) Then 'si le numéro de semaine concorde
ReDim Preserve TL(1 To 26, 1 To K) 'redimensionne le tableau des lignes TL (26 lignes, K colonnes)
TL(1, K) = K 'récupère la variable K (pour le numéro de ligne) dans la ligne 1 de TL
TL(2, K) = TV(I, 3) 'récupère la référence dans la ligne 2 de TL
TL(3, K) = TV(I, 4) 'récupère la désignation dans la ligne 3 de TL
TL(4, K) = TV(I, 6) 'récupère la quantité livrée dans la ligne 4 de TL
TL(5, K) = TV(I, 7) 'récupère la quantité PAD dans la ligne 2 de TL
For J = 6 To 26 'boucle de 6 à 26
TL(J, K) = TV(I, J + 4) 'récupère la donnée en colonne J + 4 de TV dans la ligne J de TL
Next J 'prochaine valeur de la boucle
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
'si K est égale à 1, message, sort de la procédure
If K = 1 Then MsgBox "Aucune donnée en semaine " & Target(1, 1).Value & " !": Exit Sub
LS = UBound(TL, 2) + 8 'définit les lignes LS
Range("A8:Z9").Copy 'copie la plage A8:Z9
Range("A10:Z" & LS).PasteSpecial (xlPasteFormats) 'colle les format dans la plage A10:Z...LS
'renvoie dans A8 redimensionnée le tableau TL transposé
Range("A8").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
With Range("A7").CurrentRegion 'prend em comtpe le tableau
.VerticalAlignment = xlCenter 'allignement vertical centré
.HorizontalAlignment = xlCenter 'alignement horizontal centré
End With 'fin de la prise en compte du tableau
Columns(3).WrapText = True 'texte envoyé à la ligne dans la colonne 3
Rows(Cells(Application.Rows.Count, "A").End(xlUp).Row + 1).Delete 'supprime la ligne après la dernière ligne éditée de la colonne A
Range("C4").Select 'sélectionne C4
MsgBox "Traitement des données terminé ! O tratamento dos dados acabou !" 'message (Aïe ! mon portugais est loin...)
End Sub