Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

CATA56

XLDnaute Nouveau
Bonjour au forum,

Je suis toujours aussi débutant mais en progression chaque jour. Je travaille en EXCEL 2010 avec Windows 7.
Je n'arrive pas à faire une restriction de proposition de nom dans une listbox en fonction du type de contact choisi dans une COMBOBOX Liste modifiable.
Je vous joins un fichier explicatif de mon problème.
Pour résumer:
J'ai un USERFORM nommé "frmconsultcontact" qui dépend d'un onglet "BDcontact"
Dans la Liste modifiable Type : "mdrtype" j'ai 4 possibilités de choix.
Dans la Liste modifiable Société : "mdrsociete" j'ai x possibilités de noms de société qui peuvent être en doublon en fonction des choix d'affectation de type de contact.
Je ne trouve pas le code pour ma listbox "listnom" qui me permettent d'avoir uniquement les noms en lien avec les choix fait dans ses 2 COMBOBOX.
Je ne trouve pas non plus le code qui permette de sélectionner un nom dans cette listbox et qui rapatrie l'ensemble des infos de ce nom dans les autres champs de ce USERFORM.

J'ai d'autres problématiques que j'exprimerai dans d'autres fils.

J'espère avoir été suffisamment claire et je vous remercie par avance pour votre aide ou vos conseils de code.
 

Pièces jointes

  • test1.xlsm
    88.6 KB · Affichages: 92
  • test1.xlsm
    88.6 KB · Affichages: 95
  • test1.xlsm
    88.6 KB · Affichages: 104

Bebere

XLDnaute Barbatruc
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Cata
ce matin,résolu le problème cascade
le code du bouton supprimé est modifié,la formule aussi
pour comprendre le code tu actives la fenêtre variables locales(menu affichage) et tu exécutes le code pas à pas touche F8
à bientôt
 

Pièces jointes

  • FichierCata.zip
    345.5 KB · Affichages: 31
  • FichierCata.zip
    345.5 KB · Affichages: 32
  • FichierCata.zip
    345.5 KB · Affichages: 33

Robert

XLDnaute Barbatruc
Repose en paix
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonjour le fil, bonjour le forum,

Je te propose une version avec une seule UserForm contenant un Multipage de deux pages. La première page sert exclusivement à Ajouter un nouveau contact. La seconde permet de Consulter, Modifier ou Supprimer un contact existant.
Pour consulter, tu peux soit renseigner le Type de Contrat et la Société puis choisir un nom dans la liste ou alors,
tu sélectionnes directement un nom dans la listbox Nom. Pour remettre tout à zéro il suffit de Double-Cliquer dans la listbox Nom.
À la création comme à la supression d'un contact, le(s) numéro(s) de contrat sont réactualisés sans l'utilisation de formule.

Le fichier :
 

Pièces jointes

  • Cata_v03.zip
    51.1 KB · Affichages: 42

CATA56

XLDnaute Nouveau
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonjour Robert, bonjour le fil, bonjour le forum
Très impressionnant, c'est exactement dont j'avais besoin.
Un grand merci, dommage que je ne comprends pas tout le code qui est pourtant super détaillé.
Je vais y travailler.
Merci encore
Reste une question certainement stupide, mais comment je clôture la discussion de ce fil?

A bientôt

CATA56
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonjour le fil, bonjour le forum,

Ici pas de clôture... On veut rester libre...
Non plus sérieusement (à peine), la clôture de fil a engendré de grandes discussions acharnées. On a même eu a déplorer des blessés légers parmi les membres du forum. Puis finalement David a tranché en disant qu'un fil qui pouvait sembler clôturé pour l'un ne l'était pas forcément pour l'autre et vice versa inversement et réciproquement...
Donc tu ne clôtures pas...
 

CATA56

XLDnaute Nouveau
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonjour le fil, bonjour le forum,

Ok, je trouve cette remarque judicieuse et je te remercie pour ces explications.
a bientôt sur un nouveau fil.

CATA56
 

CATA56

XLDnaute Nouveau
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonjour le fil, bonjour le forum,
Le code fournit par Robert, que je remercie encore une fois fonctionne parfaitement, cependant, je n'arrive pas à le dupliquer sur d'autres applications qui marchent de la même manière (2 combobox + 1 listbox) dépendante l'une de l'autre.
Est ce que je pourrais avoir la traduction des significations de (0,1) (0,3) dans le code du Cata_V02.zip ou du paramétrage nécessaire, SVP?
merci par avance pour vos réponses, si cela est possible.

