Conditions sur liste déroulantes VBA

Bonjour à tous,

j'aimerai savoir s'il existe une solution pour mon problème.

Dans mon userform j'ai 2 menus déroulants. J'aimerai, selon le choix choisi sur le premier, que sur le deuxième une liste s'affiche.

par exemple, avoir une liste de noms et suivant le nom, sur la deuxième des taches s'affichent.

J'ai une feuille avec tout les noms et une feuille différentes pour les obligations de chacun. (4 prénoms sur une feuille, et 4 feuilles avec les taches pour chacun des noms).

Vous en remerciant par avance,

Bien cordialement

Salut,

Sans ton fichier, c'est difficile de t'aider.

Le sujet suivant traite de la chose et donne une solution tout à fait pertinante

https://forum.excel-pratique.com/excel/menu-deroulant-et-recherche-dans-base-de-donnee-t36724.html

A te relire.

Merci Yvouille,

C'est plus ou moins cela mais avec un Userform en VBA.

J'aimerai que - dans mon userform - selon les choix de ma catégorie (Feuille 2), le choix de mes obligations(Feuille 3) s'affichent.

Je n'y arrive pas du tout du tout ....

Je vous envoie un exemple simplifié que vous puissiez voir...

Vous en remerciant par avance

Salut,

Ca fait quelques heures que je tente de trouver une solution à ton problème. Sans succès, j'ai ouvert un autre fil afin de chercher de l'aide.

Tu peux voir l'évolution de la discussion sur le fil https://forum.excel-pratique.com/excel/reinitialiser-immediatement-un-combobox-t43842.html, mais dans tous les cas je reviendrais sur ce fil afin de continuer la discussion en fonction de ton fichier personnel.

Merci de patienter.

Alors voilà, j'ai reçu toute l'aide nécessaire sur l'autre fil et je peux te présenter un fichier correspondant normalement à ton attente

Cordialement.

Bonjour Yvouille,

Merci c'est exactement ce dont j'avais besoin !! J'ai eu un petit temps de réaction car j'avais un problème avec ma connexion internet!

Merci beaucoup !!!

PS: j'ai visualisé le code mais je ne le comprend pas trop étant novice en code. j'aimerai l'adapter à mon fichier, pourrais-je revenir vers en cas de problème?

Merci énormément dans tous les cas

Merci pour ta réponse.

jj93 a écrit :

pourrais-je revenir vers en cas de problème?

Oui, bien entendu

jj93 a écrit :

Salut Yvouille,

Je t'envoi en pièce-jointe le classeur que j'ai déjà réussi à réaliser.

Je te conseille de tester la macro que tu puisses visualiser le rendu, je t'ai mis deux exemples.

Sur les feuilles "catégorie" et "Liste_OL" il y a la même problématique que sur mon premier poste cependant je comprend pas duuuuuu tout le code envoyé lol

Si tu peux m'aider en appliquant le code sur cette feuille et tester la macro ensuite pour voir le rendu, je pourrais ensuite comparer les deux codes pour peut être réussir à comprendre et l'appliquer par la suite...

Le fichier n'est pas confidentiel, tu peux le mettre sur le site (il y est déjà pour d'autre problématique liées à son élaboration) cela ne me pose aucun problème

Te remerciant par avance,

Te souhaitant une bonne après-midi,

Jj93

Re-bonjour,

Tout d’abord je préférerais que tu restes sur le Forum pour continuer la discussion.

Ensuite je ne comprends pas que vous nous fournissiez souvent des fichiers exemples qui ne correspondent pas aux fichiers réels. Ca complique la discussion et les codes. Maintenant on a deux fichiers avec des UserForms, des TextBox, des ComboBox, etc. aux noms différents. De plus la texture des fichiers n’est pas non plus la même ; dans l’un, ta liste d’obligations n’a pas de titre, dans l’autre oui.

En ce qui concerne ta nouvelle demande : Tu charges ton ComboBox_ol par la Private Sub Userform_Initialize, avec cette boucle For i de 1 à 176. Tout d’abord ce n’est pas une bonne idée, car si tu changes le nombre d’obligations, tu dois modifier cette boucle. Une liste dynamique serait mieux.

Dans le fichier que tu as présenté sur le Forum, une liste dynamique n’est cependant pas suffisante. Le ComboBox1 est alors chargé par l’intermédiaire d’une liste réactualisée en cours de macro, lors de la modification de la ComboBox_c.

Voici comment ça se passe : Il faut tout d’abord créer cette liste. Toujours dans le fichier présenté la première fois "Classeur_Exemple", j’ai créé la liste Liste_Choix_o sous Formules/Gestionnaire de noms. Comme les données seront réactualisées par la suite, tu peux tout d’abord indiquer des références quelconques.

