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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| 'Déclaration de ton tableau en public
Public table() As String
Sub recap()
'Déclaration de tes variables
Dim Rng As Range
Dim recal As Range
Dim col As Integer
'Redimensionnement de ton tableau (nécessaire pour pouvoir le redimentionner dynamiquement après)
ReDim table(1 To 2, 1 To 1)
'La colonne de ta première entrée (8 = H)
col = 8
'Avec la feuille "Feuil1"
With Worksheets("Feuil1")
'On passe dans la fonction calcul_col sur H
calcul_col (col)
'On se place sur (ici) H1
Set Rng = .Cells(1, col)
'Et on fait en sorte qu'on est les valeurs correspondantes pour avoir une somme à 100
For i = 1 To .Columns(col + 1).Find("*", , , , , xlPrevious).Row - 1
If Rng.Offset(i, 1) <> 100 Then
Set recal = .Columns(1).Find(Rng.Offset(i, 0), LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1)
'MsgBox (100 - Rng.Offset(i, 1))
recal = recal + (100 - Rng.Offset(i, 1))
End If
Next i
'Et on ré-affiche les valeurs !
ReDim table(1 To 2, 1 To 1)
calcul_col (col + 2)
End With
End Sub
Function calcul_col(col As Integer)
'Décaration des variables
Dim Rng As Range
Dim flag As Boolean
'Avec la feuille "Feuil1"
With Worksheets("Feuil1")
'On set Rng sur A1
Set Rng = .Range("A1")
'On initialise le tableau
table(1, 1) = Rng.Offset(1, 0)
table(2, 1) = Rng.Offset(1, 1)
'On passe sur l'ensemble des cellules non-vides de la colonne A
For i = 2 To .Columns(1).Find("*", , , , , xlPrevious).Row
'A chaque occurence on vérifie si l'ID n'est pas présent dans notre tableau
For j = LBound(table, 2) To UBound(table, 2)
'On set le flag à False tout le temps
flag = False
'Si on trouve un ID identique, on passe le flag à True
If Rng.Offset(i, 0) = table(1, j) Then
flag = True
Exit For
End If
Next j
'Si le flag est à True
If flag Then
'On additionne l'ancienne valeur avec celle trouvée
table(2, j) = table(2, j) + Rng.Offset(i, 1)
'Sinon...
Else
'... on ajoute une entrée au tableau et on insère les valeurs
ReDim Preserve table(1 To 2, 1 To UBound(table, 2) + 1)
table(1, UBound(table, 2)) = Rng.Offset(i, 0)
table(2, UBound(table, 2)) = Rng.Offset(i, 1)
End If
Next i
'Enfin, on se positionne sur la ligne 1 en colonne définie en entrée
Set Rng = .Cells(1, col)
'On écrit la table sur les cellules correspondantes
For j = LBound(table, 2) To UBound(table, 2)
Rng.Offset(j, 0) = table(1, j)
Rng.Offset(j, 1) = table(2, j)
Next j
End With
End Function |
Partager