Developpez.com

Le Club des Développeurs et IT Pro

Fonctions en VBA pour gérer les Tableaux Structurés d'Excel

Un tutoriel de Laurent Ott

Le 2022-02-14 20:07:09, par laurent_ott, Rédacteur
Bonjour.
J'ai le plaisir de vous présenter une nouvelle documentation :

Fonctions en VBA pour gérer les Tableaux Structurés d’Excel

Dans cet article vous allez découvrir des fonctions en VBA pour gérer les tableaux structurés d’Excel.
Ces fonctions couvrent l’essentiel des besoins du programmeur et lui simplifient la vie, car il n’est pas nécessaire de connaître les subtilités de l’objet « ListObject » pour les utiliser.

Vous pouvez déposer vos commentaires dans cette discussion.
Bonne lecture.
  Discussion forum
70 commentaires
  • laurent_ott
    Rédacteur
    Bonjour,
    Je viens de mettre à jour la documentation et y ajouter deux autres fonctions pour supprimer les doublons, et pour supprimer les lignes visibles (préalablement sélectionnées par un filtre).
    Bonne programmation.
  • Bill73
    Membre à l'essai
    Bonjour,

    merci Laurent, tout marche parfaitement.

    A deedolith, je ne vois pas pourquoi hors sujet. Comme je l'ai dit dans mon premier message, il y a une fonction pour importer un tableau, pourquoi pas une fonction pour exporter ce tableau !
  • deedolith
    Membre expérimenté
    Une fonction nommée TS_OuvrirClasseurInvisible, comme son nom l'indique, tente d'ouvrir un classeur.

    Sans regarder son implémentation, cela pose déjà question:
    Quel est le rapport direct avec la gestion des tableaux structurés ?
    En regardant l'implémentation, on s'aperçoit que cette dernière ne manipule aucun tableau, ce qui pose la même question une second fois.

    Utilisée en interne (donc private), cela à du sens, l'utilisateur final ne se soucie pas de l'implémentation (et il n'a pas à s'en soucier).
    Sur l'export / import de données, la bibliothèque va acquérir une ressource (ouvrir un fichier / connexion a une BDD ect ...), realiser l'import (ou export), libérer la ressource.
    C'est le comportement qu'on attend (gestion des ressources internes transparentes).

    Par contre, mettre a disposition les ressources internes à l'utilisateur final .., c'est la porte ouverte à toutes les bêtises possibles et imaginables (et viol du principe d'encapsulation).
    Et par expérience, lorsque l'on laisse une porte ouverte, les ennuis s'y engouffrerons tôt ou tard, ce n'est qu'une question de temps.

    On peut faire l'analogie avec ta maison que tu désires repeindre.
    Tu donnes accès aux ouvriers à l'extérieur de ta maison (tu leur fournit le service: "Accéder à l'extérieur".
    Maintenant imagine que tu leurs fournisse le service: "Accéder à l'intérieur".
    - S'il sont honnetes, pas de problème.
    - S'ils le sont moins .... surprises surprises.
  • Malick
    Community Manager
    Bonjour Laurent,

    Excellente contribution qui montre encore la puissance des tableaux structurés qui malheureusement ne sont pas systématiquement utilisés

    Je le mets dans ma liste des tutos de référence à l’instar de ceux rédigés par Pierre Fauconnier

    beaucoup
  • Bonsoir,

    Merci pour ce lien c'est intéressant.
  • Keuf95
    Membre régulier
    Bonjour et merci pour ce tuto sur le VBA et les tableaux.

    Juste un petit oubli il manque un "End Function" à la fin de la première Function : TS_ConvertirPlageEnTS
    Il faut bien qu'il reste quelque chose à faire pour nous faire réfléchir un simple copier/coller de code serait trop facile

    Mais lorsqu'il n'y a plus que ça à faire on devrait s'en sortir.
    Encore une fois merci pour le travail.

    Bonne continuation.
  • laurent_ott
    Rédacteur
    Bonjour,
    Merci pour cette remarque.
    Je viens de corriger cette coquille.

    Bonne programmation.
  • spookyz
    Membre habitué
    SUPER ! Super boulot, super pratique, super pédagogie, super merci.
  • AlainD49
    Candidat au Club
    Bonjour et félicitations pour votre travail.
    Je me permets de vous signaler un problème rencontré à l'utilisation
    En ce qui concerne la fonction d'importation des données, en méthode ajout modif, à ce niveau dans la procédure
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        ' Boucle sur les colonnes :
        For x = 1 To TD.ListObject.ListColumns.Count
            ' Récupère le nom de la colonne :
            NomColonne = TD.ListObject.HeaderRowRange(x).Value
            ' S'il faut ajouter une ligne :
            If Ajout = False Then
                Ajout = True
                TS.ListObject.ListRows.Add
                yy = 0
            End If
            ' Ajoute la donnée au tableau destination :
            Call TS_ModifCellule(TS, NomColonne, yy, TD.ListObject.DataBodyRange(y, x).Value, TS_Valeur)
        Next x
    il se trouve que si le tableau qui reçoit les données est vide (tableau structuré vide contenant une ligne vide), la variable Ajout = False et une nouvelle ligne est créée alors qu'elle existe déjà.
    Sinon sur le bouclage des données à importer, ne faudrait-il pas d'abord boucler sur les lignes puis sur les colonnes ?

    Pour ma part j'ai modifié en testant le nombre de lignes pour en ajouter une ou pas.
    Puis je boucle sur les colonnes de la table d'importation pour remplir la ligne qui reçoit les valeurs.

    Je ne sais pas si cela est correct (je ne suis pas du métier) mais cela fonctionne maintenant pour ma part.

    Cdt et encore merci pour vos travaux 👌👍👍👍👍👍
  • fvalera
    Candidat au Club
    Bonjour,

    Déjà superbe travail.

    Concernant la fonction copier une colonne, existe il la même fonction pour plusieurs colonnes ?
    Je souhaiterais copier plusieurs colonnes non contiguës d'un tableau A filtré d'un classeur A à la suite d'un tableau B d'un classeur B.
    Le nombre de lignes à copier est variable.

    Merci d'avance