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,
Le tableau d'extraction d'une base centrale reçue possède plus de 40 colonnes. A chaque réception l'ordre des colonnes n'est pas respecté et certaines col sont rajoutées. Le module SsGR avec ListObject et NColTab (rech n° col selon titre) m'ont parmis d'appliquer la methode de SsGR et Gigogne quelque soit le tableau reçu.
Par contre, pour comparer d'une année à une autre ou comparer 2 tableaux cellule par cellule, il faut que les 2 tableaux soient identiques. la sélection de certaines colonnes à partir d'un tableau de plus de 40 colonnes m'ont permis de créer des tableaux identiques par année et de les comparer cellule par cellule comme dans l'exemple ci-joint pour analyser l'évolution de la base.
Ta proposition pour une procédure dans un module standard qui renseigne un tableau d'après certaines colonnes spécifiées d'un ListObject avec des paramètres en entrée : Nom de la feuil résultat, la ligne de départ, nombre de colonnes sélectionnées, suivi des titres ou numéros de colonnes sélectionnées (voir post 194) me permet d'optimiser l'écriture du code.
Merci d'avance.
KIM
 

Pièces jointes

  • GrpOrgB64.xlsm
    82.1 KB · Affichages: 26

Dranreb

XLDnaute Barbatruc
Oh là ! C'est quoi ce classeur qui utilise de vieilles versions des modules de service…
GigIdx a toutes les fonctionnalités utilisées dedans. C'est Gigogne au lieu de GroupOrg.
Si les données ne sont pas sous forme de tableaux Excel, on ne peut pas désigner les colonnes par leurs titres. Sauf à les mettre prélablement dans un Dictionary qui redonnera le numéro de colonne pour chaque titre trouvé.
TabCols, à laquelle on peut ensuite les spécifier, peut être utilisé comme arguments de TableUnique, TableUniqueCréée ou CréerTableUnique. Ces trois procédures existent dans GigIdx.MTableaux
 

KIM

XLDnaute Accro
Ci-joint la macro de comparaison de 2 onglets que j'utilise pour avis.
A partir de mes tableaux d'origines, je souhaite créer des tableaux identiques pour les comparer cellule par cellule.
Merci d'avance
KIM
 

Pièces jointes

  • GigIdxB642.xlsm
    28.3 KB · Affichages: 30

Dranreb

XLDnaute Barbatruc
Oui et alors ?
Ça me semble pas mal tout ça.
Ce ne sont pas les tableaux d'origine, je suppose…
Tu sait quand même bien écrire une procédure qui fabrique un Dictionary à partir de titres trouvés dans une ligne non couverte par un ListObject, rendant pour chacun le numéro de colonne où il a été trouvé, non ?
 

KIM

XLDnaute Accro
Bonsoir Dranreb,
La fonction SommeSi de ton post 159 focntionne correctement. Elle prend seulement une condition :
TS(L, 5) = TS(L, 5) + DT.SommeSi(nC_OP, "PTR", nC_BUD).
Pour plusieurs conditions, j'ai le résultat correcte avec plusieurs lignes de codes.
Pour simplifier, Est-il possible de modifier cette fonction pour accepter un ou plusieurs critères par ex :
TS(L, 5) = TS(L, 5) + DR.SommeSi(nC_OP, "PTR", nC_RT, "TER", nC_BUD)

Public Function SommeSi(ByVal CR As Long, ByVal V, ByVal CS As Long) As Double
Dim Mmbr As SsGr, Détail
If TypeOf Co(1) Is SsGr Then
For Each Mmbr In Co: SommeSi = SommeSi + Mmbr.SommeSi(CR, V, CS): Next Mmbr
Else: On Error Resume Next
For Each Détail In Co: If Détail(CR) = V Then SommeSi = SommeSi + Détail(CS)
Next Détail: End If
End Function

Merci d'avance
KIM
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Si tu te les veux, écris les toi. Ça va trop loin.
C'est à mon avis d'une utilisation trop marginale.
On peut bien s'écrire les boucles dans le programme utilisateur.
Il y a même maintenant la possibilité avec la méthode Extraire de créer des petits tableaux récupérant les valeurs des lignes de détail attachées à plusieurs niveaux de SsGr imbriqués si nécessaire.
 

KIM

XLDnaute Accro
Bonsoir,
En effet, J'ai déjà utilisé des boucles avec un résultat correct.
J'ai aussi utilisé les tableaux avec la méthode Extraire. Ces méthodes sont maitrisées.
La dernière demande a pour objectif de simplifier un peu le code, par paresse car très utilisé.
Merci pour les conseils
KIM
 

KIM

XLDnaute Accro
Bonsoir Dranreb et le forum,
Je souhaite remplir les cellules vides d'une colonne par "0".
Le code suivant s'exécute correctement :
For Each cel In LOt.DataBodyRange.Columns(nC_DPT).Cells
If cel.Value = "" Then cel.Value = "0"
Next cel

Pour traiter plusieurs colonnes, le code suivant ne fonctionne pas :
For C = 1 To 4
For Each cel In LOt.ListColumns(Choose(C, nC_DPT, nC_SIT, nC_BAT, _
nC_SUN)).Cells
If cel.Value = "" Then cel.Value = "0"
Next cel
Next C

As-tu une idée, Merci d'avance
KIM
 

KIM

XLDnaute Accro
Bonjour Dranreb, et le forum,
J'ai réussi à remplacer les cellules à blanc (vides) par 0 avec le code ci-dessous :
For nC = 1 To 5
With LOt.ListColumns(Choose(nC, nC_SHON, nC_SDP, nC_SUB, _
nC_SUN, nC_LS)).DataBodyRange
On Error Resume Next
Set rCel = .SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rCel Is Nothing Then rCel.Value = "0"
End With
Next nC
Mecri pour les commentaires
Bonne journée
KIM
 

KIM

XLDnaute Accro
Bonjour,
Le fichier d'origine est extrait d'une base oracle. Les cellules vides ne sont pas vraiment vides. Quand je lance la mcro de création d'un tableau de synthèse, j'ai un message d'erreur. Il me suffit de remplir les cellules vides par 0 et tout fonctionne.
Pour tester, comment modifier la macro de mon dernier post pour remplir ces cellules par le code hexa ou autre du vide et non 0 ?
Merci d'avance
KIM
 

KIM

XLDnaute Accro
Bonjour Dranreb et le forum,
Je reviens vers toi car j'ai un nouveau type de fichiers à traiter. Certaines colonnes sont en double pour avoir plus de détails dans d'autres colonnes. Comment compter et faire la somme des éléments uniques, sans doublons.
Pour le fichier ci-joint :
Pour chaque DPT/SERV/SIT j'ai 1 ou plusieurs EQP
Pour chaque EQP, il y a un BUD
Pour chaque BUD il y plusieurs PHASE et des colonnes par PHASE
Les DPT/SERV/SIT/EQP et BUD sont démultipliés pour toutes les PHASE d'un EQP
Je n'ai pas réussi à créer un tableau recap par DPT/SERV pour avoir par DPT/SERV :
le nombre de SIT
le nombre d'EQP
la somme des BUD des EQP du SRV (somme sans doublons)
Faut-il aller jusqu'au niveau EQP dans Gigogne(...), voir fichier ci-joint.
Merci d'avance pour ton aide.
KIM
 

Pièces jointes

  • GigogneKIM_LignesMultiples_v1.xlsm
    25.6 KB · Affichages: 24

Discussions similaires

Réponses
1
Affichages
347

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth