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

Dranreb

XLDnaute Barbatruc
La principale nouveauté, donc, ce sont quelques méthodes de SsGr qui évitent d'avoir à programmer un parcourt de Détail pour le calcul de quelques trucs très simples, Somme et Nombre.

C'est expliqué dans la feuille d'aide de GigIdx pour le paramètre ColOrd :
… et leurs signes le sens croissant ou décroissant du classement souhaité.
Donc -3 c'est colonne 3 en ordre décroissant,

À part ça, un élément non numérique, = 0 ou omis dans la liste marquera la fin des colonnes
définissant l'organisation du résultat, mais des colonnes supplémentaires spécifiées
derrière pourront encore influencer le classement des lignes de détail.
 

Dranreb

XLDnaute Barbatruc
Oui, je l'ai…
Information: la protection du projet VBA de GigIdx ne vise qu'à décourager de vouloir inutilement tenter de comprendre comment ça marche au lieu d'étudier comment on doit l'utiliser. Elle n'est pas trop difficile à déplomber.
 

KIM

XLDnaute Accro
Bonsoir Dranreb, et le forum,
J'ai 3 SsGr et je fais le total pour la colonne 14 avec
For Each Détail In Statut.Co
Tot = Tot + Détail(14): Next Détail
Je dois rajouter une colonne (Détail(8) ) dans le tableau TS() qui me donne le nombre sans doublons des données dont le dernier caractère = 0.
Les données de cette colonne sont de type
SHZ180
OHP010
OHP010
OHP011
OHP012
BEL013
BEL010
BEL014
BEL023
BEL010
MOU050
Cette liste ci-dessus me donne 4 codes sans doublons et se terminent par "0"
Est-il possible de faire ce calcul avec la commande Count ?
Sinon comment faire?
PS: La commande Count donne le nombre des membres de Co avec les doublons.
Y-a-t-il une autre commande qui compte les membres d'un Co sans doublons?

Merci d'avance de ton aide
KIM
 
Dernière édition:

KIM

XLDnaute Accro
Bonsoir Dranreb,
J'ai rajouté un 4è SsGr pour la col 8. Je souhaite compter déjà le nombre d'éléments du SsGR4 par SsGr3 avec :
For Each Détail In SsGr4.Co
TS(L, 10) = TS(L, 10) + Détail(14)
TS(L, 11) = TS(L, 11) + Détail(17)
TS(L, 12) = TS(L, 12) + Détail(18)
Next Détail
TS(L, 4) = SsGr4.Count: Next SsGr4
TS(L, 5) = SsGr3.Count: Next SsGr3

Le SsGr4.Count me donne pour chaque élément du SsGr4 le nombre d'occurence
et le SsGr3.Count me donne le nombre d'éléments total par SsGr3 y compris les doublons.

Comment je peux compter sans doublons ?

Merci d'avance
KIM
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Il faudrait que je voie les données et le résultat souhaité, là je n'y comprends rien.
Normalement SsGr3.Count doit donner non pas un total mais le nombre de SsGr4 ayant des Id différents, donc sans doublon.
 
Dernière édition:

KIM

XLDnaute Accro
Bonjour Dranreb,
La colonne à compter sans doublons par DR/OP/SITE est la colonne 8.
Le résultat souhaité pour la DT01 par ex est dans l'onglet "Résultat souhaité"

La macro Sub Recap_Tabs_Surfaces_ParDR_OP_Site_vR43() traite 3 SsGr
et dans la macro Sub Recap_Tabs_Surfaces_ParDR_OP_Site_vR44() j'ai intégré la col 8 en tant que SsGr4.
Je n'ai pas pu créé le résultat souhaité.
Merci de ton aide
KIM
 

Pièces jointes

  • KIM_GigogneCompterConditions_v1.xlsm
    394 KB · Affichages: 36

Dranreb

XLDnaute Barbatruc
Bonjour.
Déjà, à mon avis, ça ne facilite pas la mise au point de mettre des numéros aux noms des SsGr au lieu de DPT, SRC, SIT et BAT.
Apparemment tu ne veux qu'une ligne par DR/OP/SIT alors le renseignement du début de ligne commençant par L = L + 1 ne doit pas être effectué pour chaque bâtiment, mais plus haut, pour chaque site.
Ensuite je ne comprends pas l'histoire du 'dont le dernier' de la colonne E du résultat souhaité.
Et pourquoi ça ne s'appelle pas partout pareil ? Faudrait choisir entre DR/DPT, OP/SRC
 

