Mise en relation entre combobox

cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007 - 13 juil. 2007 à 18:15
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007 - 20 juil. 2007 à 17:26
Bonjour à tous j'ai besoin d'aide pour développer un petit "programme" sur VBA qui doit s'executer via excel. Vu que j'ai débuté il y a moins d'une semaine il y a quelques soucis que je n'ai pas réussi à resoudre seul.
Voici mon problème :
Toutes mes données sont dans la feuille "Donnee"
J'ai une fenêtre userform nommée fmcrearisk que j'ai initializé comme ceci

Sub userform_initialize()
Dim Row As Integer
Dim X As Integer

For Row = 2 To 6
fmcrearisk.ComboBox1.AddItem Sheets("Donnee").Cells(Row, 4)
Next Row
For X = 2 to 34
fmcrearisk.Combobox2.AddItem Sheets("Donnee").Cells(Row,6)
End Sub

J'aimerai que selon la selection de ma combobox1 les informations de la combobox2 (qui sont sur la feuille "Donnee") soit affichés ou non.
En gros si je selectionne machine je veux avoir toutes les machines dans combox2 et non les habits ou les animaux (je sais pas si je suis clair lol). J'ai essayé plein de formule et ça ne marche pas...

Deuxième problème :
J'aimerais que des que je lance mon module que ma cellule active soit directement sous la dernière cellule non vide de la colone 1 (à savoir A).

J'ai d'autres questions mais cela attendra la prochaine fois vu que celle-ci sont mes priorités absolues.
Je vous remercie de toute réponse apportée :)

15 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 juil. 2007 à 18:47
Bonjour,

Tu auras tout-à-fait intérêt à :

1) vider ta combo2
2) l'alimenter ensuite conditionnellement (en fonction du choix dans la combo1) en allant puiser dans ta feuille Excel.

Encore faut-il que, sur ta feuille Excel, les catégories soient dans des "Range" différents et idéntifiables.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 juil. 2007 à 23:33
Tout à fait d'Accord avec JMF pour ton Combo2

Pour la première cellule vide de la colonne A
LigneVide = Cells(Rows.Count, "A").End(xlUp).Row + 1

MPi
0
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
14 juil. 2007 à 11:31
Merci pour vos réponses mais pour mon combobox2 je n'y arrive pas.
J'ai vidé la partie dans userform_inialize.

Et après je ne vois pas quelle formule entrer j'ai essayé en posant
 
Sub combobox1_change()
Dim X, Y as integer
if Row = 2 then
For X = 2 to 3
fmcrearisk.Combobox2.AddItem Sheets("Donnee").Cells(Row,6)
Next X
Elseif Row=3
For Y = 4 to 5
fmcrearisk.Combobox2.AddItem Sheets("Donnee").Cells(Row,6)
Next Y
End if
End Sub

J'ai essayé d'autre commande mais je n'abouti à rien.

Sinon merci [auteurdetail.aspx?ID=6078 MPi]  pour la formule et merci pour l'aide que vous m'apportez.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 juil. 2007 à 02:11
Il faudrait que tu expliques mieux ce que tu cherches à mettre dans ton combobox2
Tu utilises une boucle avec X et et une autre avec Y mais tu ne t'en sers pas...(?) Tu te sers de Row qui ne change pas (2 ou 3) et de "6" comme colonne, donc F (?)

MPi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
15 juil. 2007 à 09:56
En fait mon combobox1 est une catégorie (donnée écrites dans les cellules se trouvant dans la colonne D) et le combobox2(colonne 6) une sous catégorie.
J'ai écrit toute les catégorie dont j'avais besoin dans la même colonne (D) et les sous catégories dans une autre colonne F

Ma fenêtre userform comporte 2 combobox

Combobox1 est initializé grace à cette commande

Sub userform_initialize()
Dim Row As Integer
Dim X As Integer

For Row = 2 To 6
fmcrearisk.ComboBox1.AddItem Sheets("Donnee").Cells(Row, 4)
Next Row
end sub

Maintenant j'aimerai que selon la catégorie (c'est à dire la valeur qui sera dans ma combobox1)  ma combobox2  n'affiche que les sous catégorie correspondant à la catégorie. C'est à dire ne pas m'afficher toutes les données de ma colonne F mais juste celles qui corresponderont avec ma catégorie (Colonne D). Je ne sais pas si je suis très clair :s.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 juil. 2007 à 14:21
Je ne suis pas certain comment tu as monté tes colonnes D et F...(?)
En fait, il faut que toutes tes données soient en D et F
Les catégories en D peuvent se répéter et les sous-catégories en F doivent se trouver sur la même ligne que les catégories correspondantes... En fait, c'est ta boucle de 2 à 6 qui me fait me poser des questions...

Option Explicit

Private Sub UserForm_Initialize()
    Dim I As Long
   
    'Chargement d'une valeur unique dans Combobox1
    For I = 2 To Cells(Rows.Count, "D").End(xlUp).Row
        'Fonction qui vérifie l'existence de la valeur à inscrire
        If Not IsInCombo(ComboBox1, Range("D" & I)) Then
            ComboBox1.AddItem Range("D" & I)
        End If
    Next
    'Si la liste n'est pas vide, afficher le premier item    If ComboBox1.ListCount >0 Then ComboBox1.ListIndex 0
