Liste déroulante qui varie, comment l'actualiser ?
Résolu/Fermé
macchat
Messages postés
13
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
4 janvier 2013
-
28 déc. 2012 à 19:03
macchat Messages postés 13 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 4 janvier 2013 - 31 déc. 2012 à 13:56
macchat Messages postés 13 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 4 janvier 2013 - 31 déc. 2012 à 13:56
A voir également:
- Actualiser liste déroulante excel
- Liste déroulante excel - Guide
- Excel liste déroulante en cascade - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
5 réponses
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
856
29 déc. 2012 à 07:01
29 déc. 2012 à 07:01
Bonjour,
Tu pourrais peut-être créer des noms dynamiques dans ta feuille où se trouvent tes listes.
Ensuite tu affecteras ces noms à tes zones de formulaires.
Pour créer un nom dynamique, tu utilises la fonction DECALER() avec NBVAL().
Exemple :
en $A$1 tu as le nom de ta liste : LISTE1
en $A$2:$A:$7 tu as 6 entrées de ta liste et tu veux en ajouter ou en supprimer à ta guise.
Tu crées un nom LISTE1 et tu mets la formule
A partir de là, si tu ajoutes une entrée en $A$8, LISTE1 aura 7 entrées.
Attention cependant, il ne faut pas de lignes vides dans ta liste et tu ne dois avoir que LISTE1 dans la zone $A$2:$A$1000.
Tu répètes l'opération pour les autres listes.
Ensuite, tu peux te référer à tes listes via leurs noms avec un RANGE() et toutes les méthodes de ce genre d'objet.
Cordialement
Tu pourrais peut-être créer des noms dynamiques dans ta feuille où se trouvent tes listes.
Ensuite tu affecteras ces noms à tes zones de formulaires.
Pour créer un nom dynamique, tu utilises la fonction DECALER() avec NBVAL().
Exemple :
en $A$1 tu as le nom de ta liste : LISTE1
en $A$2:$A:$7 tu as 6 entrées de ta liste et tu veux en ajouter ou en supprimer à ta guise.
Tu crées un nom LISTE1 et tu mets la formule
=DECALER($A$1,1,0,NBVAL($A$2:$A$1000),1)dans sa définition.
A partir de là, si tu ajoutes une entrée en $A$8, LISTE1 aura 7 entrées.
Attention cependant, il ne faut pas de lignes vides dans ta liste et tu ne dois avoir que LISTE1 dans la zone $A$2:$A$1000.
Tu répètes l'opération pour les autres listes.
Ensuite, tu peux te référer à tes listes via leurs noms avec un RANGE() et toutes les méthodes de ce genre d'objet.
Cordialement
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
29 déc. 2012 à 09:24
29 déc. 2012 à 09:24
Bonjour,
Rowsource est une possibilité intéressante pour ta liste déroulante (combobox) mais peut adaptée à des changements d' ajout-retrait
une tite boucle est nécessaire; par ex ta liste de plats commence en B2, feuil1
et si tu veux avoir la première valeur de la liste dans le combo
Rowsource est une possibilité intéressante pour ta liste déroulante (combobox) mais peut adaptée à des changements d' ajout-retrait
une tite boucle est nécessaire; par ex ta liste de plats commence en B2, feuil1
Option Explicit Private Sub UserForm_Initialize() Dim Lig As Byte, Derlig As Byte With Sheets(1) 'ligne de fin de liste Derlig = .Columns("B").Find("*", , , , , xlPrevious).Row 'remplissage du combo For Lig = 2 To Derlig ComboBox1.AddItem .Cells(Lig, "B") Next i End With End Sub
et si tu veux avoir la première valeur de la liste dans le combo
ComboBox1.ListIndex = 0
macchat
Messages postés
13
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
4 janvier 2013
29 déc. 2012 à 15:56
29 déc. 2012 à 15:56
Merci michel_m de votre réponse. Je viens d'essayer pour mes entrées en colonnes A1 et sur la feuille Commandes.
Seulement deux messages d'erreurs apparaissent :
Derlig = .Columns("A").Find("*"),,,,x1Previous).Row ( pour celui là j'ai : Attendu fin d'instruction)
et pour ComboBox1.AddItem.Celles(Lig,"A") (j'ai attendu = )
Pourriez-vous m'éclairer si possible ?!
Je vous remercie
Seulement deux messages d'erreurs apparaissent :
Derlig = .Columns("A").Find("*"),,,,x1Previous).Row ( pour celui là j'ai : Attendu fin d'instruction)
et pour ComboBox1.AddItem.Celles(Lig,"A") (j'ai attendu = )
Pourriez-vous m'éclairer si possible ?!
Je vous remercie
macchat
Messages postés
13
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
4 janvier 2013
29 déc. 2012 à 16:04
29 déc. 2012 à 16:04
Finalement, j'ai retapé et maintenant je n'ai plus ces deux erreurs mais une nouvelle -_-
Pour le i après Next : "Erreur de Compilation : Référence de variable de contrôle incorrecte dans Next"
Pour le i après Next : "Erreur de Compilation : Référence de variable de contrôle incorrecte dans Next"
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
29 déc. 2012 à 16:07
29 déc. 2012 à 16:07
re,
relis bien la syntaxe de mon envoi
pour find: 5 virgules et non 4 ;xlprevious et non x1previous
cells(Lig,"A") et non celles(...
et aussi
with sheets("commandes")
relis bien la syntaxe de mon envoi
pour find: 5 virgules et non 4 ;xlprevious et non x1previous
cells(Lig,"A") et non celles(...
et aussi
with sheets("commandes")
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
Modifié par ccm81 le 29/12/2012 à 16:15
Modifié par ccm81 le 29/12/2012 à 16:15
bonjour
Deux petites erreurs dans la transcription du code de michel (cordiales salutations à toi)
ça doit donner (les espaces apparaitront automatiquement entre les virgules)
ça doit donner
et il en reste une autre
Next Lig au lieu de Next i
bonne suite
Deux petites erreurs dans la transcription du code de michel (cordiales salutations à toi)
Derlig = .Columns("A").Find("*"),,,,x1Previous).Row
pas de parenthèse fermante après "A"
ça doit donner (les espaces apparaitront automatiquement entre les virgules)
Derlig = .Columns("B").Find("*", , , , , xlPrevious).Row
ComboBox1.AddItem. Celles(Lig,"A")
Cells au lieu de Celles et un espace entre AddItem et .Cells
ça doit donner
ComboBox1.AddItem .Cells(Lig, "B")
et il en reste une autre
Next Lig au lieu de Next i
bonne suite
macchat
Messages postés
13
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
4 janvier 2013
29 déc. 2012 à 16:25
29 déc. 2012 à 16:25
J'ai rectifié mes erreurs, effectivement je n'avais pas tout correctement retranscrit par étourderie.
Voilà ce que donne mon code :
Private Sub UserForm_Initialize()
Dim Lig As Byte, Derlig As Byte
With Sheets("Commandes")
'ligne de fin de liste
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Rpw
'Remplissage du combo
For Lig = 2 To Derlig
Entrées.AddItem .Cells(Lig, "A")
Next Lig
End With
End Sub
Je viens de le relire 50 fois, peut être que j'ai trop la tête dedans, mais j'ai un nouveau message d'erreur ! " erreur d'éxécution 438 : Propriété ou méthode non gérée par cet objet"
Suis je passé à côté de qqch ?
Voilà ce que donne mon code :
Private Sub UserForm_Initialize()
Dim Lig As Byte, Derlig As Byte
With Sheets("Commandes")
'ligne de fin de liste
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Rpw
'Remplissage du combo
For Lig = 2 To Derlig
Entrées.AddItem .Cells(Lig, "A")
Next Lig
End With
End Sub
Je viens de le relire 50 fois, peut être que j'ai trop la tête dedans, mais j'ai un nouveau message d'erreur ! " erreur d'éxécution 438 : Propriété ou méthode non gérée par cet objet"
Suis je passé à côté de qqch ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
29 déc. 2012 à 17:12
29 déc. 2012 à 17:12
Rpw ---- Row
au passage, Merci CCM81
au passage, Merci CCM81
macchat
Messages postés
13
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
4 janvier 2013
29 déc. 2012 à 19:47
29 déc. 2012 à 19:47
Effectivement ! Merci beaucoup !
Dernière petite question : Si je le fais pour toutes mes listes, dois-je mettre Tous les end with à la fin ?
Dernière petite question : Si je le fais pour toutes mes listes, dois-je mettre Tous les end with à la fin ?
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
Modifié par ccm81 le 30/12/2012 à 10:53
Modifié par ccm81 le 30/12/2012 à 10:53
With Sheets("Commandes")
Le "with", fait référence à la feuille "Commades", donc
1. si les autres listes sont dans cette feuille, un seul with et un seul end with
Pour chaque Combobox, il faudra recalculer DerLig et modifier le nom de la colonne, ça devrait donner quelque chose comme ça
2. si les autres listes sont dans d'autres feuilles, un bloc With .... End with par Combobox
bonne suite
Le "with", fait référence à la feuille "Commades", donc
1. si les autres listes sont dans cette feuille, un seul with et un seul end with
Pour chaque Combobox, il faudra recalculer DerLig et modifier le nom de la colonne, ça devrait donner quelque chose comme ça
Private Sub UserForm_Initialize() Dim Lig As Byte, Derlig As Byte With Sheets("Commandes") ' Combobox Entrées - liste colonne A 'ligne de fin de liste Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row 'Remplissage du combo For Lig = 2 To Derlig Entrées.AddItem .Cells(Lig, "A") Next Lig ' Combobox Machin - liste colonne B 'ligne de fin de liste Derlig = .Columns("B").Find("*", , , , , xlPrevious).Row 'Remplissage du combo For Lig = 2 To Derlig Machin.AddItem .Cells(Lig, "B") Next Lig ' Combobox Truc .... End With End Sub
2. si les autres listes sont dans d'autres feuilles, un bloc With .... End with par Combobox
Private Sub UserForm_Initialize() Dim Lig As Byte, Derlig As Byte With Sheets("Commandes") ' Combobox Entrées - liste colonne A 'ligne de fin de liste Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row 'Remplissage du combo For Lig = 2 To Derlig Entrées.AddItem .Cells(Lig, "A") Next Lig End With With Sheets(("FeuilleMachin") ' Combobox Machin - liste colonne B 'ligne de fin de liste Derlig = .Columns("B").Find("*", , , , , xlPrevious).Row 'Remplissage du combo For Lig = 2 To Derlig Machin.AddItem .Cells(Lig, "B") Next Lig End With With Sheets("FeuilleTruc") .... End With End Sub
bonne suite
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
30 déc. 2012 à 11:44
30 déc. 2012 à 11:44
Bonjour CCM, macchat
pour peut-^tre alléger le code avec une macro paramétrée
au fait ! Bonne année 2013
pour peut-^tre alléger le code avec une macro paramétrée
Private Sub UserForm_Initialize() initialiser_combo "commandes", "A", entrées initialiser_combo "feuillemachin", "B", machin End Sub Sub initialiser_combo(feuille, col, combo) Dim derlig As Byte, Lig As Byte With Sheets(feuille) derlig = .Columns(col).Find("*", , , , , xlPrevious).Row For Lig = 2 To derlig combo.AddItem .Cells(Lig, col) Next Lig End With combo.ListIndex = 0 End Sub
au fait ! Bonne année 2013
macchat
Messages postés
13
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
4 janvier 2013
30 déc. 2012 à 18:48
30 déc. 2012 à 18:48
Merci Ccm81 !
Voilà ce que donne mon code :
Private Sub Commande_Initialize()
Dim Lig As Byte, Derlig As Byte
With Sheets("Commandes")
'ligne de fin de liste
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Entrées.AddItem .Cells(Lig, "A")
Next Lig
'ligne de fin de liste
Derlig = .Columns("C").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Plats.AddItem .Cells(Lig, "C")
Next Lig
'ligne de fin de liste
Derlig = .Columns("E").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Desserts.AddItem .Cells(Lig, "E")
Next Lig
'ligne de fin de liste
Derlig = .Columns("G").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Boissons.AddItem .Cells(Lig, "G")
Next Lig
End With
End Sub
Pourtant cela ne marche toujours pas...
Voilà ce que donne mon code :
Private Sub Commande_Initialize()
Dim Lig As Byte, Derlig As Byte
With Sheets("Commandes")
'ligne de fin de liste
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Entrées.AddItem .Cells(Lig, "A")
Next Lig
'ligne de fin de liste
Derlig = .Columns("C").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Plats.AddItem .Cells(Lig, "C")
Next Lig
'ligne de fin de liste
Derlig = .Columns("E").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Desserts.AddItem .Cells(Lig, "E")
Next Lig
'ligne de fin de liste
Derlig = .Columns("G").Find("*", , , , , xlPrevious).Row
'Remplissage du combo
For Lig = 2 To Derlig
Boissons.AddItem .Cells(Lig, "G")
Next Lig
End With
End Sub
Pourtant cela ne marche toujours pas...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10855
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
29 avril 2024
2 404
Modifié par ccm81 le 30/12/2012 à 19:39
Modifié par ccm81 le 30/12/2012 à 19:39
Pourtant cela ne marche toujours pas...
Qu'est ce qui ne marche toujours pas, j'ai fait un essai, ça fonctionne
RQ. La proposition de michel permet effectivement de simplifier le code et elle fonctionne!
> michel
J'avais bien pensé à un truc de ce genre mais je n'ai pas l'habitude des Userforms, du coup, je n'ai pas "osé" passer un combobox en paramètre, je note, je note !!!
Bon réveillon
Qu'est ce qui ne marche toujours pas, j'ai fait un essai, ça fonctionne
RQ. La proposition de michel permet effectivement de simplifier le code et elle fonctionne!
Private Sub UserForm_Initialize() initialiser_combo "commandes", "A", Entrées initialiser_combo "commandes", "C", Plats initialiser_combo "commandes", "E", Desserts initialiser_combo "commandes", "G", Boissons End Sub Sub initialiser_combo(feuille, col, combo) Dim derlig As Byte, Lig As Byte With Sheets(feuille) derlig = .Columns(col).Find("*", , , , , xlPrevious).Row For Lig = 2 To derlig combo.AddItem .Cells(Lig, col) Next Lig End With ' combo.ListIndex = 0 End Sub
> michel
J'avais bien pensé à un truc de ce genre mais je n'ai pas l'habitude des Userforms, du coup, je n'ai pas "osé" passer un combobox en paramètre, je note, je note !!!
Bon réveillon
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
31 déc. 2012 à 09:24
31 déc. 2012 à 09:24
Bonjour CCM81
La proposition de michel permet effectivement de simplifier le code et elle fonctionne!
hé Oui! ce coup ci j'ai testé mes bidouilles ! :-D
bonne année
La proposition de michel permet effectivement de simplifier le code et elle fonctionne!
hé Oui! ce coup ci j'ai testé mes bidouilles ! :-D
bonne année
macchat
Messages postés
13
Date d'inscription
vendredi 28 décembre 2012
Statut
Membre
Dernière intervention
4 janvier 2013
31 déc. 2012 à 13:56
31 déc. 2012 à 13:56
Effectivement cela marche maintenant ! Merci beaucoup et bonnes fêtes !