Dranreb

XLDnaute Barbatruc
Ceci me paraîtrait assez cohérent :
VB:
Sub Recap_Tabs_Surfaces_ParDR_OP_Site_vR44()
'Synthese R4
Dim PlgDon As Range, TS(), L&, C&, DPT As SsGr, SRC As SsGr, SIT As SsGr, BAT As SsGr, Détail
Dim TotSRC() As Double, TotDPT() As Double
Dim CFin As Long, LFin As Long
Set PlgDon = ColUti(FBase1.[A5:R5])
LFin = PlgDon.Rows.Count
CFin = 12
ReDim TS(1 To LFin, 1 To CFin), TotSRC(4 To CFin), TotDPT(4 To CFin)
For C = 1 To 12: TS(1, C) = Array("DPT", "OP", "SITE", "Nb BAT", "Nb lignes", "Nb sites", "Nb OP", "", "", "SHON", "SUB", "SUN")(C - 1): Next C
L = 1
For Each DPT In Gigogne(PlgDon, 1, 10, 2, 8)
   For C = 4 To CFin: TotDPT(C) = 0: Next C
   For Each SRC In DPT.Co
      For C = 4 To CFin: TotSRC(C) = 0: Next C
      For Each SIT In SRC.Co
         L = L + 1
         TS(L, 1) = DPT.Id
         TS(L, 2) = SRC.Id
         TS(L, 3) = SIT.Id
         TS(L, 4) = SIT.Count 'Nb BAT
         For Each BAT In SIT.Co
            For Each Détail In BAT.Co
               TS(L, 10) = TS(L, 10) + Détail(14)
               TS(L, 11) = TS(L, 11) + Détail(17)
               TS(L, 12) = TS(L, 12) + Détail(18)
               Next Détail
            TS(L, 5) = TS(L, 5) + BAT.Count: Next BAT 'Nb lignes
         For C = 4 To CFin: TotSRC(C) = TotSRC(C) + TS(L, C): Next C, SIT
      L = L + 1
      TS(L, 2) = "Total pour " & SRC.Id
      TotSRC(6) = SRC.Count 'Nb sites
      For C = 4 To CFin: TS(L, C) = TotSRC(C): TotDPT(C) = TotDPT(C) + TotSRC(C): Next C
      TS(L, 7) = Empty: L = L + 1: Next SRC
   L = L + 1
   TS(L, 1) = "Total pour " & DPT.Id
   TotDPT(7) = DPT.Count 'Nb OP
   For C = 4 To CFin: TS(L, C) = TotDPT(C): Next C
   L = L + 1: Next DPT
Application.EnableEvents = False
FR41.[A4].Resize(1000000, CFin).ClearContents
FR41.[A4].Resize(L, CFin).Value = TS
Application.EnableEvents = True
End Sub
 

KIM

XLDnaute Accro
Bonjour Dranreb,
Merci, J'ai tellement de tableaux de synthèse assez lourds en formules que j'essaye de les alléger en utilisant Gigogne.
Suite à ton dernier post, je constate que maintenant que :
- TS(L, 4) = SIT.Count 'Nb BAT me donne le nombre de Bat sans doublons.
1/ Cela a été possible avec la version des modeles de service de ton dernier poste.
2/ SIT.Count donne le nb de BAT sans doublons car BAT est le 4è SsGr . Est-ce correct ?
3/ Le code BAT est de 6 car de type :
OHP010
OHP011
OHP012
Pour terminer ce tableau je souhaite compter en TS(L,5) le nombre de BAT sans doublons qui se termine par "0" seulement. Comment faire?
Merci encore
KIM
 

Dranreb

XLDnaute Barbatruc
1 – Ça a toujours marché comme ça même avec l'ancienne version, si c'est correctement programmé
2 – Oui c'est ça, dans la mesure où SIT est le 3ième, qui précède.
2 – Faire :
VB:
For Each BAT In SIT.Co: If Right$(BAT.Id, 1) = "0" Then TS(L, 5) = TS(L, 5) + 1
   Next BAT
 
Dernière édition:

KIM

XLDnaute Accro
Merci Dranreb,
Je vais utiliser cette nouvelle version de tes modules de service avec les autres tableaux de synthèses déjà transformés sous Gigogne.

Merci encore, je continue. Quel gain de temps en exécution.
Bonne journée
KIM
 

Discussions similaires

Réponses
1
Affichages
322

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG