1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

Tableaux dans vba

Discussion dans 'Forum Excel' démarrée par akni, 8 Mars 2017.

?

Tableau

  1. Choix du sondage...

  2. Choix du sondage...

Les résultats sont uniquement visibles après avoir voté.
  1. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    J'ai continué mes tests, j'ai toujours le message d'erreur :
    "Argument ou appel de procédure incorrect"
    J'ai utilisé,
    Code (Visual Basic):
    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:

  2. Dranreb

    Dranreb XLDnaute Barbatruc

    Inscrit depuis le :
    31 Janvier 2011
    Messages :
    14943
    "J'aime" reçus :
    925
    Sexe :
    Masculin
    Habite à:
    Belfort
    Utilise:
    Excel 2016 (PC)
    Bonsoir.
    Code (Visual Basic):
    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 :
    Code (Visual Basic):
    With Intersect(RngRés, RngRés.Columns(CFIN).SpecialCells(xlCellTypeConstants).EntireRow)
    Il ne resterait plus qu'à ajouter une de ces deux instructions :
    Code (Visual Basic):

    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: 13 Août 2018
  3. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Bonsoir Dranreb,
    En effet j'utilise ta première solution de la manière suivante :
    Code (Visual Basic):
    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
     
  4. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    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:

  5. Dranreb

    Dranreb XLDnaute Barbatruc

    Inscrit depuis le :
    31 Janvier 2011
    Messages :
    14943
    "J'aime" reçus :
    925
    Sexe :
    Masculin
    Habite à:
    Belfort
    Utilise:
    Excel 2016 (PC)
    Bonjour.
    Juste après CréerTableUnique TE… mettez ça pour tout avoir en texte :
    Code (Visual Basic):
    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.
     
  6. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Merci Dranreb,
    Cela fonctionne, tout est dans l'ordre.
    C'est très pratique et cela évite de créer des col supplémentaires.

    Pour information, que faut-il mettre pour avoir toute une colonne en numérique ?

    Merci d'avance
    KIM
     
  7. Dranreb

    Dranreb XLDnaute Barbatruc

    Inscrit depuis le :
    31 Janvier 2011
    Messages :
    14943
    "J'aime" reçus :
    925
    Sexe :
    Masculin
    Habite à:
    Belfort
    Utilise:
    Excel 2016 (PC)
    Code (Visual Basic):
       If IsNumeric(TE(L, 2)) Then TE(L, 2) = CDbl(TE(L, 2))
    IsNumeric indique si ça peut être converti en nombre, entre autre si c'en est déjà un, mais pas seulement.
     
  8. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Merci Dranreb pour ta réactivité.
    Merci le forum,
    Bonne soirée
    KIM
     
  9. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    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
     
  10. Dranreb

    Dranreb XLDnaute Barbatruc

    Inscrit depuis le :
    31 Janvier 2011
    Messages :
    14943
    "J'aime" reçus :
    925
    Sexe :
    Masculin
    Habite à:
    Belfort
    Utilise:
    Excel 2016 (PC)
    Bonjour.
    Non, ça ne marche qu'avec des tableaux.
    Mais devrait fonctionner:
    Code (Visual Basic):
    nC_OP = WorksheetFunction.Match("Operateur région", PlgSrc.Rows(1), 0)
     
  11. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Merci Dranreb,
    Je testerai
    Bonne journée
    KIM
     
  12. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    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
     
  13. Dranreb

    Dranreb XLDnaute Barbatruc

    Inscrit depuis le :
    31 Janvier 2011
    Messages :
    14943
    "J'aime" reçus :
    925
    Sexe :
    Masculin
    Habite à:
    Belfort
    Utilise:
    Excel 2016 (PC)
    Bonsoir.
    Personnellement je chargerait dans un TTit = PlgSrc.Rows(1).Value
    Alors ce serait For c = 1 To ColDep: TS(1, c) = TTit(1, Choose(c, nC_OP, nC_DPT, nC_LIBELLE, nC_ETAT)): Next c
     
  14. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Merci Dranreb,
    Je teste
    Bonne soirée
    KIM
     
  15. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    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 (Text):
    '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:

  16. Dranreb

    Dranreb XLDnaute Barbatruc

    Inscrit depuis le :
    31 Janvier 2011
    Messages :
    14943
    "J'aime" reçus :
    925
    Sexe :
    Masculin
    Habite à:
    Belfort
    Utilise:
    Excel 2016 (PC)
    Bonjour.
    Je doute que vous vouliez laisser dans la colonne 3 de chaque Dr le nombre d'éléments du dernier DS trouvé dedans, écrasant les précédents.
    Il me semblerait plus logique de les cumuler: TS(L, 3) = TS(L, 3) + DS.Count
    Du reste le total produit à la fin devient ainsi la somme des chiffres portés en colonne 3.
     
  17. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Merci Dranreb,
    voilà, résultat OK par contre est-ce que c'est normal que le cumul correct soit dans nBat V
    Code (Text):
    '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) = 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
    Bonne soirée
    KIM
     
  18. Dranreb

    Dranreb XLDnaute Barbatruc

    Inscrit depuis le :
    31 Janvier 2011
    Messages :
    14943
    "J'aime" reçus :
    925
    Sexe :
    Masculin
    Habite à:
    Belfort
    Utilise:
    Excel 2016 (PC)
    Oui puisqu'il était déjà cumulé, lui, chaque fois dedans.
     
  19. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Merci et bonne soirée
     
  20. KIM

    KIM XLDnaute Accro

    Inscrit depuis le :
    7 Avril 2005
    Messages :
    1255
    "J'aime" reçus :
    1
    Utilise:
    Excel 2010 (PC)
    Bonsoir Dranreb et le forum,

    Avec le code ci-dessous, j'identifie les doublons de la col DB par DS
    Comment je peux identifier les doublons selon les 5 premiers caractères de DB ?
    et aussi faire un comptage selon les mêmes conditions ?
    voir fichier ci-joint
    Merci encore
    KIM

    Code (Visual Basic):
    For Each DB In Gigogne(TE, 3, 2)
      For Each DS In DB.Co
      Ap1 = 1: For Each Détail In DS.Co
      TA(Détail(4), 1) = Ap1: Ap1 = 0: Next Détail, DS, DB
    Plage.Columns(4).Value = TA
    et le récap
    Code (Text):
    '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) = TS(L, 3) + DS.Count
           NBat = NBat + DS.Count
        Next DS, Dr

      L = L + 1
      TS(L, 2) = NSite
      TS(L, 3) = NBat
    TDonn2.[K3].Resize(10000, 3).Value = TS
         
    End Sub
     

    Pièces jointes:

Chargement...
Discussions similaires - Tableaux vba Forum Date
vba dupliquer certaines en-tête sur plusieurs tableaux sur une même feuille Forum Excel 18 Novembre 2018
Tableaux VBA Forum Excel 16 Août 2018
XL 2013 Graphique tableaux VBA Forum Excel 28 Juin 2017
Tableaux _ VBA Forum Excel 17 Mai 2017
XL 2016 Aide VBA pour concaténation de 3 tableaux Forum Excel 25 Août 2016

Partager cette page