A bientôt

CATA56
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonsoir le fil, bonsoir le forum,

Je ne comprenai pas ce que tu demandais (la prochaine fois, recopie au moins une ligne entière ou indique dans quelle procédure on la trouve !) et je pense que tu parles de .Offset(0, 1) et .Offset(0, 3).
Offset(x, y) permet de décaler, par rapport à la cellule/plage/sélection de base de x lignes et y colonnes.
Exemples :
Range("A1").Offset(0, 1).Value renvoie la valeur de B1
Range("A1").Offset(1, 0).Value renvoie la valeur de A2
Range("C4").Offset(-1, -1).Value renvoie la valeur de B3 etc...
 

CATA56

XLDnaute Nouveau
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonsoir le fil, bonsoir le forum,

Ok je vais essayer de ne plus faire cette erreur de présentation de mon problème à l'avenir.
Merci pour ton explication.
A bientôt

CATA56
 

CATA56

XLDnaute Nouveau
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonsoir le fil, bonsoir le forum,

Je continu dans mes problèmes bien que tes explications soient limpides. Malgré tous, cela ne marche pas.
Mon onglet "bdprojet" comporte 7 colonnes.
La colonne D correspond à mdrprojet et commence à la ligne n°4
La colonne E correspond à mdrphase et commence à la ligne n°4
La colonne F correspond à listactivite et commence à la ligne n°4

Je ne vois pas ou je me trompe!!!

Code:
Option Explicit
Private pl As Range 'déclare la variable pl (PLage)
Private cel As Range 'déclare la variable cel (CELlule)
Private dico As Object 'déclare la variable dico (DICiOnnaire)
Private temp As Variant 'déclare la variable temp (TEMPoraire)
Private li As Integer 'déclare la variable li (LIgne)

