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

KIM

XLDnaute Accro
Bonjour Dranreb,
Je reviens vers toi concernant la syntaxe de Gigogne.
Pour lancer un traitement sur 1 élément de la 1è col traitée dans Gigogne, j'utilise :
Set OP = GigIdx.Gigogne(Null, "OP", "DPT", "ETAT").Item("HEB") pour remplacer IF OP.ID = "HEB"
Est-il possible de rajouter aussi une condition sur la 2è ou 3è colonne listées dans Gigogne ?

Merci d'avance
KIM
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui, en ajoutant derrière .ItemSsGr(LeDPT).ItemSsGr(LÉtat)
Il faut que ce soient des String. Contrairement aux Dictionary les collections ne supportent pas les clés numériques car elles entreraient en conflit avec leur identité positionnelle dans la collection.
 

KIM

XLDnaute Accro
Bonjour Dranreb et le forum,
Je reviens vers toi concernant le calcul du budget par EQP.
Le code de la dépense est sur 6 car, le code de l'EQP est les 5 premiers car du code de la dépense.
Pour faire mon calcul je créé manuellement une col supplémentair (col 3) = gauche(col4;5).
Je souhaite éviter cette col supplémentaire. Est-ce possible de faire le test directement sur la col 4 : EQP_EXT :
c_à-d Regrouper la col BUD selon les 5 premiers car gauche du code EQP_EXT.

J'utilise régulièrement le code suivant pour calculer le nombre d'EQP principal :
If Right$(EQP_EXT.ID, 1) = "0" Then
TS(L, 6) = TS(L, 6) + 1 'Nbr d'equip principal

Mais je n'ai pas réussi à l'intégrer dans la somme du budget selon les 5 premiers car (gauche) de l'EQP_EXT.
le code suivant est utilisé actuellement avec une col supp (col3):
Code:
Sub Regroup()
Dim TS(), DPT As SsGr, EQPp As SsGr, EQPx As SsGr, LS&, SIT As SsGr, Détail, C As Long
ReDim TS(1 To Feuil2.UsedRange.Rows.Count, 1 To 6)
For Each DPT In Gigogne(Feuil2.[A5:E5], 1, 3)
   For Each EQPp In DPT.Co
      TS(LS + 1, 1) = EQPp.Somme(5)
      For Each Détail In EQPp.Co
         LS = LS + 1
    Next Détail, EQPp, DPT
Feuil2.[F5].Resize(UBound(TS, 1), 1).Value = TS

End Sub

Merci d'avance
KIM
 

Pièces jointes

  • KIM_GrouperParRefPrincipal.xlsm
    14.4 KB · Affichages: 27

Dranreb

XLDnaute Barbatruc
Bonjour.
Il est possible de ne créer la colonne qu'en interne dans un TE = PlgUti(Feuil2.[A5:E5]).value
For LE = 1 To UBound(TE, 1): TE(LE, 5) = Left$(TE(LE, 3), 5)
Rappel: La fonction Gigogne accepte un tableau VBA en guise de 1èr paramètre.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Après suppression de la colonne 3 qui devient donc l'EQP_EXT :
VB:
Sub Regroup()
Dim TE(), LE&, TS(), DPT As SsGr, EQPp As SsGr, EQPx As SsGr, LS&, SIT As SsGr, Détail, C As Long
TE = ColUti(Feuil2.[A5:E5]).Value
ReDim TS(1 To UBound(TE, 1), 1 To 1)
For LE = 1 To UBound(TE, 1): TE(LE, 5) = Left$(TE(LE, 3), 5): Next LE
For Each DPT In Gigogne(TE, 1, 5)
   For Each EQPp In DPT.Co
      TS(LS + 1, 1) = EQPp.Somme(4)
      For Each Détail In EQPp.Co
         LS = LS + 1
    Next Détail, EQPp, DPT
Feuil2.[E5].Resize(UBound(TS, 1), 1).Value = TS
End Sub
 

KIM

XLDnaute Accro
Bonjour Dranreb,
Je reviens vers toi pour un formatage du tableau et t'en remercie par avance.
Dans un code de type :
For Each OP In Gigogne....
For each DPT in OP.Co
Je traite chaque DPT sur une ligne et somme les DPT par OP sans problème.
L = L + 1: TS(L, 1) = "Total pour " & OP.ID
For C = 6 To CFin: TS(L, C) = TotOP(C): Next C
L = L + 1: Next OP
ensuite
FTSFT041.[X4].Resize(500, CFin).ClearContents
FTSFT041.[X4].Resize(L, CFin).Value = TS

1/ Comment je peux formater chaque ligne du total par OP avec par ex gras et fond bleu ?
Je n'ai pas réussi à le faire dans le code.
2/ Avec .ClearContents on vide les cellules.
y-a-t-il une commande pour supprimer les couleurs ?

Merci encore
KIM
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je pense que j'ajouterais une colonne au TS où je mettrais 1 pour la ligne de total, et que je le ferais à la fin, après le versement du TS, soit avec une mise en forme conditionnelle d'après cette colonne soit avec un SpecialCells(xlCelTypeConstants).
 

KIM

XLDnaute Accro
Bonjour Dranreb, et les amis,
@Dranreb,
Dans TS j'ai rajouté une ligne pour le cumul avec en première colonne "Total pour " & OP.ID. Je peux mettre seulement "Total" en 1è col et dans la suivante " pour " & OP.ID
Est-ce que cela n'est pas suffisant pour formater la ligne ou apparait "Total" ? et si oui comment?

Merci
KIM
 

KIM

XLDnaute Accro
@Dranreb,
La ligne du total existe déjà. Le cumul commence à la col 4 du TS. En col 1 j'ai mis le texte "Total ..." pour identifier cette ligne des autres lignes à la lecture du tableau.
Dans la col 1, il n'y a que du texte. Je peux mettre 1 pour la ligne du total. Quelle est la syntaxe complète pour identifer cette ligne avec 1 et mettre en gras et en jaune le fond.
Merci
KIM
 

Discussions similaires

Réponses
1
Affichages
345

Statistiques des forums

Discussions
312 095
Messages
2 085 249
Membres
102 835
dernier inscrit
Alexandrax971