• Initiateur de la discussion Initiateur de la discussion akni
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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.
 
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:
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
 
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:
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

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
 
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
 
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
 
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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
1 K
Retour