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 :

Remplissage automatique d'une combobox en fonction d'une autre combobox.


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
    Chargé d'affaire
    Inscrit en
    Mai 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2019
    Messages : 11
    Par défaut Remplissage automatique d'une combobox en fonction d'une autre combobox.
    Bonjour à tous,

    J'ai réalisé un userform pour la conception de devis automatique (Excell -> Word).
    Malgré tout et dans le but de l'optimiser, je désirerais rajouter une fonction.
    En effet, il m'est déjà possible de remplir automatiquement les caractéristiques des clients via une base de donné alimentée grâce a ce même userform.
    En outre, lorsqu'un client déjà listé dans la bdd me contact pour un devis, je le sélectionne dans le "Combobox_Client" et toute ces infos (adresse, mail, tel etc...) se renseignent automatiquement dans les textbox associés.

    Le "souci" est que je peux avoir plusieurs contacts pour le même client, je désireras alors rajouter un combobox supplémentaire (Combobox_Client_Contact) qui se renseignerait en fonction de la sélection dans le Combobox-Client.
    Par la suite, se n'est qu'une fois ce "second" Combobox renseigné que les Textbox le seraient.

    Je connais une solution avec un tableau où les en-tete seraient les nom de clients et les colonnes les contacts mais malheureusement ma bdd ne se renseigne pas de cette manière et j'ai des centaines de clients déjà inscrits.
    Il faudrait que le Combobox_Client_Contact recherche dans la colonne "A" les valeurs correspondant au Combobox_Client et affiche les valeurs de la collone "B" si référent.

    Auriez vous la solution svp?

    Exemple de tableau excell:
    Nom : Capture.PNG
Affichages : 862
Taille : 32,6 Ko

    Userform:
    Nom : Capture1.PNG
