Algorithme de regroupement en fonction de chaine
Bonjour
J'ai actuellement un tableau de 15000x43 dans lequel je dois regrouper des sommes en fonction d'un String (qui est chez moi un fournisseur).
J'ai essayé de produire quelques algorithmes dont voici les codes, mais en vba :
Code:
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
| Sub test()
'9 correspond à la colonne du fournisseur
'29 à leur prix
Dim continuer As Boolean
Dim x As Integer
c = 1
position = 0
ReDim tab_four(c)
'parcourt la liste de fournisseurs
For i = 2 To UBound(tab_val, 2)
'si le fournisseur selectionné est différent du suivant
If tab_val(i, 9) <> tab_val(i + 1, 9) Then
'on vérifie qu'il n'est pas dans le tableau
For x = 0 To UBound(tab_four)
If tab_val(i, 9) = tab_four(x) Then
continuer = False
'somme d'un fournisseur
tab_somme(x) = tab_somme(x) + tab_val(i, 29)
Else:
tab_four(x) = tab_val(i, 9)
tab_somme(x) = tab_somme(x) + tab_val(i, 29)
End If
Next x
'redimensionnement du tableau
ReDim Preserve tab_four(x)
End If
Next i |
Le problème avec celui ci étant qu'au fur et a mesure qu'on sélectionne un fournisseur, les sommes s'additionnent n'importe comment
Le second est encore moins bon :
Code:
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
| Sub Calcul_TTC()
Dim x As Variant
Dim u As Variant
Dim test As Boolean
x = 0
u = 0
'Deux problèmes dans cet algo :
'Si élément déjà dans une tab_four alors addition ne se fera jamaiss
'Si élément pas pareil que celui à la position i il s'ajoutera plusieurs fois dans le tableau
'parcourt tous les éléments de la colonne
For i = 0 To UBound(tab_val, 2)
test = False
'ReDim Preserve tab_four()
'verifie si un élément n'est pas déjà dans le tableau
For Z = 0 To UBound(tab_four, 1)
If tab_val(i, 9) = tab_four(Z) Then
test = False
End If
Next Z
If test = True Then
'Si élément pas encore dans le tableau
'Si élément différent de celui d'après alors on l'ajoute dans le tableau
For l = 2 To UBound(tab_val)
If tab_val(i, 9) <> tab_val(u, 9) Then
tab_four(x) = tab_val(u, 9)
x = x + 1
u = u + 1
Else
tab_somme(i) = tab_somme(i) + tab_val(u, 29)
End If
Next l
End If
Next i
'affichage
Cells(6, 6) = somme
Cells(4, 6) = "Somme de tous les fournisseurs : "
End Sub
'Marche pas, trop d'erreurs |
Donc si vous avez des idées, n'hésitez pas à partager quel que soit le langage ou comment vous l'exprimez :mrgreen:
Cordialement