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 : emplacement ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    interessé par informatique
    Inscrit en
    Novembre 2018
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : interessé par informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 42
    Par défaut Tableaux structurés : emplacement ?
    Bonjour,

    J'aurais souhaité votre avis pour savoir si il était plus judicieux de faire plusieurs tableaux de données dans une feuille ou si je devais séparé un tableau par feuille ?

    Je vous remet mon contexte :
    Aujourd'hui j'ai une feuille qui contient mes 12 colonnes avec en ligne 1, une entête. et je désigne le numero de colonne et il me retourne un variant/ range qui contient les données
    j'imaginais faire a peu pres semblable, mais avec un table type listobject mais qui ne contient que la colonne qui m'interesse....

    soit :
    un tableau de donnée = 1 colonne
    j'aurais besoin de 12 colonnes, chaque colonne aurait une longueur variable et non dépendante des autres

    Sachant que je n'ai pas d'utilité de faire un tableau de 12 colonnes x X lignes, car il n'y a pas de lien entre les colonnes donc extraire une ligne complète n'a pas de sens.... juste les données en colonne m'intéresse...

    Ou tout simplement rester dans ma configuration c'est à dire faire un traitement avec RANGE....

    Merci de vos avis

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Un tableau structuré est une table, proche de ce qu'on trouve dans une base de données.

    Si les colonnes sont indépendantes les unes des autres, il n'y a aucune raison à en faire un même tableau.
    Donc chaque colonne doit être un tableau à part entière avec seulement les lignes contenant des infos pour chacun.

    Pour éviter tout problème je conseille de les séparer par une colonne vide et non les accoler.
    Le choix de les mettre sur des onglets séparés est plus un problème de contexte.
    Je crée souvent des tables de référence d'une colonne et les stocke toutes ensemble dans un même onglet.

    Si ce sont des tables opérationnelles c'est la logique des processus qui doit guider.

    Si on manipule en VBA des tableaux, utiliser plutôt les objets ListObjects et leurs propriétés plutôt que des Range classiques

  3. #3
    Membre averti
    Homme Profil pro
    interessé par informatique
    Inscrit en
    Novembre 2018
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : interessé par informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 42
    Par défaut
    Bonjour,

    Bonne remarque de mettre une colonne vide en intercalaire, cela évite quand je manipule les données qu'il "fusionne" 2 colonnes de données indépendantes. Pour moi, c'est plus facile de n'avoir qu'un onglet notamment dans les mises à jour.

    Mais quand tu fait cela :
    chaque tableau a un nom propre
    Chaque colonne est nommée ou tu prends une valeur par défaut ?

    Pour retrouver une colonne tu dois connaitre le nom de la colonne & le nom du tableau ou juste un des deux est suffisant ?

    Je vais regarder les impacts sur le code

    Merci.

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Re

    Chaque tableau doit être nommé correctement : ne surtout pas conserver les noms automatiques mais les modifier.

    Les colonnes doivent avoir un titre signifiant également : on peut traiter une colonne par son index dans le tableau ListColumns(1) ou son titre ListColumns("Titre") en se référant au tableau soit directement soit dans un With
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("NomFeuile").ListObjects("NomTableau")

  5. #5
    Membre averti
    Homme Profil pro
    interessé par informatique
    Inscrit en
    Novembre 2018
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : interessé par informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 42
    Par défaut
    Bonjour,

    Oui mais c'est lourd....
    j'imaginais plus un truc comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function GetListObject(Nom As String, Nom_Feuille As String) As ListObject
     
    For Each Objet In ThisWorkbook.Worksheets(Nom_Feuille).ListObjects
        If Existe_Colonne(Objet, Nom) Then
            GetListObject = Objet
            Exit Function
        End If
    Next
     
    End Function
    Je met uniquement le nom de la colonne qui m'interresse et dans la procedure/function il y a la function ci dessus qui va chercher automatiquement le nom du tableau qui m'interesse...
    Du coup je ne gere que le nom de la colonne que je souhaite....

    Enfin c'est une idée.... peut-être y a-t-il des contraintes que je n'ai pas vu...

  6. #6
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 571
    Par défaut
    Bonjour

    Je rajouterai juste le fait de mettre chaque tableau (présents sur la même feuille) avec une couleur différente afin de bien faire la différence visuelle entre chacun d'eux.
    C'est tout bête, mais cela évite certaines confusions.

    Sinon, je suis d'accord avec ce qu'à écrit Chris.

    Bonne journée

    Pierre Dumas

  7. #7
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Voici ce que j'utilise de façon générique pour trouver un tableau structuré dans un classeur

    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
    Function getTable(Name As String, Optional wb As Workbook) As ListObject
      Dim shCounter As Long: shCounter = 1
      Dim loCounter As Long
     
      If wb Is Nothing Then Set wb = ActiveWorkbook
      Do While shCounter <= wb.Worksheets.Count And getTable Is Nothing
        loCounter = 1
        Do While loCounter <= wb.Worksheets(shCounter).ListObjects.Count And getTable Is Nothing
          If StrComp(Name, wb.Worksheets(shCounter).ListObjects(loCounter).Name, vbTextCompare) = 0 Then _
            Set getTable = wb.Worksheets(shCounter).ListObjects(loCounter)
          loCounter = loCounter + 1
        Loop
        shCounter = shCounter + 1
      Loop
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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