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 :

Combobox avec noms de variables et Textbox avec la valeur de la variable choisie [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de zyperman
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2017
    Messages : 9
    Par défaut Combobox avec noms de variables et Textbox avec la valeur de la variable choisie
    Bonjour à tous,

    Voilà je souhaite charger un combobox avec des noms de variables pour que suivant le choix de l'utilisateur, un textbox affiche la valeur de cette variable.

    Mon code (exemple simplifié):

    Code VBA : 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
    19
    20
    Sub UserForm_Initialize()
    
    Dim Variable1 As String
    Dim Variable2 As String
    Dim Variable3 As String
    Variable1 = "Texte à afficher n°1"
    Variable2 = "Texte à afficher n°2"
    Variable3 = "Texte à afficher n°3"
    
        With ComboBox1
        .AddItem "Variable1"
        .AddItem "Variable2"
        .AddItem "Variable3"
        End With
    
    End Sub
    
    Sub ComboBox1_Change()
    TextBox1.Value = ComboBox1.Value
    End Sub

    Bien évidemment c'est la ligne 19 en bleu qui doit être remplacée afin que ma textbox n'affiche pas "Variable1" mais "Texte à afficher n°1" (pour le choix 1)
    Après plusieurs tentatives je sèche toujours

    Merci pour votre aide !

  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.

    Les variables ne doivent pas être encadrées par des guillemets, sinon, VBA considère que tu as passé du texte
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With ComboBox1
        .AddItem Variable1
        .AddItem Variable2
        .AddItem Variable3
        End With
    "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 habitué Avatar de zyperman
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2017
    Messages : 9
    Par défaut
    Merci Pierre, mais si j'enlève les guillemets je vais avoir la valeur de la variable qui va apparaitre dans mon menu déroulant.
    Or dans ma liste déroulante du Combobox, je souhaite pouvoir choisir entre Variable1, Variable2, Variable3 ...
    et que dans mon Textbox s'affiche soit Texte à afficher n°1, Texte à afficher n°2, Texte à afficher n°3 ...

    Avec le code actuel, ce qui s'affiche dans le Combobox est bien ce que je souhaite, c'est dans la Textbox que ça merdouille

    J'espère être plus clair.

  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
    Tu dois configurer ton combobox avec 2 colonnes comme suit
    Nom : 2019-09-05_214911.png
Affichages : 2428
Taille : 31,7 Ko

    La première colonne (masquée) contient les valeurs à exploiter (à transférer dans le textbox), la seconde colonne contient la valeur à afficher dans le combo. Note que les index commencent à 0. Il serait également profitable de travailler avec un tableau si tu as un nombre plus important de lignes/colonnes à envoyer au combo

    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
    Private Sub ComboBox1_Change()
      TextBox1.Value = ComboBox1.Value
    End Sub
     
    Private Sub UserForm_Initialize()
     
      With ComboBox1
        .AddItem "Texte 1"
        .List(0, 1) = "Var 1"
        .AddItem "Texte 2"
        .List(1, 1) = "Var 2"
        .AddItem "Texte 3"
        .List(2, 1) = "Var 3"
      End With
    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 habitué Avatar de zyperman
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2017
    Messages : 9
    Par défaut
    Super !!!
    C'est exactement ça. Effectivement je risque d'avoir de très nombreuses valeurs. Il va donc falloir que je me penche sur la solution du tableau que tu me proposes car je ne sais pas du tout comment cela fonctionne.

  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
    Si tu as plus de données, je te conseille de passer par une table de données (tableau structuré) (=> mon tuto si tu ne vois pas ce que c'est). Tu pourras alors alimenter ton combobox en une ligne de code, quel que soit le nombre de lignes/colonnes à y placer. En utilisant la table de données comme source du combo, il n'y a plus de hard coding (=> données saisies directement dans le code) et les modifications dans la table (ajout, suppression, modification de libellés) seront prises en compte dans le combo sans qu'il soit nécessaire de modifier du code.

    Nom : 2019-09-06_070833.png
Affichages : 2121
Taille : 7,8 Ko

    Je te conseille aussi de déporter l'initialisation de ton userform dans une procédure externe. Ce n'est pas plus compliqué et cela rend ton architecture de code évolutive. Dès lors, sur base de notre exemple, tu auras simplement dans le userform la procédure événementielle du combobox. La procédure Initialize peut être supprimée.

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox1_Change()
      TextBox1.Value = ComboBox1.Value
    End Sub

    Tu ouvres alors ton userform grâce à la procédure suivante, qui se charge d'alimenter ton combo sur base de la table de données.

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub LoadUsf()
      With UserForm1
        .ComboBox1.List = Range("t_datas").Value
        .Show
      End With
    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...
    ---------------

  7. #7
    Membre habitué Avatar de zyperman
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2017
    Messages : 9
    Par défaut
    Merci pour les conseils. Le problème c'est que je n'ai pas de fichier excel d'ouvert et je ne souhaite pas en ouvrir un. Je lance mon userform depuis outlook et je crée une instance excel afin d'utiliser notamment une filedialog. Donc pour le tableau il faudrait que je le crée directement en tant que variable.

  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
    Je te propose deux solutions, parmi d'autres.

    1. Créer ton tableau puis le passer à combobox1.list. Dans ce cas, le code du formulaire ne change pas et tu as toujours 2 colonnes à ton combobox. Ca peut vite devenir lourd si tu ne sais pas boucler pour l'alimentation du tableau.

    Code du userform:
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
     
     
    Private Sub ComboBox1_Change()
      TextBox1.Value = ComboBox1.Value
    End Sub

    Code d'amorçage
    Code vba : 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()
      Dim t(0 To 2, 1)
     
      t(0, 0) = "Texte1"
      t(0, 1) = "Var1"
      t(1, 0) = "Texte2"
      t(1, 1) = "Var2"
      t(2, 0) = "Texte3"
      t(2, 1) = "Var3"
     
      With UserForm1
        .ComboBox1.List = t
        .Show
      End With
    End Sub



    2. Créer deux tableaux, un que tu passes à combobox1.list, le second que tu affectes à une propriété publique du userform pour l'utiliser lors du Change du combo. Dans ce cas, ton combobox ne doit contenir qu'une colonne.

    Voici le code du userform, dans lequel tu vois la déclaration du tableau de valeurs et son utilisation par le combobox. Le ListIndex et le vba.array commençant tous les deux à 0, on peut facilement synchroniser le tableau des valeurs sur base du listindex du combobox

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public Valeurs
     
    Private Sub ComboBox1_Change()
      TextBox1.Value = Valeurs(ComboBox1.ListIndex)
    End Sub

    Le code d'amorçage du userform dans un module public, qui illustre comment on charge le combo avec le tableau t et comment on passe le tableau u à la propriété publique Valeurs du userform
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
      Dim t, u
     
      t = VBA.Array("Var1", "Var2", "Var3")
      u = VBA.Array("Texte1", "Text2", "Texte3")
      With UserForm1
        .ComboBox1.List = t
        .Valeurs = u
        .Show
      End With
    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...
    ---------------

  9. #9
    Membre habitué Avatar de zyperman
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2017
    Messages : 9
    Par défaut
    Merci Pierre.
    Aujourd'hui j'ai mis en application la méthode donnée au début avec 2 colonnes dans le combobox. Et effectivement je me retrouve avec beaucoup de lignes de code mais ça fonctionne parfaitement, j'ai même intégré une 3ème colonne et j'arrive à récupérer tout ce que je veux.
    Pour réduire mon code je vais tenter la dernière méthode avec 2 tableaux (3 dans mon cas) avec le VBA.Array. Cette méthode plus souple me permettra d'insérer de nouvelles valeurs au fur et à mesure du besoin dans l'ordre voulu. Car avec la méthode du .List si je veux rajouter une valeur au milieu de mon choix dans le combobox, je suis bon pour modifier tous les index de lignes des valeurs suivantes.
    Encore merci pour toutes ces explications très claires 👍👍

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

Discussions similaires

  1. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  2. charger combobox avec 2 valeurs
    Par andrybrice dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/02/2014, 12h50
  3. [XL-2007] Charger une ComboBox avec des valeurs dépendants d'OptionBox
    Par brunounours dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/05/2012, 14h55
  4. [XL-2003] Trier combobox avec des valeurs numériques sans doublon
    Par goldfinger13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/02/2012, 20h31
  5. [AC-2007] Sélectionner un item d'une combobox avec une valeur?
    Par Vhalar dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/09/2011, 22h07

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