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 :

vba et tableau structué


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut vba et tableau structué
    Bonjour,

    Un tableau structuré est nommé Txl_TabStruct (c'est pour l'exemple hein...) avec trois colonnes ayant pour entête Nom, Prénom, Âge

    Y a t-il moyen de faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Ecrire_dans_le_Txl()
     
    dim n as integer
     
    n = 3
    with [Txl_TabStruct]
              .cells(n,[@Nom]) = "Tartagueu"
    end with
     
    n=5
    with [Txl_TabStruct]
            .cells(n,[@Prénom]) = "Alain"
    End sub
    Bref, aller à une cellule précise en nommant l'entête de la colonne.

    Merci.

    PLH81

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Exemple de l'écriture sur la ligne 3 de la colonne dont l'en-tête est "Client" du tableau de la feuille active (ici le tableau est seul)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim oList As ListObject
      Set oList = ActiveSheet.ListObjects(1)
      With oList
      .DataBodyRange.Cells(3, .ListColumns("Client").Index).Value = "Ma Petite Entreprise"
      End With
      Set oList = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut vba et tableau structuré
    Bonsoir Mr Tulliez,

    Alors ça, je vais le graver en rouge et noir.

    Question subsidiare :
    J'ai vu qu'il n'était pas nécessaire de déclarer le tableau structurée en ListObject
    Qu'en pensez-vous ?

    PLH81

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par PLH81 Voir le message
    J'ai vu qu'il n'était pas nécessaire de déclarer le tableau structurée en ListObject
    C'est pas qu'il n'est pas nécessaire de déclarer le tableau, c'est qu'on peut référencer le tableau structuré directement par son nom, c'est à dire qu'on peut remplacer
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Tableau = ThisWorkbook.Worksheets("Base").ListObjects("Base_donnees").Range
    With Tableau
    ...
    Par
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With [Base_donnees]
    ...

  5. #5
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut VBA et tableau structuré
    Bonjour Patrice,

    ok. De directement appeler par les [ ] simplifie le codage, mais ensuite, est ce qu'on peut faire exactement les mêmes choses, y a-t-il des restrictions ou des inconvénients à déclarer ainsi [ ] ?

    Cordialement

    PLH81

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    est ce qu'on peut faire exactement les mêmes choses, y a-t-il des restrictions ou des inconvénients à déclarer ainsi [ ] ?
    Aucune restriction. Lorsque l'on déclare une variable objet (Workbook, Worksheet, Range, ListObject, PivotTable, etc.), celle-ci hérite des méthodes et des propriétés de cet objet.

    [EDIT]
    Donc dans cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim oList As ListObject
    Set oList = shtDb.ListObjects(1)
    oList.Name = "MonTableau"
    L'instruction de la dernière ligne donne le même résultat que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shtDb.ListObjects(1).Name = "MonTableau"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut vba et tableau structuré
    ok.

    Par contre, ceci ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [MonTableau].name = "MonReTableau"
    C'est cela que je ne comprends pas.
    Est ce que [MonTableau] est considéré comme un listObject ? Parce que si oui, alors il devrait hériter des méthodes et propriétés de cet objet ?

    PLH81

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Est ce que [MonTableau] est considéré comme un listObject ? Parce que si oui, alors il devrait hériter des méthodes et propriétés de cet objet ?
    Pourquoi veux-tu utiliser les crochets, tu es fâché avec les variables objets ?
    Personnellement, je n'utilise jamais les références entre crochets

    En revanche tu peux utiliser Range("MonTableau")

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox Range("MonTableau").Cells(2, 1).Value
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut VBA et tableau structuré
    Pourquoi veux-tu utiliser les crochets...
    Bâh, parce que, en tant que grosse feignasse que je suis, je trouvais plus court, pardon, plus simple (et plus claire) d'écrire :

    que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shtDb.ListObjects(1).Name = "MonTableau"
    Je viens de découvrir, après quelques recherches, que je m'étais royalement planté sur la signification des [].
    Je croyais que c'était comme cela qu'on appelait un tableau structuré. Mais en fait, si j'ai bien compris, c'est une variable (quelle qu'elle soit) qui est appelée ainsi. Me trompe-je ?
    Et que cela n'est pas forcément utile, voire même conseillé. Me retrompe-je ?


    Donc, Mr Tulliez, si vous n'y voyez pas d'inconvénient, je vais suivre vos conseils.

    Merci.

    PLH81

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shtDb.ListObjects(1).Name = "MonTableau"
    J'utiliserais directement une variable typée ListObject comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim oList As ListObject
    Set oList = shtDb.ListObjects(1)
    oList.Name = "MonTableau"
    Quelques exemples d'utilisation de la variable objet oList typée comme ListObject
    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
    Sub Test_ObjectTable()
      Dim oList As ListObject
      Set oList = shtDb.ListObjects(1)
      oList.Range.Select          ' Sélection du tableau complet
      oList.HeaderRowRange.Select ' Sélection des en-têtes du tableau
      oList.DataBodyRange.Select  ' Sélection des données du tableau
      ' Afficher la deuxième colonne de la ligne titre
      MsgBox oList.HeaderRowRange.Cells(2).Value
      ' Ecrire dans la deuxième colonne de la ligne titre
      oList.HeaderRowRange.Cells(2).Value = "Libellé"
      ' Afficher la neuvième ligne de la colonne dont l'étiquette est "Libellé"
      With oList
        MsgBox .DataBodyRange.Cells(9, .ListColumns("Libellé").Index).Value
      End With
    End Sub
    Si tu dois travailler surtout sur la zone des données de la table structurée, tu pourrais utiliser une variable de type Range
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test_ObjectTable()
     Dim oList As ListObject
     Dim oRng As Range
     Dim ColumnNumber As Integer
     Set oList = shtDb.ListObjects(1)
     Set oRng = oList.DataBodyRange  '
     oRng.Select  ' Sélection des données du tableau
     ' Afficher la neuvième ligne de la colonne dont l'étiquette est "Libellé"
     ColumnNumber = oList.ListColumns("Libellé").Index
     MsgBox oRng.Cells(9, ColumnNumber).Value
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour

    N’aimant pas les noms à rallonge qui souvent n'ont de sens que pour celui qui les a crées, avec le Tableau nommé Tbo tu as propositions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Ecrire_dans_Tblo1()
        [Tbo[Nom]].Rows(3) = "Tartagueu"
        [Tbo[PréNom]].Rows(5) = "Alain"
    End Sub
    'avec la possibilté des changer les titres sans influence sur ces 2 macros
    Sub Ecrire_dans_Tblo2()
        [Tbo].Columns(1).Rows(3) = "Leconte"
        [Tbo].Columns(2).Rows(5) = "Adrien"
    End Sub
    Sub Ecrire_dans_Tblo3()
        [Tbo].Item(3, 1) = "Oups"
        [Tbo].Item(5, 2) = "Machin"
    End Sub
    Remarque : où qu’elles soient écrites, tu n’as pas besoin de citer la feuille de référence (celle contenant le tableau).

    Pour les [ ] je ne vais pas relancer un vieux débat !

    Edit :
    j'aurais pu te proposer aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Ecrire_dans_Tblo4()
        [Tbo].Cells(3, 1) = "Truc0"
        [Tbo].Cells(5, 2) = "chose0"
    End Sub
    mais 4 lettres de Item, cest plus court que 5 lettres de Cells

  12. #12
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut VBA et tableau structurée
    Bonjour,

    Merci pour toutes vos réponses. Vous m'avez bien éclairé sur le sujet. Je pense avoir suffisamment matière à creuser maintenant tout en étant dans la bonne direction.

    mais 4 lettres de Item, cest plus court que 5 lettres de Cells
    Certes, je suis feignasse, mais quand même...

    PLH81

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA Excel] Tableau avec données du userform et de formules
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2006, 13h29
  2. [VBA-E] tableau dynamique
    Par bricereyem dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/06/2006, 17h57
  3. [VBA - ACCESS] tableau en tant que prametre optionel
    Par jarod_bx dans le forum Access
    Réponses: 1
    Dernier message: 30/04/2006, 11h31
  4. [VBA-E] Tableau de données <=> Fichier Texte
    Par P50 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2005, 16h02
  5. [VBA-E] Tableau croisé dynammique et Init
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/11/2005, 12h34

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