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
J'ai continué mes tests, j'ai toujours le message d'erreur :
"Argument ou appel de procédure incorrect"
J'ai utilisé,
VB:
With ColLignesOùCondR1C1(RngRés, "LEFT(RC2,5)=""Total""")
'Total est en 2è colonne
  .Interior.ColorIndex = 6
  .Font.Bold = True
  .NumberFormat = "#,##0"
End With

Merci d'avance
KIM
 

Pièces jointes

  • ColorierCond4.xlsm
    34.2 KB · Affichages: 31

Dranreb

XLDnaute Barbatruc
Bonsoir.
VB:
With ColLignesOùCondR1C1(RngRés, "LEFT(RC" & RngRés.Columns(2).Column & ",5)=""Total""")
Ce que je ne comprends pas c'est pourquoi tu n'en restes pas, vu que c'est une macro qui met ces totaux et qu'elle sait où elle les met, au 1 mis dans une colonne supplémentaire temporaire (comme en utilise d'ailleurs aussi une la fonction LignesOùCondR1C1).
Ayant été mis en colonne CFin de RngRés cette instruction marche aussi :
VB:
With Intersect(RngRés, RngRés.Columns(CFIN).SpecialCells(xlCellTypeConstants).EntireRow)
Il ne resterait plus qu'à ajouter une de ces deux instructions :
VB:
RngRés.Columns(CFIN).Clear
RngRés.Columns(CFIN).Delete xlShiftToLeft
La fonction LignesOùCondR1C1 utilise la 2ième: ColTrv.Delete xlShiftToLeft.
 
Dernière édition:

KIM

XLDnaute Accro
Bonsoir Dranreb,
En effet j'utilise ta première solution de la manière suivante :
VB:
With Intersect(RngRés, RngRés.Columns(CFIN).SpecialCells(xlCellTypeConstants).EntireRow)
   .Interior.ColorIndex = 37 
   .Font.Bold = True
   .NumberFormat = "#,##0"
End With
RngRés.Columns(CFIN).SpecialCells(xlCellTypeConstants).ClearContents
Je vais modifier la dernière ligne par :
RngRés.Columns(CFIN).Clear
Par contre ma dernière demande consiste à me familiariser avec tes nouvelles fonctions.
Merci encore pour tes conseils.
KIM
 

KIM

XLDnaute Accro
Bonjour Dranreb, et le forum,
Je reviens vers toi suite à un problème de formatage de données. et je t'en remercie par avance de tes conseils.
Je compare 2 bases selon 2 colonnes communes qui proviennent de 2 logiciels différents :
For Each DR In Gigogne(TE, 1, 2)
Le résultat est : Disparu, Nouveau ou Mis-à-jour.
Je retrouve des données identique mais sont considérées soit Disparu ou Nouveau car elles ne sont pas du même format.

En effet, dans la col 2 je retrouve du texte et du numérique mais le format de la cellule est "Standard".
J'ai essayé de créer une col supplémentaire avec un format Texte, ou numérique mas sans succès.
Comment je peux appliquer un format identique à l'ensemble d'une colonne définie dans Gigogne ?
Merci d'avance
KIM

For Each DR In Gigogne(TE, 1, 2)
For Each BAT In DR.Co
L = L + 1: Cas = 0
For Each Détail In BAT.Co
If Détail(0) = 0 Then
For c = 1 To 4: TS(L, c) = Détail(c): Next c
Cas = 1
Else
For c = 1 To 7: TS(L, c + 4) = Détail(c): Next c
Cas = Cas + 2
End If
Next Détail
TS(L, 13) = Choose(Cas, "Disparu", "Nouveau", "Mis-à-jour")
Next BAT
Next DR
 

Pièces jointes

  • ComparerTest.xlsm
    69 KB · Affichages: 13

Dranreb

XLDnaute Barbatruc
Bonjour.
Juste après CréerTableUnique TE… mettez ça pour tout avoir en texte :
VB:
For L = 1 To UBound(TE, 1)
   If Not IsEmpty(TE(L, 2)) Then TE(L, 2) = CStr(TE(L, 2))
   Next L
L = 0
Remarque: ce n'est pas une question de format mais de type de donnée.
 

KIM

XLDnaute Accro
Bonjour Dranreb,
Quelques macros de traitement de données n'utilisent pas le format tableau.
Je déclare les données par exemple :
Set PlgSrc = FTS.[C4].Resize(25, CFIN)
With PlgSrc.Rows(1) '1ière ligne du tableau, ligne des titres.

Est-ce que nC_OP= NColTab(PlgSrc.Row(1), "Operateur région") fonctionne avec PlgSrc ?
Sinon As-tu une fonction qui me donne le numéro de colonne d'un titre d'une plage définie par PlgSrc à utiliser dans For Each OP In Gigogne(PlgSrc, nC_OP) ?
Merci d'avance
KIM
 

KIM

XLDnaute Accro
Bonsoir Dranreb et le forum,
Avec ces 2 méthodes je retrouve le num de col d'un titre.
nC_OP= NColTab(PlgSrc.Row(1), "Operateur région")
ou
nC_OP = WorksheetFunction.Match("Operateur région", PlgSrc.Rows(1), 0)

Pour créer les titres de colonnes du tableau TS j'utilise la ligne suivante :
For c = 1 To ColDep: TS(1, c) = Choose(c, "OP", "DPT", "LIBELLE", "ETAT"): NEXT c

Ma question, j'espère ne pas dire de bétises, as-tu une fonction ou commande pour récupérer le titre de la colonne trouvée ci-dessus pour me permettre d'écrire la ligne suivante : exemple fonction Titre(numCol) ?
For c = 1 To ColDep: TS(1, c) = Choose(c, Titre(nC_OP), Titre(nC_DPT), Titre(nC_LIBELLE), Titre(nC_ETAT)): NEXT c

Cela facilite l'exploitation de la macro.
Merci d'avance
KIM
 

KIM

XLDnaute Accro
Bonjour Dranreb et le forum,
Il y a des fois je n'arrive pas à trouver le pb et je souhaite éviter de rajouter des variables.
J'ai mis en place 3 tableaux de récap. J'ai seulement un problème avec le 2è tableau que je n'arrive pas à résoudre sauf peut-être qu'il faut rajouter des variables pour le total.
Le problème se situe au niveau du 1er DT. Le nombre NBat du 1er Dr est erronée (fichier ci-joint). et je n'arrive pas à trouver pourquoi!
Code:
'Nbr DS et DB par DR
L = 0: NSite = 0: NBat = 0
ReDim TS(1 To 10000, 1 To 3)
For Each Dr In Gigogne(TE, 1, 2, 3)
  L = L + 1
  TS(L, 1) = Dr.ID
  TS(L, 2) = Dr.Count
  NSite = NSite + Dr.Count
    For Each DS In Dr.Co
       TS(L, 3) = DS.Count
       NBat = NBat + DS.Count
    Next DS, Dr
   
  L = L + 1
  TS(L, 2) = NSite
  TS(L, 3) = NBat
TDonn.[K3].Resize(10000, 3).Value = TS

Merci d'avance
KIM
 

Pièces jointes

  • IdentifierDoublons_kb1.xlsm
    17.4 KB · Affichages: 9

Discussions similaires

Réponses
1
Affichages
321