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 :

Remplir une ComboBox à partir d'un Label et d'une TextBox


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
    dessinateur
    Inscrit en
    Février 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : dessinateur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 27
    Par défaut Remplir une ComboBox à partir d'un Label et d'une TextBox
    Bonjour le Forum,
    Je voudrais savoir s’il est possible d’alimenter une Combobox à partir de valeurs récupérées d'un Label et d'une TextBox
    J’arrive à remplir ma ComboBox à partir de la TextBox mais il me manque la condition du Label.
    Merci pour votre aide
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub UserForm_Initialize()
    'UserForm2.
    Label1.Caption = Worksheets("Formulaire").Range("G6").Value     'Valeur du Fourni
     
    TextBox1.Value = Worksheets("Formulaire").Range("N19").Value    'Valeur du CodePiece
     
    End Sub
     
    Private Sub TextBox1_Change()
    ''Changement de la valeur TextBox alimente la ComoBox
     
    ComboBox1.Clear 'Vider la combobox
     
    Dim CodePiece As String  'Variable de type Texte
     
    CodePiece = TextBox1.Value 'Declare la variable qui represente la valeur rentree dans la TextBox
     
    Dim DernLigne As Long 'Chercher la derniere cellule non vide de la colonne B
    DernLigne = Sheets("Base").Range("B" & Rows.Count).End(xlUp).Row
     
    For i = 2 To DernLigne 'pour les ligne 2 jusqu'a la derniere non vide
        'si la cellule en B = CodePiece
        If CodePiece = Sheets("Base").Range("B" & i) Then
            'alors on remplit la combobox avec la cellule de la colonne I
            ComboBox1.AddItem (Sheets("Base").Range("I" & i))
        End If
    Next i
     
    End Sub
     
     
    Private Sub ComboBox1_Change()
    ''Changement de valeur de la ComboBox copie la valeur 2 cellules a gauche de la cellule active
     
    ActiveCell.Offset(0, -2).Activate   'Deplacer de 2 cellules a gauche de la cellule active
     
    ActiveCell = Me.ComboBox1.Value     'Mettre la valeur de la ComboBox
     
     
    End Sub

  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.

    Il est rarement utile de sélectionner les cellules pour les traiter en VBA.
    • Alimenter une Combobox par boucle sur les lignes d'une plage est un processus très lent.
    • Délimiter la plage de travail avec des .End(xlUp) est une technique obsolète depuis que les tableaux structurés existent (XL 2007)
    • Il faut mieux définir ta demande pour que l'on puisse t'aider valablement (le code que tu donnes n'est pas suffisamment explicite par rapport à ce que tu souhaites réaliser). Il faudrait expliquer en français (sans jargon Excel et vba) ce que tu souhaites réaliser, comme si tu remplissais un cachier des charges.


    Les références structurées permettent de ne pas devoir borner ta plage, et tu peux remplir un combobox d'un coup en lui passant une plage de cellules. (EDIT: Corrigé après remarque de Pijaku)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.List = Range("MonTableau[MaColonne]").Value

    Dans cette discussion, j'illustre avec un fichier d'exemple la manière de remplir une combobox, et dans cette contribution, je détaille une approche générique des interactions entre userform et table de données dont tu pourrais t'inspirer pour la réalisation de ton application.
    "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 Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Salut Pierre,

    Sans oublier le .Value

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.List = Range("MonTableau[MaColonne]").Value

  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
    Frank.

    Merci pour la correction
    "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 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 À toute fin utile …
    Bonjour …

    Iil y a toujours un début à tout, non ?
    Quand il est prévu d’étendre la liste le premier Item (dans le formulaire) :
    Nom : List.jpg
Affichages : 1683
Taille : 56,0 Ko
    Si on préfère ne pas avoir d’erreurs plutôt qu’avoir à les gérer …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
        If Range("MonTableau").Rows.Count > 1 Then
            ComBobox1.List = Range("MonTableau[Nom]").Value
        Else
            ComBobox1 = Range("MonTableau")(1, 1).Value
        End If
    End Sub

  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
    @ ordonc,

    C'est exact, on ne répond pas toujours complètement à la question initiale posée en envisageant tous les cas de figure, sinon on aurait un roman à chaque réponse donnée sur le forum...

    Surtout que dans mes classeurs, j'ai toujours mon module xlTools qui contient la fonction générique suivante, m'évitant de répéter ou d'oublier le test pour chaque combobox ou listbox chargé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function getArrayFromRange(Item As Range)
      If Item.Cells.Count = 1 Then
        Dim t(1, 1)
        t(1, 1) = Item.Value
        getArrayFromRange = t
      Else
        getArrayFromRange = Item.Value
      End If
    End Function
    Et je l'utilise systématiquement lorsque je dois charger des combobox ou des listbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
      With UserForm1
        .ComboBox1.List = xlTools.getArrayFromRange(Range("tableau1[Prénom]"))
        .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 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
    re

    Citation Envoyé par Pierre Fauconnier Voir le message
    C'est exact, on ne répond pas toujours complètement à la question initiale posée en envisageant tous les cas de figure
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Je suis peut-être plus fainéant que toi ? Tu as dû t'en apercevoir avec mes codes condensés.

    Cela dit, mon intervention n’était due qu’au fait que j’avais déjà présenté ce problème de .List, sans effet à ce jour.

  8. #8
    Membre averti
    Homme Profil pro
    dessinateur
    Inscrit en
    Février 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : dessinateur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 27
    Par défaut
    Bonjour à tous merci pour l’aide
    Voila ce que je voudrais améliorer sur mon classeur formulaire

    Ce qui fonctionne dans mon formulaire :
    Récupération du nom du Fournisseur dans un classeur fermée
    Récupération de la Désignation à partir du Code Pièce, dans un classeur fermé

    Données
    classeur : BdPrix
    Onglet : base contenant plusieurs lignes triées pour le même code pièce dont les colonnes qui m’intéresse sont
    B3 Référence, C3 Désignation, H3 Fournisseur, I3 Ref Fournisseur

    Onglet : recap avec les mêmes colonnes qui ne contiennent qu’une seule ligne par code pièce (triées sans doublons à l’aide d’un Module Dico)

    classeur : Formulaire
    Onglet : Formulaire
    G6 : Nom du fournisseur (récupéré par une ComboBox sur à un classeur différent lecture sans ouvrir celui-ci cela fonctionne)

    Ligne 19 en tête de mon formulaire
    G19 : Désignation (actuellement récupéré par le code la pièce par formule dans le classeur BdPrix sur un onglet recap lecture sans ouvrir celui-ci cela fonction)
    F19 Ref Fournisseur (il peut avoir plusieurs ref pour le même fournisseur seul des positions de montages change mais nous ne faisons pas la différence au niveau de notre code pièce)
    H19 Code Pièce (cette colonne est remplie soit manuellement soit par copier-coller d’une feuille de nomenclature)

    Sur le formulaire à partir de la ligne 20 ou sont rentrés les codes pièces
    But : lorsque je clique sur la cellule Code Pièce, à partir du Nom du Fournisseur, du Code Pièces remplir sur la même ligne que le code pièce : Ref Fournisseur (si il y a plusieurs choix ComboBox), Désignation

    J’espère être un peu plus claire (dans le code fourni au début j’essayé de le faire sans les liaisons sur les classeurs fermés).
    Merci Pierre pour les liens je regarde.

Discussions similaires

  1. Remplir un combobox à partir d'une base de données
    Par walid kh dans le forum VB.NET
    Réponses: 4
    Dernier message: 17/04/2019, 13h50
  2. Réponses: 2
    Dernier message: 13/03/2018, 09h03
  3. [Débutant] remplir un combobox à partir d'une base de donnée
    Par affaf09 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/10/2016, 09h36
  4. Remplir une textbox ou label
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2010, 20h27
  5. Réponses: 1
    Dernier message: 23/05/2007, 11h49

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