Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Combo cascade puis affichage de la recherche

  • Initiateur de la discussion Initiateur de la discussion jordanep
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jordanep

Guest
Bonjour à tous

Cela fait une semaine que je cherche partout sur internet pour programmer sur excel.

J'ai un gros soucis J'ai créer un userform mais je voudrais que dans la premiére Combox ça m'affiche le choix des carte ( carte 1 , 2,3 ,4 ) et en fonction de cette reponse ça m'affiche dans une autre combobox le choix des numeros correspondant à ces cartes.

En deuxième temps, que ça m'affiche sur l'userforme la ref des boitier qui corresponds au numero de la carte avec sa couleur comme dans le tableau.

Je vous envoie ce que j'ai deja commencé à faire.

http://ipsa291.free.fr/essaiemail.xls

http://ipsa291.free.fr/essaiemail.xls

Merci à tous¨
J'a

PS: Je debute en excel, j'ai des notions en C, C++ si sa peut aider
 

Pièces jointes

Re : Combo cascade puis affichage de la recherche

bonjour jordanep et bienvenue sur le forum,

voici le code du UserForm :
Code:
Private Sub UserForm_Initialize()
ComboBox1.AddItem "Carte 1"
ComboBox1.AddItem "Carte 2"
ComboBox1.AddItem "Carte 3"
ComboBox1.AddItem "Carte 4"
End Sub


'lorsque le combobox "Carte" change
Private Sub ComboBox1_Change()
Dim cellFind As Range

'recherche la Carte (choisie dans le combobox) dans la ligne 4 de la feuille
Set cellFind = ThisWorkbook.Sheets("Feuil1").Rows(4).Find(ComboBox1.Text, , xlValues, xlWhole)
'si rien n'est trouvé (ça ne devrai pas arriver), quitter la macro
If cellFind Is Nothing Then Exit Sub
    
'RAZ du combobox "Numéro" et des labels "boitiers"
ComboBox2.Clear
Boitier1.Caption = ""
Boitier2.Caption = ""

'saisir les numéros dans le combobox "Numéro"
Set cellFind = cellFind.Offset(2, 0) 'décaler cellFind de 2 lignes (on se situe sur le premier numéro)
While cellFind.Text <> ""   'tant qu'il y a du texte dans la cellule
    ComboBox2.AddItem cellFind.Text     'ajouter le numéro
    Set cellFind = cellFind.Offset(1, 0) 'décaler la cellule d'une ligne
Wend
End Sub


'lorsque le combobox "Numéro" change
Private Sub ComboBox2_Change()
Dim cellFind As Range

'RAZ des labels "boitiers"
Boitier1.Caption = ""
Boitier2.Caption = ""

'recherche la Carte (choisie dans le combobox) dans la ligne 4 de la feuille
Set cellFind = ThisWorkbook.Sheets("Feuil1").Rows(4).Find(ComboBox1.Text, , xlValues, xlWhole)
'si rien n'est trouvé (ça ne devrai pas arriver), quitter la macro
If cellFind Is Nothing Then Exit Sub

'recherche le Numéro (choisie dans le combobox) dans la colonne de la Carte
Set cellFind = cellFind.EntireColumn.Find(ComboBox2.Text, , xlValues, xlWhole)
'si rien n'est trouvé (ça ne devrai pas arriver), quitter la macro
If cellFind Is Nothing Then Exit Sub

'afficher les valeurs dans les labels "boitiers"
Boitier1.Caption = cellFind.Offset(0, 1)    'Boitier1 --> 1 cellule à droite de cellFind
Boitier1.BackColor = cellFind.Offset(0, 1).Interior.Color
Boitier2.Caption = cellFind.Offset(0, 2)    'Boitier2 --> 2 cellules à droite de cellFind
Boitier2.BackColor = cellFind.Offset(0, 2).Interior.Color
End Sub

edit: 'ai rajouté les lignes pour la couleur des labels
a+
 
Dernière édition:
Re : Combo cascade puis affichage de la recherche

