Affecter variables d'une liste déroulante

Manhuuu

XLDnaute Nouveau
Bonjour à tout le forum;

Je cherche à affecter la variable d'une liste déroulante, hélas je ne sais pas comment faire.
Voilà les manipulations éffectuées :

- dans un userform , j'ai créé une zone de liste modifiable.
- dans cette zone de liste j'ai affecté les variables dans données / rowsource / fam!e2:e76

si quelqu'un pouvait bien m'aider ça serait très apprécié, car je tourne en rond

Merci

Manu
 

Modeste

XLDnaute Barbatruc
Re : Affecter variables d'une liste déroulante

Bonjour Manu,

Il y a certainement plein de gens ici, disposés à t'aider ... mais si tu ne nous en dis pas plus, on risque d'être plusieurs à tourner en rond ! Tu as déjà pris le temps de lire Lien supprimé?

Edit: Salut BrunoM45
 

Manhuuu

XLDnaute Nouveau
Re : Affecter variables d'une liste déroulante

Dsl, si j'ai pas été assez clair...
Je débute sous vba...

J'ai récupéré un fichier que je souhaite adapter à mes besoins.

Dans l'userform9, j'ai créé plusieurs listes déroulantes. Je souhaite affecter aux listes d'une part la famille du fournisseur, d'autre part sa catégorie. Et en fonction de ma sélection :

_ catégorie
_ famille
_ famille + catégorie

Le but étant qu'une liste s'affiche dans l'encadré avec les nom des fournisseurs et mail appartenant à la catégorie et/ou la famille.

Pour au final pouvoir sélectionner les fournisseurs qui m'interessent dans cette liste et les mailer ...

Je ne demande pas à ce que qqun fasse le travail, par contre des pistes , idée, bout de code je prends volontier ;)

Merci à tous

Le fichier étant trop lourd pour être mis en pj, voici le lien rapid share

RapidShare: 1-CLICK Web hosting - Easy Filehosting
 

Modeste

XLDnaute Barbatruc
Re : Affecter variables d'une liste déroulante

re-bonjour,

Si j'ai bien compris et si tu ne demandes que des pistes, voici deux petits bouts de code à placer dans ton UserForm9. Il faut supprimer le fam!e2:exxx que tu avais mis dans la propriété RowSource de ton Combobox1.
Code:
Private Sub UserForm_Initialize() 'Avant le chargement de l'Usf
Set listeFam = CreateObject("Scripting.Dictionary")
With Sheets("fam") 'créer une liste sans doublons des Familles
For Each c In .Range("D2:D" & .Range("D65000").End(xlUp).Row)
    If Not listeFam.exists(c.Value) Then listeFam(c.Value) = c.Value
Next c
End With
ComboBox1.List = listeFam.keys
End Sub
Private Sub ComboBox1_Change() 'lors de la sélection d'une famille
If ComboBox1.ListIndex = -1 Then
    MsgBox "Vous devez sélectionner une famille"
    Exit Sub
Else
    Set ListeCat = CreateObject("scripting.Dictionary")
    With Sheets("fam") 'créer une liste sans doublons des Familles
        For Each c In .Range("e2:D" & .Range("e65000").End(xlUp).Row)
            If c.Offset(0, -1).Value = ComboBox1.Text Then
                If Not ListeCat.exists(c.Value) Then ListeCat(c.Value) = c.Value
            End If
        Next c
    End With
    ComboBox2.List = ListeCat.keys 'afficher la liste des Catégories, sans doublons
End If
End Sub
Pas eu le temps de faire plus qu'un unique test ... qui avait l'air "encourageant" :rolleyes:

Il faut que je me sauve, mais repasserai voir si quelqu'un a une autre idée, des remarques et si tu as testé
 

Manhuuu

XLDnaute Nouveau
Re : Affecter variables d'une liste déroulante

Cela fonctionne parfaitement, Merci.
Grâce à ces lignes de code j'ai réussi à faire afficher une liste de fournisseurs en fonction du premier combobox. Par contre je n'arrive pas à afficher une liste en fonction des 2 variables combobox (1 & 2).

Voilà le code pour afficher la liste des fournisseurs en fonction d'une variable :

Code:
' dans cette fonction on traite la chaine avant de faire la recherche
' exemple : minuscules, enlevé accent ...
Function traitementChaine(chaine As String) As String
    Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
    Const noAccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
    
    Dim i As Integer
    Dim lettre As String * 1
    
    ' on passe la chaine en minuscule
    chaine = LCase(chaine)
    
    ' on enlève tous les accents
    For i = 1 To Len(accent)
        lettre = Mid$(accent, i, 1)
        If InStr(chaine, lettre) > 0 Then
            chaine = Replace(chaine, lettre, Mid$(noAccent, i, 1))
        End If
    Next i
    
    traitementChaine = chaine
End Function

Function rechercheProduit()

' déclarations des variables
    Dim rmsgbox As Boolean
    Dim chaine As String
    Dim resultatRecherche As Range
    Dim fournisseur As String
    Dim produit As String
    Dim ligne As Integer
    Dim ligne_sav As Integer
    Dim colonne As Integer
    Dim colonne_sav As Integer
    Dim nombreProduit As Integer
    
    chaine = UserForm9.ComboBox1.Text
    nombreProduit = 0
    
    ' on vérifie que la chaine n'est pas vide
    If chaine = "" Then
        Exit Function
    End If
    
    ' on efface l'éventuelle précédente recherche
    Sheets("Feuil7").Activate
    Cells.Select
    Selection.ClearContents
    UserForm9.ListeResultat.RowSource = ""
    
    ' on envoi la chaine à la fonction de traitement
    chaine = traitementChaine(chaine)
    
    ' on se place sur l'onglet données
    Sheets("listfrs").Activate
    Cells(1, 1).Activate
    ' et on recherche sur toutes la feuille, sauf la première colonne,
    ' colonne des fournisseurs
    Columns("E:F").Select
    Set resultatRecherche = Selection.Find(What:=chaine, After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
        
    ' si aucun résultat est renvoyé, on affiche une popup
    If (resultatRecherche Is Nothing) Then
        rmsgbox = MsgBox("Aucun résultat trouvé pour " + Chr(34) + UserForm9.ComboBox1.Text + Chr(34), vbOKOnly + vbExclamation, "Recherche")
        Exit Function
    End If
    
    
    Do
        resultatRecherche.Activate
        ligne_sav = ligne
        ligne = ActiveCell.Row
        colonne_sav = colonne
        colonne = ActiveCell.Column
        
        ' si on a terminé la recherche (bas de feuille)
        If (ligne_sav > ligne) Then
            ' on sort de la fonction
            Exit Do
        End If
        If ((ligne_sav = ligne) And colonne_sav >= colonne) Then
            Exit Do
        End If
        
        ' on incrémente le nombre de produits trouvés
        nombreProduit = nombreProduit + 1
        
        ' on récupère le texte de la première colonne de la cellule trouvée
        fournisseur = Cells(ligne, 1).Text
        produit = ActiveCell.Text
        
        ' on le copie dans la page de résultats
        Sheets("Feuil7").Cells(nombreProduit + 1, 1) = fournisseur
        Sheets("Feuil7").Cells(nombreProduit + 1, 2) = produit
        
        Set resultatRecherche = Columns("E:F").FindNext(resultatRecherche)
    Loop Until resultatRecherche Is Nothing
    
    ' on met les titres des colonnes
    Sheets("Feuil7").Cells(1, 1) = "Fournisseur"
    Sheets("Feuil7").Cells(1, 2) = "Produit"
    
    Cells(1, 1).Select
    ' on affiche le résultat dans la listbox
    Dim source As String
    source = Sheets("Feuil7").Name + "!A2:B" + CStr(nombreProduit + 1)
    UserForm9.ListeResultat.RowSource = source
    
    ' on affiche une popup pour donnée le résultat de la recherche
    If (nombreProduit = 1) Then
        rmsgbox = MsgBox("Recherche terminée: " + CStr(nombreProduit) + " fournisseur trouvé pour " + Chr(34) + UserForm9.ComboBox1.Text + Chr(34), vbOKOnly + vbInformation, "Recherche terminée")
    Else: rmsgbox = MsgBox("Recherche terminée: " + CStr(nombreProduit) + " fournisseurs trouvés pour " + Chr(34) + UserForm9.ComboBox1.Text + Chr(34), vbOKOnly + vbInformation, "Recherche terminée")
    End If
    
End Function


Par contre je n'arrive pas à afficher la liste des frs en fonction du combobox1 + combobox2 ... Tout en gardant la fonction afficher en fonction juste du combobox 1 .

(Je n'ai pas intégré dans cette partie de code la variable 2 (combobox2) )

Qqun aurait il une solution ou des pistes svp ? Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 793
Messages
2 092 163
Membres
105 243
dernier inscrit
furet294