Ensuite tu crées la macro Private Sub ComboBox_c_Change qui sera déclenchée à chaque modification du ComboBox_c justement. Dans ce code, tu détermines quelles références devront être affectées à la liste, par la ligne

ActiveWorkbook.Names("Liste_Choix_o").RefersToR1C1 = "=Choix_o!R" & PremièreLig & "C1:R" & DernièreLig & "C1"

Ma difficulté lors de la création de ce code avait été d’affecter cette liste nouvellement actualisée au ComboBox1 et j’avais donc obtenu comme aide d’écrire cette ligne complémentaire

ComboBox1.RowSource = "Liste_Choix_o"

Plutôt que de modifier ce code Private Sub ComboBox_c_Change afin qu’il fonctionne également pour ta feuille, je te conseille plutôt de mettre une ligne de titre à la feuille "Liste_OL" de ton fichier réel.

Et puis si tu tentes cette manière de faire, n’oublie pas de neutraliser ton ancienne manière de charger ton ComboBox_ol (c'est-à-dire neutraliser ta boucle For i = 1 To 176).

Ca te permet d’avancer ? Si non, je veux bien essayer de modifier ton fichier réel.

Cordialement.

Bonjour Yvouille,

J'ai appliqué le code sur mon fichier sur le userform et sur la feuille concernée mais il y a alors 2 bugs. Voici dessous le code entré.

Private Sub ComboBox_categorie_Change()
Dim DerLig As Long, PremièreLig As Integer, DernièreLig As Integer
Dim i As Integer, j As Integer

Application.ScreenUpdating = False

With Sheets("Choix_o")
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row

    If ComboBox_categorie = "Toutes" Then
        ActiveWorkbook.Names("Liste_Choix_o").RefersToR1C1 = "=Choix_o!R2C1:R" & DerLig & "C1"
    Else
            For i = 2 To DerLig
                If .Range("B" & i) = ComboBox_categorie Then
                PremièreLig = i
                Exit For
            End If
            Next i

            For j = DerLig To 2 Step -1
                If .Range("B" & j) = ComboBox_categorie Then
                PremièreLig = j
                Exit For
            End If
            Next j

        ActiveWorkbook.Names("Liste_Choix_o").RefersToR1C1 = "=Choix_o!R" & PremièreLig & "C1:R" & DernièreLig & "C1"
            End If
        End With

    ComboBox_ol.RowSource = "Liste_Choix_o"
End Sub

Private Sub ComboBox_ol_Change()

End Sub

Le premier bug serait sur 2 lignes suivante:

    If ComboBox_categorie = "Toutes" Then
        ActiveWorkbook.Names("Liste_Choix_o").RefersToR1C1 = "=Choix_o!R2C1:R" & DerLig & "C1"
    Else

'ainsi que pour la ligne suivante :

        ActiveWorkbook.Names("Liste_Choix_o").RefersToR1C1 = "=Choix_o!R" & PremièreLig & "C1:R" & DernièreLig & "C1"
            End If
        End With
      End Sub

ensuite j'ai une erreur d' "ambiguité sur la ligne suivante:

Private Sub ComboBox_ol_Change()
End Sub

Peut-être y a t-il une erreur sur ma saisie?

Merci d'avance,

Bien cordialement

PS: je remets le fichier à jour en pièce-jointe.

14creation-v-3.xlsm (42.79 Ko)

Salut,

Tes excuses pour avoir posté tout d'abord un fichier inutile sont toutes acceptées.

Yvouille a écrit :

Voici comment ça se passe : Il faut tout d’abord créer cette liste. Toujours dans le fichier présenté la première fois "Classeur_Exemple", j’ai créé la liste Liste_Choix_o sous Formules/Gestionnaire de noms.

Tu n'as pas créé cette liste !

capture 10 10

Cordialement.

Bonjour Yvouille,

Tout d'abord comme apparemment cela te tiens à coeur, je m'excuse pour:

1. Le premier envoi de fichier non en rapport avec mon deuxième fichier excel. Cela m'a tout de même permis d'apprendre de nouvelles choses mais ça c'est mon avis perso.

2. Pour la non compréhension de ta réponse qui me fis teredemander des explications alors que la réponse était inscrite: la tableau n'a pas été fait.

Pour revenir au chose sérieuse, j'ai regardé les formules entrées dans ton tableau de gestion des noms mais comme tu le sais, je ne connais que très peu excel et je ne comprend pas ces formules (=DECALER....) je ne peu donc pas les appliquer sur mon fichier. Je comprend pas pas également pourquoi dans ces deux listes tu ne prends que la partie comptable et que le tri marche tout de même.

Yvouille, la volonté y est sincèrement mais la compréhension moins. Etant novice il m'est difficile de vraiment tout comprendre même si j'essaye de me renseigner au maximu

Si tu peu m'apporter encore une fois ton aide ou si même d'autres personnes sont intéressées à faire avancer cette discussion, je vous en remercie d'avance.

Dans tous les cas, merci à toi Yvouille pour ton aide précieuse et merci aux autres.

Bien cordialement

Salut,

Tu te fous légèrement de ma gueule et je trouve cela pas très sympa par rapport à quelqu’un qui t’a proposé de t’aider gratuitement.

Il est vrai que ça complique les choses de présenter deux fichiers différents pour le même problème. J’ai de la peine à être convaincu que ça t’aie vraiment apporté quelque chose d’extraordinaire dans ta progression avec Excel, par contre je peux te dire que ça continue à m’em.... passablement actuellement, par exemple lorsque je veux copier le code d’un fichier pour l’utiliser dans l’autre et que ça bloque à tout bout de champs car les ComboBox, les feuilles, les colonnes, etc. n’ont pas le même nom. Je pourrais te donner d’autres exemples. Mais bon, si toi ça ne te dérange pas …….

Je t’ai dit que j’étais prêt à t’offrir toute l’aide dont tu as besoin, mais je pensais que tu pouvais fournir un minimum d’efforts toi-même, raison pour laquelle je t’avais indiqué que tu devais créer au préalable un nom. Au lieu de me dire que tu ne sais pas créer un nom, tu m’indiques que mon code ne fonctionne pas. Je trouve assez normal de t’indiquer alors que tu n’as pas suivi mes indications et je ne comprends pas que tu te foutes alors à nouveau de ma gueule.

Dans le fichier ci-joint, un nom a été placé et le code Private Sub ComboBox_categorie_Change() a été modifié de manière à ce que le ComboBox_ol se modifie automatiquement en fonction du choix effectué dans le ComboBox_categorie.

jj93 a écrit :

Je comprend pas pas également pourquoi dans ces deux listes tu ne prends que la partie comptable et que le tri marche tout de même.

Je n’ai pas compris ce que tu veux dire par là. Peux-tu m’expliquer un peu mieux s’il te plait ?

Tu devrais utiliser le correcteur d’orthographe à disposition dans Word afin d’éviter le maximum d’erreurs dans tes textes.

Amicalement.

9creation-v4.xlsm (44.72 Ko)

Yvouille,

je suis désolé de t'avoir mis en colère ou quoi que ce soit, cela n'était en aucun cas mon intention - je n'ai aucun intérêt à cela - surtout pour quelqu'un qui m'a apporté son aide.

Sache qu'en aucun je n'ai voulu t'alourdir la tâche, je ne connaissais pas les conséquences des changements de noms ou ajouts de combobox.

Au niveau de mon écriture, la phrase incomprise signifie que lors de l'ouverture du gestionnaire des noms, pour la liste "Liste_Choix_o", tu ne sélectionnes que les cellules A25 à A31 (soit la partie "Comptable" des catégories proposées) et le tri que je recherchai (c'est-à-dire, avoir selon le choix de ma catégorie, le choix de mes obligations) marche tout de même.

