Tableaux dans vba

akni

XLDnaute Nouveau
Bonjour,
J'ai un tableau des quantités vendues par articles, clients et mois, je veux faire une récap par client sans passer par TCD quand j'utilise la méthode FOR NEXT elle tarde un peu, je crois qu'avec les tableaux Ubound et Lbound le résultat sera rapide.
ci joint mon fichier avec la macro FOR NEXT.


Merci beaucoup pour toute aide.
 

Pièces jointes

  • test Tableau 2.xlsm
    1.8 MB · Affichages: 116

chris

XLDnaute Barbatruc
Bonjour

J'avais divisé le temps par 2 (14 secondes au lieu de 29) avec dictionary mais les sumifs étant très consommateurs...

Je suis totalement bluffé par le résultat obtenu en 1 seconde par Dranreb que je salue bien bas !

Chapeau !
 

Dranreb

XLDnaute Barbatruc
Bonsoir
Du coté de l'appel de fonction Gigogne, il suffit de la terminer par la suite de numéros des colonnes contenant les critères souhaités, là où il n'y a actuellement que le 3 qui devait correspondre au code client, ce qui ne semble plus être le cas. Donc dans la nouvelle liste: 3, 6, 5 pour ceux que vous citez.
Pour chacun d'eux, il faut prévoir une variable As SsGr et, dans le code, imbriquer des boucles For Each SGry In SGrx.Co supplémentaires avant de pouvoir utiliser la For Each Détail In SGrz.Co la plus interne. Tout cela est expliqué en détail dans le module MGigogne et aussi, un peu différemment, dans le module de classe SsGr.
 

Dranreb

XLDnaute Barbatruc
Par exemple comme ça, ça a l'air pas mal :
VB:
Sub Recap2()
Dim T(), L As Long, C As Long, GrpArt As SsGr, Zone As SsGr, Ville As SsGr, Client As SsGr, Détail
ReDim T(1 To 10000, 1 To 6)
For C = 1 To 3: T(1, C + 3) = "Mois " & C: Next C
L = 1
For Each GrpArt In Gigogne(Feuil1.[A2:H2].Resize([A1000000].End(xlUp).Row - 1), 3, 6, 5)
   L = L + 1: T(L, 1) = "Groupe d'articles " & GrpArt.Id
   For Each Zone In GrpArt.Co
      L = L + 1: T(L, 2) = "Zone " & Zone.Id
      For Each Ville In Zone.Co
         L = L + 1: T(L, 3) = Ville.Id
         For Each Détail In Ville.Co
            C = Détail(8) + 3: T(L, C) = T(L, C) + Détail(7)
            Next Détail, Ville, Zone, GrpArt
Feuil1.[L1:Q10000].Value = T
End Sub
Mais c'est un peu plus long, forcément, 3 comparaisons au lieu d'une pour le classement…
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

J'avais commencé à coder puis oublié l'ouvrage. Je publie donc tardivement. Durée d'exécution similaire à Dranreb mais adaptation aux données source pas souple du tout :( (ma macro s'adapte malgré tout au nombre de valeurs de la colonne 'mois'). La boîte à outils de Dranreb est top.
 

Pièces jointes

  • akni- bilan- v1.xlsm
    416.5 KB · Affichages: 92
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

(...) comment puis-je ajouter des criteres pour avoir une récap par groupe d'articles, zone et ville. (...)

J'ai voulu adapter ma première macro en y ajoutant des paramètres. Contrairement à Dranreb, j'ai dû tout réécrire pour aboutir à la procédure :
Regrouper(Cible As range, Source As range, ColX, ColSom, ParamArray ColY())
Les explications sur l'utilisation de la procédure sont dans l'onglet "Guide".
La feuille "Data" est la feuille de départ. On y a mis deux exemples d'utilisation de la procédure.
 

Pièces jointes

  • akni- bilan- v2.xlsm
    566.6 KB · Affichages: 99
Dernière édition:

akni

XLDnaute Nouveau
Merci beaucoup mapomme pour le fichier,
dans mon boulot je dois envoyer à chaque responsable de zone ses ventes :
fichier ventes zone nord ou sud avec ventes de chaque groupe d'article dans un onglet different, je n'arrive pas à automatiser cette opération si vous pouvez m'aider.

Merci beaucoup
 

Pièces jointes

  • akni- bilan- v2.xlsm
    2.3 MB · Affichages: 76

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous n'y arrivez pas, mais qu'avez vous essayé au juste ?
Tout ce que je peux vous dire c'est que ce serait assez facile en partant d'un algorithme très similaire à celui du poste #8, et donc à l'aide du module de service MGigogne et du module de classe SsGr.
 

Dranreb

XLDnaute Barbatruc
Il n'y a que vous qui puissiez le faire, d'ailleurs, puisque vous seul savez ce que vous voulez mettre dans chaque feuille en cellule B4 et dans les colonnes C et D à partir de la ligne 7.
(Le reste, ainsi que les noms des feuilles (sauf s'il en fallait plusieurs, une pour chaque mois), on peut le deviner)
 

akni

XLDnaute Nouveau
Bonjour Dranreb, merci beaucoup pour l'interet que vous donnez à mes demandes,
pour cequi est de la cellule B4 elle est égale au mois du tableau par exemple si c'est 6 (juin) je devrai avoir dans la colonne C les ventes du mois de juin et dans la colonne D le cumul des ventes à fin juin.
Pour ce qui est des modules MGigogne SsGr j'ai essayé de comprendre leur fonctionnement mais je n'y ai pas arrivé, je vous serai tres reconnaissant si vous pouviez m'expliquer le rôle de ces 2 modules .

Merci beaucoup.
 

Dranreb

XLDnaute Barbatruc
Qu'est-ce que vous appelez le mois du tableau ? D'où est-ce qu'on le prend ?
Le Cumul à fin n c'est le cumul de tous les mois ?
Qu'y a-t-il dans les explications figurant dans ces modules qui n'est pas clair pour vous ?
Me le dire permettrait de les améliorer.
Remarque: c'est le fonctionnement que doit avoir une programmation d'application utilisant la fonction Gigogne qu'il faut comprendre. La compréhension du processus exécuté par cette fonction n'a aucune importance, il faut seulement bien comprendre la structure de la collection qu'elle renvoie. Ou plus exactement savoir quoi lui spécifier comme paramètres pour lui faire fabriquer la collection dont on a besoin.
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
319

Statistiques des forums

Discussions
311 541
Messages
2 080 540
Membres
101 236
dernier inscrit
patro