sa marche super ton code enfaite j'aimerai savoir si c'est possible d'avoir la meme chose mais avec une configuration différente des tableaux cest a dire au lieu davoir une colonne tout le long d'une carte de l'avoir sur plusieur colonnne. comme le fichier que je t'envoie sachant que les données sont les méme.

http://ipsa291.free.fr/essaiemail1.xls

http://ipsa291.free.fr/essaiemail1.xls
Si c'est ^pas possible c'est pas grave


merci encore
 
Re : Combo cascade puis affichage de la recherche

re bonjour,

voici le code modifié :
Code:
Private Sub UserForm_Initialize()
ComboBox1.AddItem "Carte 1"
ComboBox1.AddItem "Carte 2"
ComboBox1.AddItem "Carte 3"
ComboBox1.AddItem "Carte 4"
End Sub


'lorsque le combobox "Carte" change
Private Sub ComboBox1_Change()
Dim cellFind As Range, firstAddress As String, cellNum As Range

'recherche la Carte (choisie dans le combobox) dans la ligne 4 de la feuille
Set cellFind = ThisWorkbook.Sheets("Feuil1").Cells.Find(ComboBox1.Text, , xlValues, xlWhole)
'si rien n'est trouvé (ça ne devrai pas arriver), quitter la macro
If cellFind Is Nothing Then Exit Sub
    
'RAZ du combobox "Numéro" et des labels "boitiers"
ComboBox2.Clear
Boitier1.Caption = ""
Boitier2.Caption = ""

firstAddress = cellFind.Address 'mémoriser l'adresse de la première cellule (contenant la "carte" choisie) trouvée
Do  'boucler
    'saisir les numéros dans le combobox "Numéro"
    Set cellNum = cellFind.Offset(2, 0) 'décaler cellFind de 2 lignes (on se situe sur le premier numéro)
    While cellNum.Text <> ""   'tant qu'il y a du texte dans la cellule
        ComboBox2.AddItem cellNum.Text     'ajouter le numéro
        Set cellNum = cellNum.Offset(1, 0) 'décaler la cellule d'une ligne
    Wend
    Set cellFind = ThisWorkbook.Sheets("Feuil1").Cells.FindNext(cellFind)   'rechercher la cellule suivante sur la ligne (contenant la "carte" choisie)
Loop Until cellFind.Address = firstAddress  's'arrêter lorsqu'on revien à la première cellule trouvée
End Sub


'lorsque le combobox "Numéro" change
Private Sub ComboBox2_Change()
Dim cellFind As Range, firstAddress As String, cellNum As Range, zoneNum As Range

'RAZ des labels "boitiers"
Boitier1.Caption = ""
Boitier1.BackColor = &H8000000F
Boitier2.Caption = ""
Boitier2.BackColor = &H8000000F

If ComboBox2.Text = "" Then Exit Sub

'recherche la Carte (choisie dans le combobox) dans la ligne 4 de la feuille
Set cellFind = ThisWorkbook.Sheets("Feuil1").Cells.Find(ComboBox1.Text, , xlValues, xlWhole)
'si rien n'est trouvé (ça ne devrai pas arriver), quitter la macro
If cellFind Is Nothing Then Exit Sub

firstAddress = cellFind.Address 'mémoriser l'adresse de la première cellule (contenant la "carte" choisie) trouvée
Do  'boucler
    Set zoneNum = cellFind.Offset(2, 0) 'définir la zone des numéros
    For Each cellNum In Range(zoneNum, zoneNum.End(xlDown)).Cells
        If cellNum = ComboBox2.Text Then
            'afficher les valeurs dans les labels "boitiers"
            Boitier1.Caption = cellNum.Offset(0, 1)    'Boitier1 --> 1 cellule à droite de cellFind
            Boitier1.BackColor = cellNum.Offset(0, 1).Interior.Color
            Boitier2.Caption = cellNum.Offset(0, 2)    'Boitier2 --> 2 cellules à droite de cellFind
            Boitier2.BackColor = cellNum.Offset(0, 2).Interior.Color
            Exit Do
        End If
    Next cellNum
    Set cellFind = ThisWorkbook.Sheets("Feuil1").Cells.FindNext(cellFind)   'rechercher la cellule suivante (contenant la "carte" choisie)
