Bonjour,
Mon test, et le seul et unique, je n'aime pas travailler avec ce genre de fichier qui ressemble à une usine à gaz, désolé ... :
Option Explicit
Option Base 1
Sub COMPTA()
Dim C As Byte, L%, MOIS(), WS As Worksheet, MOIS_COL%, LR%
Set WS = ActiveSheet 'Avec la feuille active
For C = 26 To 37 'Pour les colonne 26 à 37
ReDim MOIS(4, 1) 'On redimensionne l'array MOIS
For L = 368 To 440 'Pour les lignes 368 à 440
If WS.Cells(L, C) <> "" Then 'Si la cellule aux valeurs prises par L et C n'est pas vide
MOIS(1, UBound(MOIS, 2)) = WS.Range("C351") 'On place la valeur en C351 dans la première ligne de l'array MOIS
MOIS(2, UBound(MOIS, 2)) = WS.Cells(L, 3) & " " & WS.Cells(L, 2) 'On place les valeurs en LLC3 et LLC2 dans la seconde ligne
MOIS(3, UBound(MOIS, 2)) = WS.Cells(L, 4) 'Valeur LLC4 dans la 3eme
MOIS(4, UBound(MOIS, 2)) = WS.Cells(L, 5) 'Valeur LLC5 dans la 4ème
ReDim Preserve MOIS(4, UBound(MOIS, 2) + 1) 'On ajoute une colonne au tableau MOIS pour accueillir la prochaine valeur
End If
Next L 'On passe à la ligne suivante
If UBound(MOIS, 2) - 1 > 0 Then 'Si l'array MOIS n'est pas vide
With Worksheets("COGS") 'Avec la feuille COGS
MOIS_COL = .Rows(3).Find(WS.Cells(364, C), LookIn:=xlValues).Column 'On trouve la colonne correspondant au MOIS chargé dans l'array
LR = .Cells(.Rows.Count, MOIS_COL).End(xlUp).Row + 1 'On trouve la dernière ligne remplie de ce mois
.Cells(LR, MOIS_COL).Offset(, -2).Resize(UBound(MOIS, 2) - 1, 4) = Application.Transpose(MOIS) 'On y transpose l'array MOIS
End With
End If
Next C 'On passe à la colonne suivante de la feuille active
End Sub
A noter que j'ai du adapter les formats de dates de vos feuilles CGOS, feuilles clients et la matrice de base.
Pour pouvoir joindre le fichier et ne pas mettre le forum en PLS je n'ai laissé que les feuilles d'intérêt. La macro est liée à l'image de chaque feuille client en E7.
Bon courage.
Cdlt,