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 :

Créer une liste dynamique [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 386
    Par défaut Créer une liste dynamique
    Bonjour

    J'ai trouvé un exemple sur un forum qui permet de créer une liste dynamiquement sur une feuille.
    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
     
    Private Sub CreateList()
    Dim mylist
     
    ' AddFormControl(Type, lngLeft, lngTop, lngWidth, lngHeight)
        Set mylist = ActiveSheet.Shapes.AddFormControl(xlDropDown, 1, 1, 200, 12)
        mylist.Name = "MyList"
        mylist.ControlFormat.AddItem ("John")
        mylist.ControlFormat.AddItem ("Paul")
        mylist.ControlFormat.AddItem ("Ringo")
     
        mylist.OnAction = "ShowPhones"
    End Sub
     
    Sub ShowPhones() 
    Debug.Print ActiveSheet.Shapes("mylist").OLEFormat.Object.Value
    End Sub
    Ma question est de savoir comment obtenir le nom que j'ai sélectionné.
    Par contre j'ai bien la position dans cette liste.

    Merci d'avance si vous pouvez me renseigner.

  2. #2
    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.

    Pourquoi créer cela par VBA? Que cherches-tu à réaliser?

    Ton code ajoute une liste déroulante de formulaire. Cette liste renvoie dans une cellule la position dans la liste de la valeur sélectionnée et s'appuie normalement sur une plage de cellules, et mieux encore, depuis XL2007, sur un tableau structuré.

    Il faut donc une formule INDEX pour aller rechercher dans la liste la valeur qui se trouve à la position renvoyée par le contrôle.

    Nom : 2020-11-11_145048.png
Affichages : 129
Taille : 89,9 Ko

    Nom : 2020-11-11_145118.png
Affichages : 139
Taille : 1,3 Ko

    Nom : 2020-11-11_145132.png
Affichages : 115
Taille : 6,9 Ko
    "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...
    ---------------

  3. #3
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 386
    Par défaut
    En fait, je veux créer une liste temporaire à partir d'une sélection dans une feuille (valeurs non contigües).
    Après avoir choisi la valeur, je supprime cette liste.
    Sinon j'utilise déjà un Listbox dans ma feuille de façon permanente comme tu indiques.

  4. #4
    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
    Je n'aime décidément pas ces contrôles de formulaire (=> donc je ne les connais pas très bien, et je ne vois pas comment en récupérer les lignes, mais il y a sûrement moyen)... Ton truc pue l'usine à gaz (coder des données en dur, créer un contrôle à la volée pour le supprimer ensuite, ...)

    Puisque tu connais les données que tu mets "en dur" dans ton code (à ne jamais faire, je pense que tu pourrais les placer dans une plage d'une feuille éventuellement masquée et récupérer la valeur en VBA avec EVALUATE("INDEX...")

    Toujours sur base d'un tableau structuré, nommé ici t_Contacts

    Nom : 2020-11-11_153552.png
Affichages : 119
Taille : 11,5 Ko

    Tu pourrais utiliser le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CreateList()
    Dim mylist
     
    ' AddFormControl(Type, lngLeft, lngTop, lngWidth, lngHeight)
        Set mylist = ActiveSheet.Shapes.AddFormControl(xlDropDown, 1, 1, 200, 12)
        mylist.Name = "MyList"
        mylist.ControlFormat.List = Range("t_Contacts").Value
        mylist.OnAction = "ShowPhones"
    End Sub
     
    Sub ShowPhones()
    Debug.Print Range("t_Contacts")(ActiveSheet.Shapes("mylist").OLEFormat.Object.Value)
    End Sub

    Si vraiment tu tiens à faire tout par code, tu pourrais utiliser une variable du module (tu as créé la fonction Sub CreateList en private donc je suppose qu'elle est dans le module d'une feuille) qui serait un array (un tableau en VBA) et qui permettrait à la macro ShowPhones de récupérer la valeur de l'array en fonction de la position récupérée dans le contrôle.

    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
    Option Explicit
     
    Dim Values
     
    Sub CreateList()
    Dim mylist
     
      Values = VBA.Array("John", "Paul", "Ringo")
    ' AddFormControl(Type, lngLeft, lngTop, lngWidth, lngHeight)
        Set mylist = ActiveSheet.Shapes.AddFormControl(xlDropDown, 1, 1, 200, 12)
        mylist.Name = "MyList"
        mylist.ControlFormat.List = Values
        mylist.OnAction = "ShowPhones"
    End Sub
     
    Sub ShowPhones()
    Debug.Print Values(ActiveSheet.Shapes("mylist").OLEFormat.Object.Value - 1)
    End Sub
    "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...
    ---------------

  5. #5
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 386
    Par défaut
    Effectivement je suis sur un module, mais pas de la feuille.
    Je t'explique le but de ce que je veux faire : c'est une gestion de mes vidéos.
    Je propose un choix d'acteurs à partir d' une partie du nom ou prénom.
    Il s'agit depuis cette sélection que je choisis l'acteur que je vais affecter au film.
    Après quoi la liste ne me sert plus et je ne veux pas encombrer ma feuille qui est déjà bien remplie.
    (je ne me sert pas de "Userform")

  6. #6
    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
    Ta feuille est bien remplie, mais dispose tout de même de plus de 17 milliards de cellules

    Plus sérieusement, ton code ne correspond pas à ce que tu expliques. C'est toujours plus rapide et rentable d'expliquer le problème "réel" auquel tu es confronté, plutôt que de mettre des noms en dur alors qu'ils proviennent probablement d'une sélection. Sans être précis dans ce que tu mets en place et en voulant "simplifier" le code que tu donnes, tu nous empêche de t'aider de façon pertinente.

    D'où proviennent les noms qui vont alimenter ta liste? A mon avis, la piste de l'array pourrait être exploitée, même si je n'aime pas du tout ce genre de variables publiques. Mais sans en savoir plus sur la conception de ton classeur, je ne sais t'aider mieux.
    "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...
    ---------------

  7. #7
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 386
    Par défaut
    Bon et bien je vais procéder autrement :
    1) stocker la sélection d'acteurs dans un tableau
    2) puis récupérer mon choix à partir de la position dans la liste que je récupère comme indiqué dans "ShowPhones".

    Merci quand même pour ton intervention.

    NB quand je parlais de feuille bien remplie, c'est plutôt l'écran.

  8. #8
    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
    Citation Envoyé par papyxy Voir le message
    [...]
    NB quand je parlais de feuille bien remplie, c'est plutôt l'écran.
    Oui, je m'en doutais... c'est pour cela que je te parlais de placer les valeurs dans une autre feuille.
    "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...
    ---------------

  9. #9
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 386
    Par défaut
    Finalement je suis ton idée de créer une "Listbox" et de la rendre visible ou non selon le cas.

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

Discussions similaires

  1. [XL-2010] Créer une liste dynamique suivant plusieurs conditions
    Par Stevecpaswb dans le forum Excel
    Réponses: 5
    Dernier message: 06/12/2017, 16h39
  2. Comment créer une liste dynamique en PHP ?
    Par geeka dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2015, 15h45
  3. créer une liste dynamique
    Par ferhat.adel dans le forum Langage
    Réponses: 7
    Dernier message: 28/04/2011, 09h39
  4. Créer une liste déroulante dynamique
    Par Meloooo dans le forum jQuery
    Réponses: 9
    Dernier message: 15/12/2010, 17h02
  5. Réponses: 2
    Dernier message: 13/10/2008, 16h07

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