Liste déroulante VBA

Résolu
lucieaup -  
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

8 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    0
  2. lucieaup
     
    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...
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    1- logiciel?
    2- qu'appelle tu "formulaire"?
    0
  4. lucieaup
     
    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...).
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lucieaup
     
    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....
    0
    1. lucieaup Messages postés 18 Statut Membre
       
      Je vous mettrai bien mon fichier en pièce jointe pour que vous compreniez mieux mais je ne trouve pas comment faire...
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
  7. lucieaup Messages postés 18 Statut Membre
     
    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.
    0
  8. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    0
  9. lucieaup Messages postés 18 Statut Membre
     
    Ca marche!!!

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

    Merci beaucoup de votre patience!
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      De rien.
      A+
      0