XL 2010 VBA - Lier trois listbox en cascade

elx

XLDnaute Nouveau
Bonjour à tous,


Je me permets de créer une énième discussion à ce sujet, car je n'ai pas réussi à appliquer les exemples des autres discussions à mon cas...

Ma problématique est relativement simple : j'aimerais lier ma listbox1 (listbox des types d'exercice) avec les listbox 3 et 5 (listbox des objectifs généraux et spécifiques).
C'est-à-dire que lorsque que je choisis un type les objectif correspondant s'affiche.
Par exemple : Sélectionner "tester l'alerte" génère automatiquement les objectifs correspondant ; c'est-à-dire "Test alerte + mobilisation communale". Et ainsi de suite pour "exercice partielle"="test alerte, mobilisation + armement" et "exercice général"= "test alerte+mobilisation+armement+ mesures de sauvegardes".

Actuellement, rien n'est lié et le contenu des lisbox est afficher entièrement au lancement du formulaire. Les listbox sont alimenter par rowsource.

Je vous joins le fichier ici, excusez le "bordel" apparent du code ; je débute et je me dépatouille comme je peux ^^
En vous remerciant d'avance pour votre aide/conseils :)

Erwan
 

Pièces jointes

  • BETA V3.xlsm
    96.4 KB · Affichages: 25
Solution
Votre fichier en retour pour test
attention que pour que les informations à mettre dans une combobox sur base du choix d'une combobox précédente, vous ne pouvez pas avoir de retour à la ligne dans les données de cellule.
Dans la colonne G (combobox 6) par exemple, j'ai supprimé les retours à la ligne dans les infos car la combobox suivante (combobox 7) ne prenait pas les valeurs.

Les rowssource sont supprimées pour la plupart, evitez cette instruction qui posent parfois des soucis
J'ai aussi supprimé quelques noms dans le gestionnaire de noms (ils n'allaient nulle part ou ne sont plus d'actualité suite au code)

Edit : je n'ai pas adapté la combobox 2 mais si vous me donnez les valeurs que l'on peut trouver, je vous donne...

Dan

XLDnaute Barbatruc
Maintenant ce que l'on fait souvent et qui est plus simple, c'est faire une feuille séparée avec toutes ces références. Une colonne par référence. Ensuite il devient plus simple car on fait en sorte qu'en cas d'ajout d'une donnée, on ne doit plus aller modifier dans le code, on ajoute simplement la nouvelle donnée dans la feuille dédiée aux listes de possibilités. Vous voyez ce que je veux dire ?

Exemple : si vous ajoutez une donnée pour la liste de la combobox2, vous êtes contraint d'aller dans le code pour le faire. Si vous aviez une liste dans une feuille (par exemple en colonne A), vous pourriez ajouter une donnée dans cette liste et le code prendrait automatiquement cette valeur. Idem pour toutes les autres combobox qui font référence à une liste de possibilités

Bon je vais tout de même jeter un oeil sur le code command click. Peut être que je vous posterai aujourd'hui.
 

Dan

XLDnaute Barbatruc
Au fait il va falloir modifier votre code Command click, parce que je vois que c'est que vous enregistrez vos retour à la ligne.
Aussi la textbox4 et combobox1 vont toutes deux en colonne D, pourquoi ?

Là à ce stade, je pense qu'il serait intéressant de renommer les combobox et textbox de manière progressives. Cela impliquera des changements un peu partout mais vous y gagneriez en compréhension.
J'attends votre retour d'infos
 

elx

XLDnaute Nouveau
Oui je vois tout à fait ce que vous voulait dire. Je comptais transféré ma base de données sur une autre feuille une fois la beta terminer pour passer une version plus définitive. Je pense y arriver facilement.

Concernant le CommandButton1_Click() je ne saisie pas vraiment le problème que vous soulevez... J'aimerais bien comprendre si vous pouvez me ré-expliquer peut etre ?

Concernant la TB4 et CB1 : En faite je laisse la possibilité à l'utilisateur de choisir un scenario dans la liste existante dans la CB1 mais aussi la possibilité de compléter ce scenario lui même en tapant dans la TB4. Ainsi il faut que les deux valeurs s'affichent dans la même colonne correspondante.
 