Comment en choisissant seulement ces cellules, le choix est-il fonctionnel?

Je ne sais pas si tu comprends ma question... ceci est dû à mon manque de compréhension du code.

Sincèrement et amicalement,

jj93

Salut,

Yvouille a écrit :

Voici comment ça se passe : Il faut tout d’abord créer cette liste. Toujours dans le fichier présenté la première fois "Classeur_Exemple", j’ai créé la liste Liste_Choix_o sous Formules/Gestionnaire de noms. Comme les données seront réactualisées par la suite, tu peux tout d’abord indiquer des références quelconques.

Toi tu vois la dernière actualisation faite par le code au niveau de la "Liste_Choix_o", mais lorsque tu lances la macro une nouvelle fois, ces références sont réactualisées à ce moment-là afin que seules les données désirées apparaissent dans le ComboBox_ol.

Si tu retournes voir les références de la liste "Liste_Choix_o" à la fin de la macro, tu verras que les références ont changé et correspondent à ton dernier choix dans le UserForm.

Dans le code, la réactualisation de la liste se fait par cette ligne (pour toutes les catégories) :

ActiveWorkbook.Names("Liste_Choix_o").RefersToR1C1 = "=Choix_o!R2C1:R" & DerLig & "C1"

ou par celle-ci (pour une catégorie précise) :

ActiveWorkbook.Names("Liste_Choix_o").RefersToR1C1 = "=Choix_o!R" & PremièreLig & "C1:R" & DernièreLig & "C1"

Amicalement.

Yvouille,

merci pour ton explication,

Passe une bonne après-midi

Cordialement

Rechercher des sujets similaires à "conditions liste deroulantes vba"