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 :

ListBox.list et nommage tableau Excel 2007 [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut ListBox.list et nommage tableau Excel 2007
    bonsoir à tous,

    je souhaite remplir une zone de liste à deux colonnes en utilisant la propriété ".List" de la ZdL et le nom des colonnes format XL2007 ex : "TabAdresse[[CP]]" et "TabAdresse[[Ville]]"

    Cela fonctionne bien pour une colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TabArray = Range("TabAdresse[[CP]]")
    ZdL.List = TabArray
    Mais impossible de spécifier correctement la seconde colonne. La virgule entre les adresses dans "Range" ne fonctionne pas.

    Quelle est la synthaxe ?

    Merci.

    ESVBA

  2. #2
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Pas sûr de comprendre, mais si tu veux remplir une variable tableau avec une référence directe à un range, il va te créer un tableau à 2 dimensions automatiquement.

    Mais pour ce faire, il faut que tu lui fournisses un range "continu" et non pas une Union de range.

    Si tes colonnes sont accolées, tu lui donne direct les 2 extrémités, si elles ne sont pas accolées, tu ne pourra pas faire une assignation directe.

    A tester, le plus rapide peut être de créer 2 variables tableaux distinctes et de créer une variable tableau finale en réunissant les deux... ou de copier la feuille, de supprimer les colonnes non voulues et d'affecter une variable tableau avec le reste.

    Reste selon le contexte et la volonté d'optimisation de construire la variable tableau avec une boucle.

    vois ici si besoin : http://didier-gonard.developpez.com/...vba/#LVIII-B-2

    cordialement,

    Didier

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut Merci de la réponse Ormonth,
    que tu lui fournisses un range "continu" et [...]
    Si tes colonnes sont accolées, tu lui donne direct les 2 extrémités
    justement mon problème est la manière de lui écrire un range continu avec les appelations utilisées avec les références tableaux Excel 2007 (pas de problème d'ajout, pas de plage nommée supplémentaire, pas de référence, pas de gestion de cellules et d'emplacement, l'idéal).

    Je souhaitais une affectation directe sans passer par une boucle pour un code rapide, simple et propre (un peu à la Access).
    Puisqu'il y a des nouveautés dans Excel 2007...
    Nouveautés mais limitées à l'usage !

    Enfin s'il y a une solution...

    ESVBA

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    ne piste pour la lecture ici

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut Résolu à moitié
    Merci à toi Ormonth mais on reste dans la déclaration de plages nommées et ses inconvénients.

    Je ne comprends pas comment mettre deux colonnes (contigües) d'un tableau excel 2007 dans une ListBox à deux colonnes (placée sur une UserForm).

    C'est un problème d'affectation à la "ListBox".

    J'ai résolu le problème par le code ci-dessous mais j'espérais qu'il y ait un moyen sans boucle et simplement en déclarant seulement le tableau (entêtes fixes).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Cpte = 0
    For Each v in Range("TabVille").
         LstAJout.Additem
         LstAjout.List(Cpte, 0) = v.Offset(0,-1).Value
         LstAjout.List(Cpte, 1) = v.Value
         Cpte =Cpte +1
    Next v
    Si quelqu'un connait la solution... un message MP serait le bien venu.

    Ca ressemble à un manque dans Excel 2007 et +.


    ESVBA

  6. #6
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    je ne comprends pas

    ce que tu veux, c'est alimenter une listbox avec 2 colonnes contiguës

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    ListBox1.RowSource = "A2:B998"
    End Sub
    fonctionne sans souci normalement ?

    cordialement,

    Didier

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut bonsoir Ormonth et le forum
    oui exactement.

    Mais je veux me détacher des références type "A1:B200" en utilisant les références de tableau sous 2007.

    , je n'ai pas dit que c'était l'objet "ListObject" que je souhaitais utiliser. Plus de problème d'ajout de références, toutes les données sont nommées par le nom du tableau et de l'entête de la colonne automatiquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lst.RowSource = Range("Tab[Villes]")
    fonctionne mais je n'ai pas trouvé de solution pour mettre deux colonnes contiguës (ou non) du tableau dans deux colonnes de ma zone de liste.

    ESVBA

  8. #8
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Le souci est qu’il faut bien comprendre que dans ce que tu évoques, seul le nom du tableau « intelligent » (référence 2007) est un nom.
    Le reste (entre crochets) sont des références structurées et ne peuvent donc être invoquées comme des noms.

    Ca ressemble à un manque dans Excel 2007 et +.
    donc, si on analyse la chose, 2007 n'est pas en cause...

    Ensuite, comme toujours sous Office, il y a les ambiguïtés dues à sa puissance d’interprétation et aux possibilités d’instructions implicites dans le code.


    La Propriété RowSource doit-être, par ailleurs, un String.

    quand tu écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lst.RowSource = Range("Tab[Villes]")
    Je ne vois pas pourquoi ça fonctionne ?

    En conclusion avec pour exemple :
    « Tableau 1 » est un tableau 2007.
    Commune, Codepostaux, Departement, INSEE, Ville, Population ses en-têtes de colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RowSource = Range("Tableau1[[Commune]:[INSEE]]")
    (soit 4 colonnes) plantera, on lui passe en effet un objet Range alors que RowSource veut un String (une adresse).

    Si on fait ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
     
    ListBox1.RowSource = Range("Tableau1[[Commune]:[INSEE]]").Address
     
    End Sub
    Ça sera OK sans problème !

    cordialement,

    Didier

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut
    Bonsoir Ormonth et le forum,


    effectivement, j'écris n'importe quoi
    Mon code est bien sans le "RANGE"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lst.RowSource = "Tab[Villes]")
    puisqu'il faut une chaine .


    la syntaxe cherchée est le ":" entre les noms des colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RowSource = Range("Tableau1[[Commune]:[INSEE]]").Address
    Jamais vu avant.


    J'ai simplifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RowSource = "Tableau1[[Commune]:[INSEE]]"
    qui fonctionne très bien aussi.


    Merci Ormonth.


    ESVBA

  10. #10
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Citation Envoyé par ESVBA
    J'ai simplifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RowSource = "Tableau1[[Commune]:[INSEE]]"
    qui fonctionne très bien aussi.
    Mieux, c'est la bonne syntaxe !

    En effet l'autre n'est pas une syntaxe plus explicite, mais lourde, elle n'a d'avantage que de bien décrire ce qu'on veut faire comprendre.
    Pour preuve, tu peux mettre direct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau1[[Commune]:[INSEE]]
    dans la case RowSource de la fenêtre propriété du listbox de l'éditeur, c'est OK.

    Quand aux ":" , on les rencontre couramment dans les notations de plages genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C5:D9,G9:H16,B14:D18").ClearContents
    cordialement,

    Didier

  11. #11
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut Allez, à tout hazard...
    et lorsque les champs ne sont pas contigüs ?

    Pas le point-virgule.

    Exemple qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Union(Range("Tableau1[[Nom]]"), Range("Tableau1[[Ville]]")).Clear

    Ou puis-je trouver des informations VBA/Tableau Excel 2007 ?
    Le tutoriel des tableaux 2007 de SilkyRoad ne parle pas du VBA.

    ESVBA

  12. #12
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Rien n'a fondamentalement changé, par contre la syntaxe est toujours exigeante et il faut la décrypter pour bien l'employer.

    Dans l'aide vba 2007 vois à Areas, collection et "faire référence à plusieurs plages" (idem à 2003).

    par contre la notion de plages, d'adresses ou de noms change l'approche.

    vois ici si besoin :

    Utilisation de références structurées avec des tableaux Excel

    Ce n'est pas du vba, mais il suffit de faire le parallèle avec ce que tu connais et les aides citées ci-dessus pour en déduire l'approche syntaxique correcte.

    Sachant qu'au niveau VBA, sauf application bi-partite (feuille-vba), l'utilisation des tableaux intelligents n'est peut-être pas le plus simple ?

    cordialement,

    Didier

  13. #13
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut
    bonjour Ormonth et le forum,


    cette fois, j'ai tout en main. A moi, de grandir.


    Rq: je n'ai pas le déclic du site http://office.microsoft.com/fr-fr/excel-help/

    Merci encore.


    Cette fois, c'est clos définitivemennt pour moi.
    ESVBA

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

Discussions similaires

  1. [XL-2010] Ouvrir autant d'onglet firefox que d'URL listé dans un tableau excel
    Par tepuy dans le forum Macros et VBA Excel
    Réponses: 26
    Dernier message: 10/04/2015, 18h04
  2. Réponses: 7
    Dernier message: 01/06/2013, 06h50
  3. [WD-2003] RowSource de listbox avec contenu de tableau Excel
    Par maxxgraph dans le forum VBA Word
    Réponses: 3
    Dernier message: 27/01/2011, 13h21
  4. [XL-2007] autofilter de tableau excel 2007
    Par siuol dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/07/2010, 18h05
  5. gestion des droits sur un tableau excel 2007
    Par kev0631 dans le forum Excel
    Réponses: 1
    Dernier message: 20/04/2007, 08h54

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