Dan

XLDnaute Barbatruc
Concernant le CommandButton1_Click() je ne saisie pas vraiment le problème que vous soulevez... J'aimerais bien comprendre si vous pouvez me ré-expliquer peut etre ?
Dans le code vous avez des chr10, c'est cela qui fait le retour à la ligne. Vous devez donc adapter le code sans quoi lorsque vous allez relancer l'userform1, les CB ne pourront pas vous charger les infos.

C'est un joli projet, cela vaut la peine de s'y pencher je trouve
TB4 et CB1 vont dans quelle colonne de votre feuille
 

elx

XLDnaute Nouveau
Ah d'accord je ne me douter pas que les chr10 allez poser problèmes, mais oui c'est vrai que ca ne s'affiche pas. Je vais réadapter ca en prenant votre travail comme modèle ca devrait aller :)

TB4 et CB1 vont dans la colonne D ; càd la colonne scénario.
 

Dan

XLDnaute Barbatruc
Ok. A votre dispo si besoin. Je garde votre fichier sous le coude car j'avais commencé à modifier le code command click
J'ai aussi vu que les autres combobox pourrait être alimentée sur le même principe en évitant donc les rowsource
 

elx

XLDnaute Nouveau
Salut ! Je reviens vers toi car après 3-4h de tentative je n'y arrive pas... Décidément je penser avoir compris mais toujours quelques chose qui cloche quelques part ^^'''''''''''

Bref, je coince pour afficher la valeur de mes textbox avec celle de me combobox. Apriori le multiligne sur une CB est impossible, j'ai essayer de renvoyer le contenu de la CB vers la TB mais puisque certaine CB sont liés en cascade ca coince ; même en retirant le Chr10...
Donc : As tu une idée de comment je peux afficher la valeurs de mes CB et TB dans la même cellule. Par exemple TB4 et CB1 en colonne D, Ou encore TB6 et CB6 en colonne H ou, TB8/CB7 en colonne I.

J'ai par ailleurs commencé à retirer mes rowsource comme tu me la conseillé en modifiant doucement le code petit à petit ; c'est peut être cela qui fait que mes CB et TB ne s'affiche plus ?
J'ai gardé deux versions au cas où (une avec encore les rowsources sur lequel on s'étais laissés et une autre que j'ai commencer a modifier) mais doit je continuer avant de pouvoir afficher mes cb et tb dans la même cellule ?

NB : TB14 est (à) supprimer car inutile.

Dans l'attente de lire t'es précieux conseils, bonne appétit :)
 

Dan

XLDnaute Barbatruc
Bonjour
Apriori le multiligne sur une CB est impossible
Oui effectivement
J'ai par ailleurs commencé à retirer mes rowsource comme tu me la conseillé en modifiant doucement le code petit à petit ; c'est peut être cela qui fait que mes CB et TB ne s'affiche plus ?
c'est à dire ? Vous voulez dire avoir une valeur visible par défaut ?

As tu une idée de comment je peux afficher la valeurs de mes CB et TB dans la même cellule.
C'est avec le bouton command click?
Si oui, modifiez le début du code comme ceci :

VB:
Private Sub CommandButton1_Click()
Dim ligne As Integer
Dim i As Byte
  
With Feuil1.ListObjects("Tableau1")
    If .ListRows.Count = 0 Then
        .ListRows.Add: ligne = 1
    Else: .ListRows.Add: ligne = .ListRows.Count
    End If
  
    For i = 1 To 3
        .DataBodyRange.Item(ligne, i) = Controls("TextBox" & i).Value 'colonne A à c
    Next i
        .DataBodyRange.Item(ligne, 4) = TextBox4.Value & " " & ComboBox1.Value
        .DataBodyRange.Item(ligne, 8) = TextBox6.Value & " " & ComboBox6.Value
        .DataBodyRange.Item(ligne, 9) = TextBox8.Value & " " & ComboBox7.Value
        .DataBodyRange.Item(ligne, 5) = ComboBox5.Value
        .DataBodyRange.Item(ligne, 6) = ComboBox2.Value 'theme
End With
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
959