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 53
|
Sub AGGnFORM()
Dim I, J, K, U
Dim nTab()
'ici, on initialise les valeurs
I = 2 'on veux commencer sur la ligne deux
J = 3 'sert à rien, tu peux l'enlever
ro = Cells(2, 1).End(xlDown).Row 'connaitre la dernière ligne pour s'arreter
'cette variable nous sert pour initialiser le tableau et rendre le code plus lisible
U = 0
'ici on redimensionne le tableau pour la première ligne
ReDim nTab(3, 0)
'une boule pour toute les lignes du tableau
For I = 2 To ro
'cette condition regarde si us rla colonne A la ligne suivante est identique
If Cells(I, 1) = Cells(I + 1, 1) Then
'le même test pour la colonne B
If Cells(I, 2) = Cells(I + 1, 2) Then
'on effectue la somme
K = nTab(2, U) + Cells(I, 3)
'on remplit le tableau
nTab(0, U) = Cells(I, 1): nTab(1, U) = Cells(I, 2): nTab(2, U) = K
nTab(3, U) = -1 'c'est un tag pour dire qu'il faudra formatter cette ligne
Else
End If
Else
'on rempli le tableau en ajoutant la valeur du montant
' la raison en est que la dernière ligne ne sera pas
' prise en compte dans la condition
' ensuite, si la condition n'est pas remplie, c'est que
' c'est peut etre une nouvelle ligne et il faut donc l'ajouter égalemnt
nTab(0, U) = Cells(I, 1): nTab(1, U) = Cells(I, 2): nTab(2, U) = nTab(2, U) + Cells(I, 3)
'la boucle étant finie, nous ajoutons une ligne au tableau en prévision
'on commence par établir la taille du tableau et on ajoute 1
U = UBound(nTab, 2) + 1
on redimensionne en préservant les données
ReDim Preserve nTab(3, U)
End If
Next I
' ici, on décharge le tableau sur la feuille
For I = 0 To UBound(nTab, 2) - 1
For J = 0 To 2
Cells(I + 2, 5).Offset(0, J) = nTab(J, I)
Next J
'on applique le format si besoin
If nTab(J, I) = -1 Then Range(Cells(I + 2, 5), Cells(I + 2, 7)).Interior.Color = RGB(255, 255, 0)
Next I
End Sub |