Loop Until cellFind.Address = firstAddress  's'arrêter lorsqu'on revien à la première cellule trouvée

If cellNum Is Nothing Then Exit Sub 'si rien n'est trouvé (ça ne devrai pas arriver), quitter la macro

End Sub

a+
 
Re : Combo cascade puis affichage de la recherche

salut bon week end?

Je suis de retour au bureau, j'aimerai savoir si il était possible en + de faire une recherche inversé c'est a dire on connait le numero du boitier 1 et puis sa affiche le numero de chaque carte correspondant?
J'ai modifié l'userform

http://ipsa291.free.fr/essaiemail1.xls

http://ipsa291.free.fr/essaiemail1.xls

merci

PS: tu connais des sites ou des livres que je pourrais étudier?
 
Re : Combo cascade puis affichage de la recherche

afficher les numeros qui correspond par exemple pour le boitier1 2024 sa affiche carte 1 : 2002 carte 2: 2008 carte 2015 etc
 
Re : Combo cascade puis affichage de la recherche

re,

sur la base de ton dernier fichier (post #10), voici le code à mettre dernière le combobox "Numéro Boitier 1" :
Code:
Private Sub ComboBox3_Change()
Dim cellFind As Range, firstAddress As String, cellCarte As Range, zoneRecherche As Range

Label6.Caption = ""
Label6.BackColor = &H8000000F
Label7.Caption = ""
Label7.BackColor = &H8000000F
Label8.Caption = ""
Label8.BackColor = &H8000000F
Label9.Caption = ""
Label9.BackColor = &H8000000F

With ThisWorkbook.Sheets("Feuil1")
    Set zoneRecherche = Application.Union(.Range("B:B"), .Range("F:F"), .Range("J:J"), .Range("N:N"))
End With

Set cellFind = zoneRecherche.Cells.Find(ComboBox3.Text, , xlValues, xlWhole)
If cellFind Is Nothing Then Exit Sub
firstAddress = cellFind.Address
Do
    Set cellCarte = cellFind.Offset(0, -1).End(xlUp)
    While Not cellCarte.Text Like "Carte*"
        Set cellCarte = cellCarte.End(xlUp)
    Wend
    If cellCarte.Text = "Carte 1" Then Label6.Caption = cellFind.Offset(0, -1): Label6.BackColor = cellFind.Offset(0, -1).Interior.Color
    If cellCarte.Text = "Carte 2" Then Label7.Caption = cellFind.Offset(0, -1): Label7.BackColor = cellFind.Offset(0, -1).Interior.Color
    If cellCarte.Text = "Carte 3" Then Label8.Caption = cellFind.Offset(0, -1): Label8.BackColor = cellFind.Offset(0, -1).Interior.Color
    If cellCarte.Text = "Carte 4" Then Label9.Caption = cellFind.Offset(0, -1): Label9.BackColor = cellFind.Offset(0, -1).Interior.Color
    Set cellFind = zoneRecherche.FindNext(cellFind)
Loop Until cellFind.Address = firstAddress
End Sub

a+
 
Re : Combo cascade puis affichage de la recherche

Bonjour le forum,
Bonjour mromain, jordanep

Suis d'accord avec mromain, changer la structure de tes tableaux serait plus judicieux.

Vois cet exemple de bqtr si cela peut t'inspirer.

https://www.excel-downloads.com/threads/listbox-a-2-colonnes.110737/

Cela pourrait ressembler à ceci :

1ère colonne : Boitier 1 et Boitier 2
2ème colonne : Cartes 1 2 3 et 4
3ème colonne : Années
4ème colonne : Données

Amicalement klin89
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…