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 un intitulé un fonction de 2 ComboBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut Remplir un intitulé un fonction de 2 ComboBox
    Bonjour tous le monde!

    Alors voilà, j'ai une Useform1 avec 2 ComboBox.

    En fonction du contenu de la première, le contenu de la deuxième évolue.
    La première ComboBox récupère ses données en feuille "Bibliothèque" Colonne B
    La deuxième ComboBox récupère ses données en feuille "Bibliothèque" Colonne C

    Juste en dessous, j'ai un intitulé (Label3).
    J'aimerais que le contenu de cette intitulé soit fonction des 2 premières ComboBox (récupèrer les données en feuille "Bibliothèque" Colonne D). Et que le contenu soit mis à jour instantanément en fonction des sélections des ComboBox (et de préférence sans cliquer sur l'intitulé).

    Ma première idée, qui s'avère ne pas mettre à jour l'intitulé, a été de lier 2 cellules à mes combobox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sheets("Résultats").Select
     
    Range("B9") = ComboBox1.Value
    Range("C9") = ComboBox2.Value
    Puis d'entrer dans une cellule annexe (B2) la formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {=INDEX(Bibliothèque!D$1:D$500;EQUIV(1;(Bibliothèque!$B$1:$B$500='Résultats'!$B9)*(Bibliothèque!$C$1:$C$500='Résultats'!$C9);0))}
    Ca marche!

    Puis entrer comme Caption de mon intiltulé Label3 la cellule qui contient la formule précédente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Label3_Click()
     
    With Sheets("Résultat")
        Label3.Caption = .Range("B2")
    End With
     
    End Sub
    Tous ça fonctionne, mais le hic:
    - Il faut fermer la Userform1 pour que les case liées au ComboBox se remplissent.
    - Il faut réouvrir la UserForm et cliquer sur l'intitulé pour qu'il se mette à jour.

    Est-il possible de simplifier cette procédure en supprimant les cellules liées aux Combobox?
    Intégrer la formule =Index en code VBA ou bien faire autrement?

    Merci d'avance pour vos idées ++

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    Pour commencer tu peux mettre un évènement sur ta combobox2, l'évènement sera AfterUpdate, c'est là que tu pourras mettre la procédure que tu as détallée.

    En ce qui concerne la simplification, est-ce que la valeur de la colonne D que tu veux utiliser correspond à la ligne de la colonne C (donc de ta combobox) ?
    En fait quel est cette valeur ?

    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Oui, la ligne de la colonne D correspond à la ligne de la colonne C.
    Dans la colonne C c'est du texte, un commentaire en fonction du choix des Combobox.

    Mon objectif principal est que l'intitulé se remplisse directement après les choix effectués dans les 2 Combobox. Sans avoir à fermer la UserForm ou cliquer sur l'intitulé.
    Je suis donc pas sur que ma méthode soit la bonne car elle oblige à passer par la feuille résultat

    Merci de ton aide ++

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Je t'avoue avoir un peu de mal à visualiser ta structure dans tes colonnes, mais comme tu dis que tes combo sont dépendantes j'imagine qu'on ne peut pas faire de "liaison" entre les lignes de la feuille et les lignes de la combo2.
    J'entends par là que, par exemple, la ligne 5 de la combo2 ne correspond pas toujours à la 5 de la feuille...

    Par contre, en imaginant que tu as nommé tes plages on doit pouvoir utiliser un .Find pour récupérer la valeur souhaitée dans la colonne D.
    Ceci affecté à une variable évite de passer par une formule dans la feuille.

    Dis moi si je suis dans le bon et si mes explications t'éclaire...sinon, met ton fichier en pièce jointe pour autant qu'il n'y ai rien de confidentiel.

    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Je met mon fichier en pièce jointe^^, ça va être plus clair.

    Je l'ai allégé au max pour en simplifier la compréhension.

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    J'ai jeté un oeil à ton code, étant donné que je n'aurais pas fait comme toi et que j'ai pas le temps de refaire un code, je me suis juste penché sur la "mise à jour instantanée" du label.

    En fait un évènement change fait bien l'affaire, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Label3_Click()
     
    With Sheets("Data")
        Label3.Caption = .Range("B2")
    End With
     
    End Sub
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox9_change()
    Me.Label3.Caption = Sheets("Data").Range("B2")
    End Sub
    Si c'est OK t'as plus qu'à faire ça pour chaque label...

    A+

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Hey,

    Et bien après essai:

    L'intitulé (label) se met bien à jour en fonction du choix des Combobox, mais il renvoi à la cellule B2 de la feuille "data". Or cette cellule B2 se remplit uniquement lorsque j'ai cliqué sur mon bouton "Résultat" de ma userform.
    Donc tant que je suis dans ma userform et que je rempli mes ComboBox, La case B2 reste égale à 0, donc l'intitulé affiche 0.

    Je cherche une méthode qui ne demanderait pas de renvoi dans une cellule, mais qui ferait instantanément la recherche en fonction des ComboBox.

    Si vous avez d'autres idées sur comment faire je suis preneur!

  8. #8
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Je suis à nouveau au bureau donc sans 2007...

    Intègre la procédure de calcul dans le "Comboox9_Change", ça devrait la faire.

    A+

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Hum,
    Question bête, j'intègre de quel manière la formule sous forme de code?
    Je suis débutant^^ et je trouve pas dans la FAQ

    En tous cas merci de ton aide, et si tu veux je peux le convertir en 2003^^

    ++

  10. #10
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Au vu du code, je ne te pensais pas si "débutant"

    Donc pourquoi pas convertir le fichier ce sera plus facile, j'avais la flemme hier (un peu trop tard pour moi )

    A+

    P.S. supprime le fichier 2007 joint pour ne pas alourdir inutilement le forum

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    On m'a bien aidé pour sur ce forum

    Je joint donc mon fichier en version 2003 (J'espère ne pas m'être trompé de format)

    ++

    Edit: Ce coup ci ça devrait être bon! =)
    Fichiers attachés Fichiers attachés

  12. #12
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    De mémoire, retrouve le code lié au bouton de validation, scinde les calcules pour qu'ils correspondent à chaque Combobox et ajoute ceux-ci au code que je t'ai proposé.

    Essaies, si ça coince, recopie TOUT le code de ton Userform dans ta réponse.

    A+

    Re,
    Essaie ceci...Tu verras qu'il ne faut pas sélectionner la feuille (cf ton code sur validation) pour que ça fonctionne => gain de temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ComboBox9_change()
     
    With Sheets("Résultats Ossature Bois")
        .Range("B9") = ComboBox1.Value
        .Range("C9") = ComboBox9.Value
        .Range("D9") = ""
    End With
     
    Me.Label3.Caption = Sheets("Data").Range("B2")
     
    End Sub
    A+

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Ca fonctionne! =)

    Seul hic, lorsque je n'ai pas de valeur en ComBox9, l'intitulé ne se met pas jour.

    J'imagine qu'il faut diviser le code entre ComboBox1_change() et ComboBox9_change() mais alors là je bloque.

    ++

  14. #14
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Désolé je pensais que tu trouverais car tu étais sur la bonne piste, normalement (mais j'ai pas testé) en ajoutant le code ci-dessous au code existant à l'évènement change de ton Combobox1 ça devrait le faire.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Sheets("Résultats Ossature Bois")
        .Range("B9") = ComboBox1.Value
        .Range("C9") = ComboBox9.Value
        .Range("D9") = ""
    End With
     
    Me.Label3.Caption = Sheets("Data").Range("B2")
    A+

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Alors en intégrant l'équivalent de la ComboBox9_change en CBbox1_change, comme tu m'as dit, j'obtiens ça:

    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
    Private Sub ComboBox1_Change()
    Dim matériaux As Range
     
    Me.ComboBox9.Clear
    With Sheets("Bibliothèque")
    Set matériaux = .Columns(2).Find(Me.ComboBox1.Value)
     
    If Not matériaux Is Nothing Then
    For i = matériaux.Row To .Range("B65536").End(xlUp).Row
      If .Range("B" & i) = Me.ComboBox1.Value Or .Range("B" & i) = "" Then
        If .Range("C" & i) <> "" Then
        Me.ComboBox9.AddItem (.Range("C" & i).Value)
        End If
      Else
       Exit Sub
      End If
    Next i
    End If
    End With
     
    With Sheets("Résultats Ossature Bois")
        .Range("B9") = ComboBox1.Value
        .Range("C9") = ComboBox9.Value
        .Range("D9") = "0"
    End With
     
    Me.Label3.Caption = Sheets("Data").Range("B2")
    End Sub
    Ca ne fonctionne pas, il n'a pas l'air d'être pris en compte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ComboBox9_change()
     
    With Sheets("Résultats Ossature Bois")
        .Range("B9") = ComboBox1.Value
        .Range("C9") = ComboBox9.Value
        .Range("D9") = "0"
    End With
     
    Me.Label3.Caption = Sheets("Data").Range("B2")
     
    End Sub
    Je l'ai peut-être pas intégré de la bonne manière.

  16. #16
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Le tout est de voir ce que la formule renvoi comme résultat...
    as tu un 0 ou rien du tout ?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Quand je rempli les 2 Combobox (1 et 9), une valeur est renvoyé dans l'intitulé "0" ou bien un texte.
    Lorsque je rempli que la première ComboBox(1) (car pas de proposition en 9, ce qui est normal), aucune valeur n'est renvoyé en intitulé.

Discussions similaires

  1. Remplir Textbox en fonction de deux combobox
    Par empirehell dans le forum VBA Access
    Réponses: 10
    Dernier message: 19/07/2010, 08h30
  2. Remplir Textfield en fonction d'une comboBox
    Par BqiKo dans le forum Ext JS / Sencha
    Réponses: 5
    Dernier message: 06/05/2010, 11h25
  3. [VBA] Remplir un champ en fonction d'un autre champ
    Par Amanck dans le forum Access
    Réponses: 6
    Dernier message: 18/05/2006, 10h12
  4. Réponses: 6
    Dernier message: 08/11/2005, 15h44
  5. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22

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