End Sub

Private Sub ComboBox1 _Change()
    'Vider avant de remplir
    ComboBox2.Clear
    'Appel de la Fonction de remplissage
    ChargerCombobox2 ComboBox1.Text
    'Si la liste n'est pas vide, afficher le premier item    If ComboBox2.ListCount > 0 Then ComboBox2.ListIndex 0
End Sub

'Procédure pour remplir une valeur unique dans Combobox2
'On pourrait passer le Combobox en paramètre comme la Fonction suivante
Sub ChargerCombobox2(Texte As String)
    Dim I As Long
   
    For I = 2 To Cells(Rows.Count, "D").End(xlUp).Row
        'Si le texte de Combobox1 = cellule Dx
        'Et que le texte n'est pas déjà dans Combobox2, ajouter la valeur en Fx
        If CStr(Range("D" & I)) = Texte And Not IsInCombo(ComboBox2, Range("F" & I)) Then
            ComboBox2.AddItem Range("F" & I)
        End If
    Next
End Sub

Function IsInCombo(Combo As Control, Valeur As String) As Boolean
    Dim I As Integer
   
    'Vérification de la liste
    For I = 0 To Combo.ListCount - 1
        If Combo.List(I) = Valeur Then
            IsInCombo = True  ' la valeur est déjà là, retourne "Vrai"
            Exit For          ' ça ne sert à rien de continuer
        End If
    Next
End Function

MPi
0
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
16 juil. 2007 à 00:19
Déjà merci pour ta réponse :)

Ma boucle de 2 à 6 me servait a appeler toutes les valeurs inscrites en D2:D6 qui sont toutes affichées dans ma combobox1 et ensuite selon la valeur de ma combobox1 j'aimerai (si possible) que ma combobox2 m'affiche certaines données se situant en F2:F34

En exemple concret
Si je prends la valeur D2 parmis toutes mes valeurs présentent dans ma combobox1 je voudrais que les données de la plage F2:F6 soient affichées dans ma combobox2
Si je selectionne D3 parmis toutes mes valeurs que la plage F7:F20 soit affiché dans ma combobox2.

En tout cas merci pour le temps que tu me consacres, j'apprécie vraiment le geste.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
16 juil. 2007 à 01:54
Et quelle est la logique dans tout ça ?
Comment veux-tu afficher F2 à F6 dans un cas et F7 à F20 dans un autre ???
Qu'est-ce qui fait que D2 est lié à F2:F6 ?

MPi
0
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
16 juil. 2007 à 13:06
d2 est une catégorie et f2 f6 sont des sous catégories, et j'aimerais lier les catégories avec les sous catégories selon la catégorie choisie.Il n'y a pas vraiment d'intéret on m'a seulement demandé de faire comme cela.
0
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
16 juil. 2007 à 20:09
Je me permet de faire un double post même si je n'aime pas ^^.

En fait j'aimerai arriver au même résultat que le système d'installation manule de périphérique windows.

Tu sais quand il te fait choisir dans une liste le constructeur et dans une autre il affiche les drivers en fonction du constructeur que tu as choisi c'est que j'aimerai faire. C'est vrai que c'est pas avec un combobox donc désolé pour les bétises.

Si voulais bien m'expliquer comment arriver à ce résultat ça m'aiderait beaucoup.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 juil. 2007 à 11:52
C'est ce que mon bout de code te proposait, mais il faudrait que tu inscrives les valeurs en D correspondant à chaque valeur en F, et ce sur chaque ligne.

On pourrait faire autrement, mais c'est la méthode la plus simple. Ce que tu vois dans le gestionnaire de périphérique est le résultat probable d'une base de données dans laquelle les données sont inscrites de la même manière que je te suggère.

MPi
0
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
17 juil. 2007 à 17:43
D'accord. Merci beaucoup pour ton aide. Ca va me prendre un certain temps pour tout mettre au point cependant j'y vois plus clair.

Merci et à bientôt
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2007 à 18:59
Bonsoir,

Il suffit probablement d'organiser ta feuille différemment

1ère colonne : le nom de l'élément concerné
2ème colonne et suivantes : les catégories

pour chaque élément : un simble x sur sa ligne, dans sa colonne d'appartenance

Il ne te reste ensuite plus qu'à rechercher les x dans une collonne (la catégotie), voir quel est l'élément correspondant en 1ère colonne de la même ligne et ajouter cette dernière donnée à ta combobox
A moins que j'aie mal compris le but recherché, bien sûr...
0
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
17 juil. 2007 à 20:52
Non tu as bien compris ça peut être effectivement une solution. Je vais essayer ça demain. Je vous tiendrai informés ^^
Merci
0
cs_luig Messages postés 9 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 20 juillet 2007
20 juil. 2007 à 17:26
Me revoilà je tiens à vous remercier. MPi ton code marche parfaitement même si j'avoue avoir eu un peu de mal à l'adapter (surtout pour aller chercher les données dans une autre feuille de calcul. J'ai quand même réussi, chose que je n'aurais pas pu tout seul.

Merci et à bientôt

Luig

PS : Y'a-t-il moyen de signaler que le problème a été résolu ? Peut-être "Réponse acceptée !" ? Je tente on verra bien :)
0
Rejoignez-nous