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 et le forum,
Je me suis peut être mal exprimé.
TTit = LOt.HeaderRowRange.Value me donne la liste des titres des colonnes du tableau d'origine (Feuil FBase).
Avec Set LOt = FBase.ListObjects(1), je récupère via NColTab le numéro des col qui m'intéressent, par exemple
nC_OP = NColTab(LOt, "BT.Oper")
nC_SIT = NColTab(LOt, "BT.Sit")
nC_CP = NColTab(LOt, "SIT.Cp")
nC_TER = NColTab(LOt, "BT.Ter")
nC_RT = NColTab(LOt, "BT.R type")
nC_RD = NColTab(LOt, "BT.R detail")
Q/ Je recherche une fonction qui me copie ces colonnes dans une Feuil BaseT à partir de la ligne 10 et dans l'ordre souhaité. par ex CopCol (FBase, BaseT, 10, nC_CP, nC_SIT, nC_RD, nC_RT)

Cela me permet de créer des tableaux identiques à partir des tableaux d'orignine pour les comparer cellule par cellule.
Merci d'avance de ton aide
KIM
 

Dranreb

XLDnaute Barbatruc
Écris peut être la fonction inverse de NColTab:
VB:
Function NTitTab(ByVal LOt As ListObject, ByVal Col As Long) As String
On Error Resume Next
NTitTab = LOt.ListColumns(Col).Name
If Err Then MsgBox "Le tableau " & LOt.Name & " ne contient pas de colonne " _
   & Col & ".", vbCritical: End
End Function
 

Dranreb

XLDnaute Barbatruc
Et pour les verser en série dans la 1ère ligne d'un tableau:
VB:
Sub VerserTitColTab(Tr(), ByVal LOt As ListObject, ByVal ColDép As Long, ParamArray PAC() As Variant)
On Error Resume Next
Dim P As Long
For P = 0 To UBound(PAC)
   Tr(1, ColDép) = LOt.ListColumns(PAC(P)).Name
   ColDép = ColDép + 1: Next P
End Sub
 

KIM

XLDnaute Accro
Bonjour Dranreb & le forum,
J'ai intégré tes 2 fonctions avec le code suivant : voir fichier ci-joint.
TRés est toujours vide, Comment le remplir avec VerserTitColTab

'Récupérer les colonnes sélectionnées
Dim C_PHASE As String, C_ETAT As String, C_DPT As String, C_SERV As String, C_SIT As String
C_DPT = NTitTab(LOt, nC_DPT)
C_SERV = NTitTab(LOt, nC_SERV)
C_SIT = NTitTab(LOt, nC_SIT)
C_PHASE = NTitTab(LOt, nC_PHASE)
C_ETAT = NTitTab(LOt, nC_ETAT)

VerserTitColTab TRés, LOt, 2, Array(C_ETAT, C_PHASE, C_DPT, C_SERV, C_SIT)
FDselect.[A4].Resize(500, 12).Value = TRés

Merci de ton aide
KIM
 

Pièces jointes

  • GigogneKIMselctCol.xlsm
    24 KB · Affichages: 83

Dranreb

XLDnaute Barbatruc
Un ParamArray est un paramètre spécial qui, s'il est employé, ne peut l'être qu'en dernier dans la Sub ou Function. Bien qu'il soit récupéré dans la procédure sous forme d'Array, ce n'en est pas un qu'il faut préciser à l'appel mais une suite de paramètres ordinaires en nombre imprévisible. La fonction Gigogne, par exemple, finit aussi par un ParamArray pour pouvoir spécifier un nombre quelconque de colonnes de regroupements.
 

KIM

XLDnaute Accro
En effet en précisant une suite de parametres, je récupère seulement les titres des colonnes selon l'ordre souhaité. Par contre je n'arrive pas à récupérer le contenu de chaque colonne.
VerserTitColTab TRés, LOt, 2, C_ETAT, C_PHASE, C_DPT, C_SERV, C_SIT
FDselect.[A4].Resize(500, 12).Value = TRés

Merci d'avance
KIM
 

KIM

XLDnaute Accro
Désolé Dranreb,
Les données reçues (FDonn) représente plus de 30 colonnes. Je souhaite récupérer 11 colonnes avec leur contenu et dans l'ordre souhaité dans une autre Feuil (FDselect).
Comment récupérer la colonne de titre ETAT dans FDselect.[A4] ?
FDselect.[A4] = LOt.ListColumns("ETAT").DataBodyRange n'a rien donné
Merci encore

KIM
 

KIM

XLDnaute Accro
Re,
Le code de ta discussion 192 suivant focntionne très bien.
Est-il possible de créer une fonction par exemple ColSel comme ColUti qu'on peut copier dans le module de classe SsGr avec comme paramètres Nom de la feuil résultat, la ligne de départ, nombre de colonnes suivi des titres ou numéros de colonnes sélectionnées :
pour le code ci-dessous : ColSel (FDselect, 20, 5, "ETAT", "PHASE", "DPT", "SERV", "SITE")

For C = 1 To 5
LOt.ListColumns(Choose(C, "ETAT", "PHASE", "DPT", _
"SERV", "SITE")).Range.Copy FDselect.Cells(20, C)
Next C

Merci encore
KIM
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je n'arrive pas bien à suivre l'idée. Surtout en tant que méthode de SsGr ???
Il serait possible d'écrite une procédure dans un module standard qui renseigne un tableau d'après certaines colonnes spécifiées d'un ListObject.
Il existe d'ailleurs déjà une Function TabCols dans le module GigIdx.MTableaux qui renvoie un tableau fabriqué comme ça. Mais elle ne cherche pas pour l'instant les titres.
 

Discussions similaires

Réponses
1
Affichages
343

Statistiques des forums

Discussions
312 069
Messages
2 085 037
Membres
102 762
dernier inscrit
Ucef