Liste déroulante VBA [Résolu/Fermé]

Signaler
-
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
-
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



8 réponses

Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
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 :

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...
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
1- logiciel?
2- qu'appelle tu "formulaire"?
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...).
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
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
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....
Messages postés
17
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
8 avril 2020

Je vous mettrai bien mon fichier en pièce jointe pour que vous compreniez mieux mais je ne trouve pas comment faire...
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
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
Messages postés
17
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
8 avril 2020

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.
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
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
Messages postés
17
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
8 avril 2020

Ca marche!!!

Merci beaucoup c'est génial! Vous venez de mettre fin à des heures de dure labeur!

Merci beaucoup de votre patience!
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
De rien.
A+