Private Sub UserForm_initialize() 'à l'initialisation de l'UserForm
Set dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico
With Sheets("bdprojet") 'prend en compte l'onglet "bdprojet"
    Set pl = .Range("D4:D" & .Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit la plage pl
    For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
        dico(cel.Value) = "" 'alimente le dictionnaire dico
    Next cel 'prochaine cellule cel de la boucle
End With 'fin de la prise en compte de l'onglet "bdcontact"
temp = dico.keys 'récupère les éléments du dictionnaire sans doublon
    'Call tri(temp, LBound(temp, 1), UBound(temp, 1)) 'classement par ordre croissant
mdrprojet.List = temp 'alimente la combobox "Type de projet" par la liste sans doublon
End Sub

Private Sub mdrprojet_Change() 'au changement dans la combobox "Type de projet"
Me.mdrphase.Clear 'vide la combobox "Phase"
Me.Listactivite.Clear 'vide la listbox "Activité"
Set dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico
For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
    'si la valeur de la cellule cel est égale à la valeur de la combobox "Type de projet", alimente le dictionnaire dico
    If cel.Value = Me.mdrprojet.Value Then dico(cel.Offset(0, 2).Value) = ""
Next cel 'prochaine cellule cel de la boucle
temp = dico.keys 'récupère les éléments du dictionnaire sans doublon
   'Call tri(temp, LBound(temp, 1), UBound(temp, 1)) 'classement par ordre croissant
mdrprojet.List = temp 'alimente la combobox "Projet" par la liste sans doublon
End Sub

Private Sub mdrphase_Change() 'au changement dans la combobox "Phase"
Me.Listactivite.Clear 'vide la listbox "Activite"
If Me.mdrprojet.Value <> "" Then 'condition 1 : si la combobox "Type de projet" n'est pas vide
    For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
        'condition 2 : si le type de contact et le nom de la société coïncident avec les comboboxes mdrtype et mdrsociete
        If cel.Value = Me.mdrprojet.Value And cel.Offset(0, 2).Value = Me.mdrphase Then
            li = cel.Row 'définit la ligne li
            With Me.Listactivite 'prend en compte la listbox "Activite"
                .AddItem (cel.Offset(0, 3).Value) 'ajoute le nom à la listbox
                .Column(1, .ListCount - 1) = li 'récupère le numéro de ligne
            End With 'fin dela prise en compte le la listbox "Nom"
        End If 'fin de la condition 2
    Next cel 'prochaine cellule cel de la boucle
End If 'fin de la condition 1
End Sub

Private Sub Listactivite_Click() 'au clic dans la listbox "Activite"
With Me.Listactivite 'prend en compte la listbox "activite"
    If .Value = "" Then Exit Sub 'si le clic est fait sur une valeur vide'sort de la procédure
    li = Me.Listactivite.Column(1, .ListIndex) 'récupère le numéro de ligne li
End With 'fin de la prise en compte de la listbox "Nom"

'récupère les valeurs de l'onglet "bdprojet"

End Sub

merci pour votre aide et à bientôt
CATA56
 

CATA56

XLDnaute Nouveau
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonsoir le fil et le forum;

Je suis en cours de réalisation d'un projet un peu trop complexe pour moi, mais je vais persister pour le réaliser. Je ne peux pas le mettre en ligne pour le moment car pas du tout achevé.
C'est pourquoi, je demande de l'aide au forum sur certains codes que j'essaye ensuite de mettre en situation.
Je te joins un fichier exemple ( test4.xls)
à bientôt
CATA56
 

Pièces jointes

  • test4.xlsm
    119.7 KB · Affichages: 39
  • test4.xlsm
    119.7 KB · Affichages: 40
  • test4.xlsm
    119.7 KB · Affichages: 44

Robert

XLDnaute Barbatruc
Repose en paix
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonsoir le fil, bonsoir le forum,

Bon, commençons par le commencement... Quand on alimente une ComboBox (ou une ListBox) avec des valeurs numériques (comme le numéro de projet de ton exemple) et qu'ensuite on demande de renvoyer un des éléments de cette ComboBox elle nous renvoie une valeur sous forme de texte. Autement dit la cellule contient 123456 mais la ComboBox renvoie "123456". Alors quand on compare la cellule et la valeur de la Combobox ça ne coïncide pas. Dans ton premier fichier sur lequel j'ai travaillé le cas ne se produisait pas...
Du coup, il faut remplacer :
Code:
If cel.Value = Me.mdrprojet.Value Then dico(cel.Offset(0, 2).Value) = ""
par :
Code:
If CStr(cel.Value) = Me.mdrprojet.Value Then dico(cel.Offset(0, 2).Value) = ""

Ensuite dans la procédure mdrprojet_Change, à la fin, tu as oublier de remplacer :
Code:
mdrprojet.List = temp
au lieu de :
Code:
mdrphase.List = temp

Pour finir, juste pour que tu comprennes, car le code que tu as utilisé fonctionne mais il aurait pu provoquer des erreurs. Le code ci-dessous :
Code:
Set pl = .Range("D4:D" & .Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit la plage pl
signifie : la plage pl est définie de D4 à D... et on part de la dernière cellule de la colonne 2 (Cells(Application.Rows.Count, 2)), on remonte à la dernière cellule édité (.End(xlUp) et en récupère la ligne (.Row). Cela permet de définir pl de façon dynamique.
Comme dans ton exemple la colonne B (=2) contient autant de données que la colonne D (=4), l'erreur d'avoir écrit 2 à la place de 4 n'a pas de conséquences, mais, il aurait été préférable d'écrire :
Code:
Set pl = .Range("D4:D" & .Cells(Application.Rows.Count, 4).End(xlUp).Row) 'définit la plage pl

En pièce jointe le fichier corrigé :

 

Pièces jointes

  • test5.xls
    492.5 KB · Affichages: 53
  • test5.xls
    492.5 KB · Affichages: 60
  • test5.xls
    492.5 KB · Affichages: 70

CATA56

XLDnaute Nouveau
Re : Sélection d'un nom dans une Listbox dépendant de 2 COMBOBOX Listes Modifiables

Bonjour le fil, bonjour le Forum,

Un grand merci Robert pour tex explications toujours aussi claires.
Je vais pouvoir avancer sur mon projet.
A bientôt

CATA56
 

Discussions similaires

Réponses
18
Affichages
752

Statistiques des forums

Discussions
312 472
Messages
2 088 710
Membres
103 930
dernier inscrit
Jibo