IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tableaux structurés


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Points : 145
    Points
    145
    Par défaut Tableaux structurés
    Bonjour,

    Petite question concernant les tableaux structurés (et objet ListObject) : est-il possible d'avoir un tableau de tableaux ?
    Je m'explique : j'ai déjà eu à stocker et manipuler l'ensemble d'un classeur (8 feuilles contenant la même structure de tableau) dans une variable de type table (Array) à 3 dimensions, la troisième dimension étant le numéro ou indice de la feuille (Worksheets(i)).
    Peut-on faire la même chose avec l'objet ListObject ?

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je ne comprends pas bien ta question. A priori, tu pourrais remplacer le numéro de la feuille par le nom du tableau, par exemple.

    Tu aurais un exemple avec deux ou trois feuilles de 5 ou 6 lignes et nous montrer l'array que tu as généré?

  3. #3
    Membre habitué
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Points : 145
    Points
    145
    Par défaut Tableaux structurés
    Voilà un petit code qui somme les tableaux (nombre de lignes et colonnes identiques) de n feuilles et stocke la somme dans un tableau (Array à 3 dimesnions).
    Une feuille "Somme" est créée et le tableau 3d est affiché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Sub somme_donnees_table3D()
     
        Dim i As Long, j As Long, k As Long
        Dim derniere_ligne As Long, derniere_colonne As Long
        Dim nb_feuilles As Integer
        Dim ma_table()
     
        nb_feuilles = Worksheets.Count
     
        Worksheets(1).Select
     
        derniere_ligne = Range("A1").End(xlDown).Row
        derniere_colonne = Range("A1").End(xlToRight).Column
     
        ReDim ma_table(derniere_ligne, derniere_colonne, nb_feuilles + 1)
     
        For k = 1 To nb_feuilles
     
            Worksheets(k).Select
     
            For i = 0 To derniere_ligne - 1
                For j = 0 To derniere_colonne - 1
                    ma_table(i, j, nb_feuilles + 1) = ma_table(i, j, nb_feuilles + 1) + ActiveSheet.Cells(i + 1, j + 1)
                Next j
            Next i
        Next k
     
        Worksheets.Add After:=ActiveSheet
        ActiveSheet.Name = "Somme"
     
        For i = 0 To derniere_ligne - 1
            For j = 0 To derniere_colonne - 1
                ActiveSheet.Cells(i + 1, j + 1) = ma_table(i, j, nb_feuilles + 1)
            Next j
        Next i
     
    End Sub
    Généralement, stocker un tableau dans un Array permet d'avoir toutes les données en mémoire : ça permet d'éviter les va et vient entre le programme et la feuille de calcul. C'est le même raisonnement pour les tables structurées.

  4. #4
    Membre habitué
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Points : 145
    Points
    145
    Par défaut Tableaux structurés
    C'est bon, j'ai trouvé comment faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim ma_Table As ListObject
    Dim mon_Array As Variant
     
    Set ma_Table = ActiveSheet.ListObjects("Table1")
    mon_Array = ma_Table.DataBodyRange
    .....
    etc.
    C'est un bon raccourci.

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    En fait, sans tableaux, tu peux consolider tes feuilles avec des formules 3D, sans boucles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Conso()
      Dim FirstName As String
      Dim LastName As String
      Dim Formula As String
      Dim shConso As Worksheet
      Dim RangeAddress As String
      Dim LastRow As Long
      Dim LastColumn As Long
     
      LastRow = Worksheets(1).Range("a1").End(xlDown).Row
      LastColumn = Worksheets(1).Range("a1").End(xlToRight).Column
      FirstName = Worksheets(1).Name
      LastName = Worksheets(Worksheets.Count).Name
      Formula = "=sum(" & FirstName & ":" & LastName & "!a1)"
      RangeAddress = "$a$1:" & Cells(LastRow, LastColumn).Address
      Set shConso = Worksheets.Add(after:=Worksheets(Worksheets.Count))
      shConso.Range(RangeAddress).Formula = Formula
    End Sub
    Avec des tableaux structurés, tu as deux solutions:

    soit tu es certain que tes tableaux sont placés de manière identique sur chaque feuille, et tu utilises la technique ci-dessus en adaptant simplement avec les databodyrange

    soit tu n'est pas certain que les tableaux "s'empilent en 3D", tu peux alors utiliser le code suivant, en stockant les databodyrange dans une des dimensions du tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Conso()
      Dim FirstName As String
      Dim LastName As String
      Dim Formula As String
      Dim shConso As Worksheet
      Dim RangeAddress As String
      Dim LastRow As Long
      Dim LastColumn As Long
     
      LastRow = Worksheets(1).Range("a1").End(xlDown).Row
      LastColumn = Worksheets(1).Range("a1").End(xlToRight).Column
      FirstName = Worksheets(1).Name
      LastName = Worksheets(Worksheets.Count).Name
      Formula = "=sum(" & FirstName & ":" & LastName & "!a1)"
      RangeAddress = "$a$1:" & Cells(LastRow, LastColumn).Address
      Set shConso = Worksheets.Add(after:=Worksheets(Worksheets.Count))
      shConso.Range(RangeAddress).Formula = Formula
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Points : 145
    Points
    145
    Par défaut Tableaux structurés
    Voici un exemple plus parlant de l'utilisation de tables à 3 dimensions.
    Les n premières feuilles sont stockées dans un Array et sont ensuite réaffichés sur n nouvelles feuilles (un copier-coller).
    Les tableaux sur les onglets sont supposés avoir le même nombre de lignes et colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Sub recup_donnees_ma_tableau3D_sur_n_feuilles()
     
        Dim i As Long, j As Long, k As Long
        Dim derniere_ligne As Long
        Dim derniere_colonne As Long
        Dim nb_feuilles As Integer
        Dim ma_table()
     
        nb_feuilles = Worksheets.Count
     
        Worksheets("Feuil1").Select
     
        derniere_ligne = Range("A1").End(xlDown).Row
        derniere_colonne = Range("A1").End(xlToRight).Column
     
        ReDim ma_table(derniere_ligne, derniere_colonne, nb_feuilles)
     
        For k = 1 To nb_feuilles
     
            Worksheets(k).Select
     
            For i = 0 To derniere_ligne - 1
                For j = 0 To derniere_colonne - 1
                    ma_table(i, j, k) = ActiveSheet.Cells(i + 1, j + 1)
                Next j
            Next i
        Next k
     
        For k = 1 To nb_feuilles
     
            Worksheets.Add After:=ActiveSheet
     
            For i = 0 To derniere_ligne - 1
                For j = 0 To derniere_colonne - 1
                    ActiveSheet.Cells(i + 1, j + 1) = ma_table(i, j, k)
                Next j
            Next i
        Next k
     
    End Sub

  7. #7
    Membre habitué
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Points : 145
    Points
    145
    Par défaut Tableaux structurés
    Ok. Merci pour ta réponse.

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Et en quoi est-ce plus rapide que des copier-coller?

  9. #9
    Membre habitué
    Homme Profil pro
    Fortune teller
    Inscrit en
    Octobre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Fortune teller

    Informations forums :
    Inscription : Octobre 2007
    Messages : 110
    Points : 145
    Points
    145
    Par défaut Tableaux structurés
    Le but est pas de faire un copier-coller : le but est juste de montrer qu'on peut stocker n tableaux de n onglets dans un seul Array.
    Il est même possible avec un Array à 4 dimensions de stocker n tableaux de n onglets de x classeurs ouverts.

Discussions similaires

  1. déclaration des tableaux structurés
    Par sarafou7 dans le forum C
    Réponses: 1
    Dernier message: 29/01/2011, 09h43
  2. explication sur tableaux structuré
    Par frost80500 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 18/01/2008, 19h02
  3. [Tableaux] Structure PHP pour variable complexe
    Par winnie82 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 13h53
  4. [Tableaux] structure des liens de mon site
    Par difficiledetrouver1pseudo dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2006, 16h28
  5. [Tableaux] structure C/C++
    Par pittacos dans le forum Langage
    Réponses: 4
    Dernier message: 21/12/2005, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo