Aide Userform - Tableaux - Combobox fonction d'une autre

Résolu
gad311081 Messages postés 53 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 31 mars 2008 - 25 mars 2008 à 15:46
gad311081 Messages postés 53 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 31 mars 2008 - 26 mars 2008 à 11:19
Bonjour à tous,

Je répose ma question car l'ancienne n'était plus d'actualité car j'ai apporté modif...
Je fais appel à votre aide.

Voila, j'ai une userform constituée de 3 combobox

Combobox Diametres
Combobox Fournisseurs
Combobox References Fournisseurs

Mon tableau est fait de la maniere suivante :

Colonne B : de ligne 15 à 35 

      - Caracteristiques outils

Ligne 13: 5 Fournisseurs 

      - Fournisseurs 1:       C13:E13      (Cellules Fusionnées) 
      - Fournisseurs 2:       F13:H13 
      - Fournisseurs 3:       I13:K13 
      - Fournisseurs 4:       L13:N13 
      - Fournisseurs 5:       O13:Q13

Ligne 14: 15 References 

      - Ref 1 à Ref3 Pour Fournisseurs 1: C14 à E14 
      - Ref 4 à Ref6 Pour Fournisseurs 2: F14 à H14 
      - Ref 7 à Ref9 Pour Fournisseurs 3: I14 à K14 
      ...etc 

Pour Info de viens d'ecrire quelques lignes qui se trouve à la fin du message, pour remplir mes combobox:
Inconvenients: Le fait d'avoir fait des cellules fusionnées pour mes fournisseurs, cela me créé des blancs dans ma liste de combobox.

1ere question: Comment faire pour que ces blancs(du fusionnement des celulles)  n'apparaissent pas ?

2eme question: Comment faire pour que ma "combobox references" soit fonction de ma "combobox fournisseurs" c'est à dire qu'elle me donne seulement la liste des References de ce clients? 

   Comment puis faire pour que lorsque je selectionne mon diametre dans ma première combobox, cela detecte la bonne ligne de la colonne B.
Puis que je selectionne dans ma seconde combobox, le fournisseurs de mon Outils, cela me detecte la bonne colonne C à E par exemple ( cellules fusionnées )
Cela entraine que dans troisieme combobox, il ne reste le choix que des reference de celui - ci.

Pouvez Vous m'aider????????
Merci bcp

Private Sub userform_initialize()

Dim Mes_Diametres_Fraises As String
   Dim Col25 As Integer
   Dim Lig25 As Integer
   Col25 = 2
   For Lig25 = 15 To 35
      Mes_Diametres_Fraises = Sheets("Fraises de Finition").Cells(Lig25, Col25).Value
      Gestion_Outils_2.ComboBox_Diametres_Fraises.AddItem Mes_Diametres_Fraises
   Next Lig25

Dim Mes_Fournisseurs_Fraises As String
   Dim Col26 As Integer
   Dim Lig26 As Integer
   Lig26 = 13
   For Col26 = 3 To 17
      Mes_Fournisseurs_Fraises = Sheets("Fraises de Finition").Cells(Lig26, Col26).Value
      Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.AddItem Mes_Fournisseurs_Fraises
   Next Col26

Dim Mes_References_Fournisseurs As String
   Dim Col27 As Integer
   Dim Lig27 As Integer
   Lig27 = 14
   For Col27 = 3 To 17
      Mes_References_Fournisseurs = Sheets("Fraises de Finition").Cells(Lig27, Col27).Value
      Gestion_Outils_2.ComboBox_Mes_References_Fournisseurs.AddItem Mes_References_Fournisseurs
   Next Col27 

End Sub

3 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 mars 2008 à 21:41
Salut,

je vois que tu progresses car maintenant tu indents ton code,  c'est bien .

Pas besoin de faire des boucles for pour alimenter une combobox quand les valeurs sources sont contigues(cote a cote). D'autre par tes variables intermediaires, comme la variable Mes_Diametres_Fraises ne servent à rien.

ce qui suit fait la meme chose en plus rapide :

Private Sub userform_initialize()
    Dim Col25 As Long, Lig26 As Long, Lig27 As Long

    With Sheets("Fraises de Finition")
        Col25 = 2
        Gestion_Outils_2.ComboBox_Diametres_Fraises.list() =  .Range(Cells(15,Col25),Cells(35,col25)).Value
   
        Lig26 = 13
        Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.list() =  .Range(Cells(Lig26,3),Cells(Lig26,17)).Value

        Lig27 = 14
       Gestion_Outils_2.ComboBox_Mes_References_Fournisseurs.list() =  .Range(Cells(Lig27,3),Cells(Lig27,17)).Value
    End With
End Sub

Passons à ta 1ere question :

cette fois une boucle simpose :

Private Sub userform_initialize()

    Dim Col25 As Long, Col26 As Long, Lig26 As Long, Lig27 As Long

    With Sheets("Fraises de Finition")
        Col25 = 2
        Gestion_Outils_2.ComboBox_Diametres_Fraises.list() =  .Range(Cells(15,Col25),Cells(35,col25)).Value
   
        Lig26 = 13

        For Col26 = 3 To 17
            If  .Cells(Lig26,Col26 ).Value <> "" Then 'si la cellule n'est pas vide alors
                Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.AddItem  .Cells(Lig26,Col26 ).Value
            End If
       Next Col26

       Lig27 = 14
       Gestion_Outils_2.ComboBox_Mes_References_Fournisseurs.list() =  .Range(Cells(Lig27,3),Cells(Lig27,17)).Value
    End With
End Sub

Maintenant la 2ieme question:

Pour cette question je manque un peu d'info mais je vais supposer que l'ordre des references suit l'ordre des fournisseurs dans la combobox

Private Sub userform_initialize()
    Dim Col25 As Long, Col26 As Long, Lig26 As Long, Lig27 As Long

    With Sheets("Fraises de Finition")
        Col25 = 2
        Gestion_Outils_2.ComboBox_Diametres_Fraises.List() = .Range(Cells(15, Col25), Cells(35, Col25)).Value
   
        Lig26 = 13
        For Col26 = 3 To 17
            If .Cells(Lig26, Col26).Value <> "" Then  'si la cellule n'est pas vide alors
                Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.AddItem .Cells(Lig26, Col26).Value
            End If
        Next Col26

        Lig27 = 14
        'La boucle for sert a derterminé la 1ere colonne en fonction du fournisseur
        For Col27 = 0 To Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.ListCount - 1
            If Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.List(Col27) = Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.Value Then                Col27 (Col27 + 1) * 3 ' +1 car le premier item de la combobox commence a 0 et * 3 car un  fournisseur 3 references sur 3 colonnes
                    'par exemple : suivant ton explication 1ere fournisseur reference en colonne C,D,E soit colonne 3,4,5 donc la 1iere reference est en 3,
                    '2ieme fournisseur reference en colonne F,G,H soit 6,7,8 donc 1ere reference en 6 etc.
                Exit For
            End If
        Next Col27
        Gestion_Outils_2.ComboBox_Mes_References_Fournisseurs.List() = .Range(Cells(Lig27, Col27), Cells(Lig27, Col27 + 3)).Value
    End With
End Sub

Vala

A+
3
gad311081 Messages postés 53 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 31 mars 2008
26 mars 2008 à 09:41
Merci pour ce qui concerne la reponse à la premiere question.

Private Sub userform_initialize()
    Dim Col25 As Long, Col26 As Long, Lig26 As Long, Lig27 As Long

    With Sheets("Fraises de Finition")
        Col25 = 2
        Gestion_Outils_2.ComboBox_Diametres_Fraises.list() =  .Range(Cells(15,Col25),Cells(35,col25)).Value
   
        Lig26 = 13

        For Col26 = 3 To 17
            If  .Cells(Lig26,Col26 ).Value <> "" Then 'si la cellule n'est pas vide alors
                Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.AddItem  .Cells(Lig26,Col26 ).Value
            End If
       Next Col26

       Lig27 = 14
       Gestion_Outils_2.ComboBox_Mes_References_Fournisseurs.list() =  .Range(Cells(Lig27,3),Cells(Lig27,17)).Value
    End With
End Sub

Mais cela fonctionne seulement lorsque que je fais lecture à partir de Microsoft Visual Basic et que mon fichier Excel est ouvert sur la page Fraises de finition.
Or, mon fichier Excel s'ouvre sur la page "accueil" et c'est de cette page que je lance ma Userform...

Comment remedier au probleme????SVP
Merci

Pour le reste je suis entrain d'essayer
0
gad311081 Messages postés 53 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 31 mars 2008
26 mars 2008 à 11:19
Pour ce qui concerne l'ensemble du code

Cela ne fonctionne pas.
Quand je selectionne mon diametre puis mon fournisseur, il ne me propose dans la 3eme combobox que la réference 3 c'est à dire la celulle E14 de la feuille "Fraises de finitions", Alors qu'il devrait me proposer les Reférences 1,2 et 3 (Celulle C14 D14 et E14)
Et lorsque que dans 2nd Combobox, je met le 2eme Fournisseurs, il ne me propose aussi que la 3eme Ref, alors qu'il devrait me proposer les Ref 4 5 et 6 c'est àa dire les celulles F14 G14 et H14. Et ainsi de suite
De plus j'ai toujours le soucis que ce code ne fonctionne que si je fais lecture à partir de Visual Basic et que moin fichier Excel est ouvert sur la Feuille Fraises de Finitions.

Est-ce que quelqu'un peut m'aider????? Merci




Dim Col25 As Long, Col26 As Long, Lig26 As Long, Lig27 As Long





    With Sheets("Fraises de Finition")
        Col25 = 2
        Gestion_Outils_2.ComboBox_Diametres_Fraises.List() = .Range(Cells(15, Col25), Cells(35, Col25)).Value
  
        Lig26 = 13
        For Col26 = 3 To 17
            If .Cells(Lig26, Col26).Value <> "" Then  'si la cellule n'est pas vide alors
                Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.AddItem .Cells(Lig26, Col26).Value
            End If
        Next Col26






        Lig27 = 14
        'La boucle for sert a derterminé la 1ere colonne en fonction du fournisseur
       
        For Col27 = 0 To Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.ListCount - 1
            If Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.List(Col27) = Gestion_Outils_2.ComboBox_Fournisseurs_Fraises.Value Then
                Col27 = (Col27 + 1) * 3
' +1 car le premier item de la combobox commence a 0 et * 3 car un  fournisseur = 3 references sur 3 colonnes
'par exemple : suivant ton explication 1ere fournisseur reference en colonne C,D,E soit colonne 3,4,5 donc la 1iere reference est en 3,
'2ieme fournisseur reference en colonne F,G,H soit 6,7,8 donc 1ere reference en 6 etc.
                Exit For
               
            End If
        Next Col27
        Gestion_Outils_2.ComboBox_Mes_References_Fournisseurs.List() = .Range(Cells(Lig27, Col27), Cells(Lig27, Col27 + 3)).Value
    End With
0
Rejoignez-nous