Liste déroulante VBA
Résolu
lucieaup
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
Bonjourà tous,
Je suis débutante en VBA il est donc fort probable que ma question vous semble "bête". Pour situer correctement mon travail, je veux faire un fichier entièrement géré avec des bouttons et des formulaires pour plus de practicité car plusieures personnes sont amenées à s'en servir et ca crée des "erreurs".
Je remplie actuellement un fichier comprenant une base de donnée clients (nom, prénoms...). Sur une deuxième feuille, j'aimerai que plus spécifiquement on rentre dans le détail de chaque personne. Pour cela, un formulaire s'ouvre et il reprend chaque intitulé de colonne. Pour la colonne "noms" j'aimerai que les données se choisissent via une liste déroulante dont la source serait la première feuille. J'ai bidouillé ca mais ca ne fonctionne pas:
ComboBox1.Clear
Dim i As Integer
Sheets("suivi").Select
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
i = 0
Dans un deuxième temps, j'aimerai que lors de l'ouverture d'une feuille, une box s'ouvre me demandant de rentrer le nom de la personne et ainsi elle me donnerai un résumé de tout ce qui concerne cette personne. J'ai bien crée cette question dans un formulaire mais ici encore, je n'arrive pas à faire apparaitre la liste déroulante et encore moins la relier au contenu.
J'ai essayé d'être la plus claire possible si ce n'est pas compréhensible, dites le moi...
Merci à tous pour votre aide
Je suis débutante en VBA il est donc fort probable que ma question vous semble "bête". Pour situer correctement mon travail, je veux faire un fichier entièrement géré avec des bouttons et des formulaires pour plus de practicité car plusieures personnes sont amenées à s'en servir et ca crée des "erreurs".
Je remplie actuellement un fichier comprenant une base de donnée clients (nom, prénoms...). Sur une deuxième feuille, j'aimerai que plus spécifiquement on rentre dans le détail de chaque personne. Pour cela, un formulaire s'ouvre et il reprend chaque intitulé de colonne. Pour la colonne "noms" j'aimerai que les données se choisissent via une liste déroulante dont la source serait la première feuille. J'ai bidouillé ca mais ca ne fonctionne pas:
ComboBox1.Clear
Dim i As Integer
Sheets("suivi").Select
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
i = 0
Dans un deuxième temps, j'aimerai que lors de l'ouverture d'une feuille, une box s'ouvre me demandant de rentrer le nom de la personne et ainsi elle me donnerai un résumé de tout ce qui concerne cette personne. J'ai bien crée cette question dans un formulaire mais ici encore, je n'arrive pas à faire apparaitre la liste déroulante et encore moins la relier au contenu.
J'ai essayé d'être la plus claire possible si ce n'est pas compréhensible, dites le moi...
Merci à tous pour votre aide
A voir également:
- Vba inputbox liste déroulante
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Liste déroulante google sheet - Accueil - Guide bureautique
- Site dangereux liste - Guide
8 réponses
Bonjour,
Question 1 :
il existe plusieurs façons de remplir une liste déroulante (Combobox), en voici une dans la procédure d'initialisation de l'userform :
Essaie déjà de faire tourner cela, on verra la deuxième question après...
Cordialement,
Franck P
Question 1 :
il existe plusieurs façons de remplir une liste déroulante (Combobox), en voici une dans la procédure d'initialisation de l'userform :
Private Sub UserForm_Initialize()
Dim lig As Long, DernLigne As Long
ComboBox1.Clear
With Sheets("suivi")
DernLigne = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
For lig = 2 To DernLigne
ComboBox1.AddItem .Cells(lig, 1)
Next lig
End With
End Sub
Essaie déjà de faire tourner cela, on verra la deuxième question après...
Cordialement,
Franck P
Bonjour Franck,
Merci de votre réponse rapide. J'ai essayé votre code mais ca ne fonctionne pas. En fait je crois que je n'ai pas compris où je dois remplir (désolée je ne suis pas trés douée). Je l'ai mis dans le code de mon formulaire (il s'ouvre tout seul quand on clique sur un bouton de la page d'accueil) et ca donne ca:
' suivi Macro
'
Dim k As Integer
For k = 1 To 100
Sheets("suivi").Select
dateS.Show
Range("A1").Select
Private Sub UserForm_Initialize()
Dim lig As Integer
Dim DernLigne As Long
ComboBox1.Clear
With Sheets("Identité")
DernLigne = .Columns(1).Find("A", (A)Previous).Row
For lig = 2 To DernLigne
ComboBox1.AddItem .Cells(lig, 1)
Next lig
End With
End Sub
If Range("A2").FormulaR1C1 <> "" Then Selection.End(xlDown).Select
Selection.Offset(1, 0).FormulaR1C1 = path1
Selection.Offset(1, 1).FormulaR1C1 = date1
Selection.Offset(1, 2).FormulaR1C1 = prix1
Selection.Offset(1, 3).FormulaR1C1 = moyen1
Selection.Offset(1, 4).FormulaR1C1 = com1
Next k
End Sub
C'est juste? En fait il doit aller chercher les informations dans la feuille "identité" en colonne A et les remettre dans la feuille "suivi" en colonne A aussi. La ma liste déroulante reste vide... J'ai aussi essayé de le mettre dans la feuille de code qui s'ouvre quand on double clique sur la combo box sans plus de succès...
Merci de votre réponse rapide. J'ai essayé votre code mais ca ne fonctionne pas. En fait je crois que je n'ai pas compris où je dois remplir (désolée je ne suis pas trés douée). Je l'ai mis dans le code de mon formulaire (il s'ouvre tout seul quand on clique sur un bouton de la page d'accueil) et ca donne ca:
' suivi Macro
'
Dim k As Integer
For k = 1 To 100
Sheets("suivi").Select
dateS.Show
Range("A1").Select
Private Sub UserForm_Initialize()
Dim lig As Integer
Dim DernLigne As Long
ComboBox1.Clear
With Sheets("Identité")
DernLigne = .Columns(1).Find("A", (A)Previous).Row
For lig = 2 To DernLigne
ComboBox1.AddItem .Cells(lig, 1)
Next lig
End With
End Sub
If Range("A2").FormulaR1C1 <> "" Then Selection.End(xlDown).Select
Selection.Offset(1, 0).FormulaR1C1 = path1
Selection.Offset(1, 1).FormulaR1C1 = date1
Selection.Offset(1, 2).FormulaR1C1 = prix1
Selection.Offset(1, 3).FormulaR1C1 = moyen1
Selection.Offset(1, 4).FormulaR1C1 = com1
Next k
End Sub
C'est juste? En fait il doit aller chercher les informations dans la feuille "identité" en colonne A et les remettre dans la feuille "suivi" en colonne A aussi. La ma liste déroulante reste vide... J'ai aussi essayé de le mettre dans la feuille de code qui s'ouvre quand on double clique sur la combo box sans plus de succès...
Oui je ne m'exprime peut être pas trés bien. Pour moi un logiciel c'est mon fichier excel mais avancé avec des fonctions VBA qui facilitent la manipulation des données pour l'utilisateur.
Ce que j'appelle un formulaire c'est le "userform" que j'ai fait dans VBA et ou j'ai mis ma combobox, mes zones de texte et les cases à remplir qui vont directement envoyer l'information dans le tableau (de ce fait l'utilisateur ne touchera plus au tableau...).
Ce que j'appelle un formulaire c'est le "userform" que j'ai fait dans VBA et ou j'ai mis ma combobox, mes zones de texte et les cases à remplir qui vont directement envoyer l'information dans le tableau (de ce fait l'utilisateur ne touchera plus au tableau...).
Bon.
Continuons,
Lorsque tu veux réaliser des actions dans ton UserForm, il faut placer les codes agissant lors d'événements de cet Userform (Initialise, combobox_change, textbox_exit ...) dans le module de l'userform.
Pour y accéder, très simple, sous l'éditeur VBE double clic dans le fond de ton Userform...
Ensuite, dans cette fenêtre, tu peux placer du code.
Regarde cet exemple de Userform. Il est très simple, mais suffisamment pour montrer quelques possibilités.
Ensuite, je vous recommande cette très saine lecture :
Tutoriels Excel
Utiliser les UserForm en VBA Excel
Utiliser les contrôles dans un UserForm, en VBA Excel
Continuons,
Lorsque tu veux réaliser des actions dans ton UserForm, il faut placer les codes agissant lors d'événements de cet Userform (Initialise, combobox_change, textbox_exit ...) dans le module de l'userform.
Pour y accéder, très simple, sous l'éditeur VBE double clic dans le fond de ton Userform...
Ensuite, dans cette fenêtre, tu peux placer du code.
Regarde cet exemple de Userform. Il est très simple, mais suffisamment pour montrer quelques possibilités.
Ensuite, je vous recommande cette très saine lecture :
Tutoriels Excel
Utiliser les UserForm en VBA Excel
Utiliser les contrôles dans un UserForm, en VBA Excel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je suis désolée mais j'ai tout lu (en fait j'en avais déjà vu une partie) et j'ai essayé de transposer votre formulaire ua mien mais ca ne fonctionne pas... Sur ce qui est montré, j'ai réussi à tout faire (retranscrire les box, lui faire recopier, supprimer, modifier...)
Il n'y a que cette histoire de liste déroulante que je n'arrive pas à faire fonctionner....
Il n'y a que cette histoire de liste déroulante que je n'arrive pas à faire fonctionner....
Bonjour,
Pour mettre un fichier en pièce jointe ici, il faut utiliser un site de pièce jointe comme : https://www.cjoint.com/
1- va sur leur site,
2- clic sur parcourir,
3- cherche ton fichier puis clic sur ouvrir
4- descend dans la page et clic sur "Créer le lien"
5- une fois le lien créé, tu le copies et viens le coller ici dans une réponse.
Ad'taleur
Pour mettre un fichier en pièce jointe ici, il faut utiliser un site de pièce jointe comme : https://www.cjoint.com/
1- va sur leur site,
2- clic sur parcourir,
3- cherche ton fichier puis clic sur ouvrir
4- descend dans la page et clic sur "Créer le lien"
5- une fois le lien créé, tu le copies et viens le coller ici dans une réponse.
Ad'taleur
Bonjour,
Bon désolée, j'ai été un peu lente mais la connection n'est pas top. Voici le lien
https://www.cjoint.com/?BKxng2iwq29
En fait j'ai essayé de coder sur une page vierge la liste déroulante et ca marche. Je crois que dans mon fichier il y a tellement de codes que du coup il ne doit pas être au bon endroit.
En tout cas merci pour l'aide que vous m'avez deja apportée.
Bon désolée, j'ai été un peu lente mais la connection n'est pas top. Voici le lien
https://www.cjoint.com/?BKxng2iwq29
En fait j'ai essayé de coder sur une page vierge la liste déroulante et ca marche. Je crois que dans mon fichier il y a tellement de codes que du coup il ne doit pas être au bon endroit.
En tout cas merci pour l'aide que vous m'avez deja apportée.
Alors :
- ouvres ton classeur
- tapes ALT+F11
- sur la gauche, double clic sur le petit dossier "Feuilles"
- tu vois 2 UserForm,
- Double clic sur DateS, ton Userform s'affiche
- double clic dans le fond de l'userform, le code apparait.
- supprimes la ligne : Private Sub UserForm_Click()
- assures toi que toutes tes procédures commençant par un "Private Sub machin()" se terminent toutes par un "end Sub"
- Tu as placé le code donné précédemment dans une procédure : "Private Sub dateS_Initialize()". C'est pas bien. Remplace "Private Sub dateS_Initialize()" par : "Private Sub UserForm_Initialize()"
- tu as oublié un "s" au bout de Columns dans .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
- ouvres ton classeur
- tapes ALT+F11
- sur la gauche, double clic sur le petit dossier "Feuilles"
- tu vois 2 UserForm,
- Double clic sur DateS, ton Userform s'affiche
- double clic dans le fond de l'userform, le code apparait.
- supprimes la ligne : Private Sub UserForm_Click()
- assures toi que toutes tes procédures commençant par un "Private Sub machin()" se terminent toutes par un "end Sub"
- Tu as placé le code donné précédemment dans une procédure : "Private Sub dateS_Initialize()". C'est pas bien. Remplace "Private Sub dateS_Initialize()" par : "Private Sub UserForm_Initialize()"
- tu as oublié un "s" au bout de Columns dans .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row