Affichages : 784
Taille : 10,9 Ko

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut Senso19,

    Voici une proposition de code
    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
    Private Sub Combobox_Client_AfterUpdate()
        Const Haut As Integer = 2  'permet de savoir quelle est la premièrre ligne du tableau
        Const col_clt As Integer = 1  'permet de savoir quelle est la colonnt contenant les info des clients
        Const col_contact As Integer = 2 'permet de savoir quelle est la colonnt contenant les info des contacts
        Dim der_ligne As Integer
        Dim ligne As Integer 'permet de traiter les lignes du tableau
        der_ligne = Range("A1000000").End(xlUp).Row
     
        'on efface les données de la liste des contacts
        Me.Combobox_Client_Contact.Clear
        'on parcourt le tableau
        For ligne = Haut To der_ligne
            'on vérifie si c'est le bon client
            If Cells(ligne, col_clt).Value = Me.Combobox_Client Then
                'si c'est le cas, on ajoute le contact à la liste
                Me.Combobox_Client_Contact.AddItem Cells(ligne, col_contact).Value
            End If
        Next
    End Sub
    Par contre tu ne le montres surtout pas à Pierre Fauconnier
    Tu ne peux pas comprendre ma remarque. Mais ma proposition de code ne se base pas sur le fait que tu ais utilisé la fonction de tableau structuré. Et je sais qu'il n'aime pas quand on ne va au bout des choses.

    Et donc, un très grand coucou à Pierre.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2019
    Messages : 11
    Par défaut
    Bonjour,

    Merci pour votre réponse, celle-ci fonctionne à merveille.

    J'ai maintenant un autre souci.

    Auparavant mes Textbox (adresse, téléphone etc...) se renseignés automatiquement après sélection d'un Client.
    Je désirerais que cela se fasse maintenant après sélection du contact.
    En outre, je sélectionne un Client dans la Combobox_Client, je sélectionne un contact dans Combobox_client_contact et toutes ses infos se renseignent dans les Textbox.

    Actuel code (qui fonctionnait à l'origine sans le combobox_client_contact, ici avec quelques modifs pour s'adapter)
    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
    Private Sub ComboBox_Client_Contact_Change()
     
    'Pour la liste deroulante Code Client Contact
            Dim ligne As Long
     
            If ComboBox_client_contact.ListIndex = -1 Then Exit Sub
            ligne = ComboBox_client_contact.ListIndex + 2
                Controls("textbox_adClient1") = Ws.Cells(ligne, 3)
                Controls("textbox_adClient2") = Ws.Cells(ligne, 4)
                Controls("textbox_adClient3") = Ws.Cells(ligne, 5)
                Controls("textbox_telClient") = Ws.Cells(ligne, 6)
                Controls("textbox_mailClient") = Ws.Cells(ligne, 7)
                Controls("textbox_siret") = Ws.Cells(ligne, 8)
                Controls("textbox_adFact") = Ws.Cells(ligne, 9)
     
    End Sub
    Le souci est que cela selectionne n'importe quel contact pour le remplissage des Textbox.

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2019
    Messages : 11
    Par défaut
    Je pense comprendre le problème...
    Les Textbox se renseignent automatiquement suivant le nombre de lignes via le tableau.
    Exemple, je sélectionne le "Client B", puis "M.Cerf", les Textbox seront les infos de la première ligne du tableau, celles de M.Dupont...
    Si je sélectionne "M.Soris" (qui est mon second choix ici), j'aurais les infos de M.Bernard etc....

    Il faudrait que le choix du client ainsi que celui du contact soit pris en compte dans l'automatisation des Textbox.

    Merci

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2019
    Messages : 11
    Par défaut
    Bonjour,

    J'ai réussis à faire ce que je souhaitait mais j'ai désormais un nouveau souci.

    En effet, auparavant, j'avais des Textbox qui se renseignaient automatiquement après sélection de la Combobox_client.
    Désormais (et après avoir ajouté le Combobox_Client_Contact) je n'arrive plus à avoir cet automatisation correct.

    Je laisse ci-dessous un fichier TEST, je vous remercie pour votre aide.

    Pour ouvrir le formulaire:
    Cliquer sur le bouton "programmation", le mdp est "test" (sans les "")

    Formulaire Devis TEST.xlsm

  6. #6
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mai 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mai 2019
    Messages : 11
    Par défaut Remplissage automatique des Textbox en fonction d'un combobox
    Bonjour,

    J'ai réalisé un formulaire VBA pour la prise de devis.

    J'avais un souci pour le remplissage de Combobox par rapport à une autre Combobox, mais grâce à vous cela est résolue.

    Désormais j'ai un autre problème...

    En effet, auparavant, j'avais des Textbox qui se renseignaient automatiquement après sélection de la Combobox_client.
    Désormais (et après avoir ajouté le Combobox_Client_Contact) je n'arrive plus à avoir cet automatisation correct.

    Je laisse ci-dessous un fichier TEST, je vous remercie pour votre aide.

    Pour ouvrir le formulaire:
    Cliquer sur le bouton "programmation", le mdp est "test" (sans les "")


    Formulaire Devis TEST.xlsm

  7. #7
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Le problème vient du fait que maintenant, la liste des contacts n'affiche que les contacts du client présélectionné. du coup le contact sélectionné dans la liste est preut être le premeir de la liste mais pas sur la première ligne du tableau ...

    Je te propose cette modification :
    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
    Private Sub ComboBox_Client_Contact_Change()
    
    'Pour la liste deroulante Code Client Contact
            Dim ligne As Long
        
            If ComboBox_client_contact.ListIndex = -1 Then Exit Sub
            'on trouve la première ligne du client
            ligne = Application.WorksheetFunction.Match(Me.ComboBox_client.Value, Feuil3.Range("A:A"), 0)
            'on ajoute à ce résultat la position di contact dans la liste
            ligne = ligne + ComboBox_client_contact.ListIndex
            'on insére les données dans le formulaire
                Controls("textbox_adClient1") = Ws.Cells(ligne, 3)
                Controls("textbox_adClient2") = Ws.Cells(ligne, 4)
                Controls("textbox_adClient3") = Ws.Cells(ligne, 5)
                Controls("textbox_telClient") = Ws.Cells(ligne, 6)
                Controls("textbox_mailClient") = Ws.Cells(ligne, 7)
                Controls("textbox_siret") = Ws.Cells(ligne, 8)
                Controls("textbox_adFact") = Ws.Cells(ligne, 9)
    
    End Sub
    J'ai mis en rouge les deux lignes modifiées.
    Dans un premier temps je détermine la première ligne du client et ensuite je me décale selon la position du contact dans la liste (ce que tu avais fait).
    De cette manière on évite une boucle sur tout ton tableau.

    Une petite remarque, une piste de progrès, quand on sélectionne un client, peut être (our faure plus propre) effacer les données déjà présentes dans le formulaire.

    Et peut être à plus pour la suite.

    GG

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/09/2010, 18h19
  2. remplissage automatique d'une colonne en fonction du contenu d'une autre
    Par renton59 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/09/2010, 18h36
  3. Réponses: 4
    Dernier message: 23/06/2010, 10h17
  4. Fonction permettant un remplissage automatique d'une GtkTreeView
    Par dave260888 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 25/06/2007, 11h59
  5. Réponses: 8
    Dernier message: 19/04/2007, 10h20

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