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 :

Changer le RowSouce d'un Combobox en fonction d'une variable [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Changer le RowSouce d'un Combobox en fonction d'une variable
    Bonjour,

    Je fais face a un problème. J'ai créé un userform contenant un combobox. Cependant j'aimerais que le RowSource du combobox s'adapte et change de table dans laquelle il prend ses données en fonction de ce qu'il y a marqué dans la cellule G2.
    Si la cellule G2 contient le mot Formation alors le combobox a pour rowsource la table "formation" et dans l'autre cas le combobox prend pour rowsource table "deplacement".
    j'espère avoir été assez clair... Voila mon code, il ne marche pas mais je ne comprend pas pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ComboBox1_Change()
    If Range("G2") = "Formation" Then
    UserForm6.ComboBox1.RowSource = "formation"
    Else
    UserForm6.ComboBox1.RowSource = "deplacement"
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox1_Change()
      UserForm6.ComboBox1.RowSource = Range(IIf([G2].Value = "Formation", "formation", "deplacement")).Address
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Çà ne marche pas du tout.. mais je comprend pas ce que ton code fait, parce qu'on dirait que tu n'as pas très bien compris mon problème !

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Vu que de mon côté mon code fonctionne à merveille dans une procédure normale, même en se passant de l'adresse de la plage,
    j'en déduis que de ton côté tu t'es trompé d'évènement ou tu n'as pas vérifié l'existence des noms
    ou encore une simple erreur d'orthographe ou pire une erreur de pointage sur le classeur source, etc …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    bonsoir,
    Je viens de tester le code de Marc, lequel, je le confirme, fonctionne, ce qui m'étonne, c'est l'évènement "Change" utilisé, j'ai, personnellement pris l'évènement "Click" de l'usf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Click()'au hasard
    'pour le test
    Range("G2") = "deplacement"
    UserForm6.ComboBox1.RowSource = Range(IIf([G2].Value = "Formation", "formation", "deplacement")).Address
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Cela serait possible que l'un de vous m'envoie le fichier avec lequel vous avez testé le code ?

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il est je pense inutile de t'envoyer un classeur.
    Le problème est simple.
    La valeur de la propriété RowSource d'un contrôle ComboBox est une chaîne de caractères qui doit reprendre le nom du classeur (par défaut c'est le classeur actif), le nom de la feuille et la plage de cellules
    Soit [NomClasseur]NomFeuille!A2:K100
    Si tu as nommé tes plages de données "formation" et "deplacement", il faut donc renvoyer en VBA la propriété Address de la plage nommée
    Soit par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ComboBox1.RowSource = Range(Range("G2").Value).Address
    et Marc à utiliser la fonction IIF pour renvoyer soit l'adresse de la plage nommée formation soit celle de deplacement
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Ah oui d'accord je comprend mieux, j'ai oublié de préciser que les tables ne sont pas sur la même page que la cellule G2. le problème vient surement de la

    Franchement je comprend pas pourquoi ca marche pas, il doit y avoir une erreur bien conne de ma part mais impossible de trouver quoi

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'ai oublié de préciser que les tables ne sont pas sur la même page que la cellule G2. le problème vient surement de la
    Oui effectivement c'est probable et j'ai oublié de le préciser dans ma réponse précédente.
    Personnellement, j'ajoute toujours la propriété External avec comme valeur True
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ComboBox1.RowSource = Range(Range("G2").Value).Address(external:=True)
    As-tu lu la remarque pertinente de Marc ?
    Et lors d'une réponse il est inutile de reprendre l'intégralité du message précédent ‼
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    oui oui je l'ai vu mais seulement après avoir poster le message Je ne le ferais plus promis !

    Si vous me transmettiez votre fichier avec lequel vous avez fait le test du code ca m'aiderait beaucoup a visualiser comment il marche et ou sont mes erreurs !

    Bon pour finir j'ai trouvé une autre solution pour faire ce que je voulais !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
     
    If Feuil5.Range("G2") = "Formation" Then
     ComboBox1.AddItem "PROV FORM"
     ComboBox1.AddItem "PARIS FORM"
    Else
     ComboBox1.AddItem "PROV DEP"
     ComboBox1.AddItem "PARIS DEP"
    Néanmoins Merci a tous pour votre aide !

  11. #11
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    un exemple que je t'avais préparé
    code de Marc tenant compte de la remarque de Philippe
    Fichiers attachés Fichiers attachés
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup pour cet exemple !

  13. #13
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Pas de quoi,
    j'ai volontairement utilisé ".List" pour remplir la listbox et ".RowSource" pour le combobox, à méditer......
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2014, 12h21
  2. Réponses: 4
    Dernier message: 18/02/2014, 11h06
  3. Réponses: 2
    Dernier message: 22/02/2013, 15h58
  4. [AC-2007] Remplir une combobox en fonction d'une valeur de formulaire
    Par Bluuuh dans le forum IHM
    Réponses: 3
    Dernier message: 11/07/2010, 22h16
  5. Changer le format d'un champ en fonction d'une valeur
    Par zoom61 dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/06/2007, 21h35

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