Liste déroulante boîte à outil contrôle

Melmex -  
Melmex Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous ceux qui passe par ici,

Alors voila mon petit problème. On ne peut pas dire que je sois une pro sur excel donc j'aurais besoin de votre aide :
Sur une feuille excel, qu'on appellera Feuil1, j'ai inséré une liste déroulante de la "Boîte à Outil de contrôle" ("ComboBox1"). J'ai ensuite tapé ma liste sur une autre feuille, qu'on appellera Feuil2. J'ai nommé cette Liste "Liste1" puis je l'ai inséré dans la "ComboBox1". Jusqu'à là tout va bien.

Maintenant je souhaiterais que lorsqu'un utilisateur inserre un nouveau nom dans ma "ComboBox1", ce nom siot automatiquement ajouté à ma "List1" de la Feuil2 pour que la personne suivante puisse trouver ce nouveau nom dans la liste déroulante!

Merci

Cordialement
Melmex

PS : Si quelqu'un pourrait en plus me dire comment on peut centrer notre selection de la liste déroulante, dans la comboBox1 se serait très aimable!

3 réponses

  1. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    Pour centrer le texte, tu vas dans propriété de ton bouton (en mode création, clic droit) et tu as TextAlign, tu choisis 2-fmtextalignercenter.

    Pour la seconde, il faut faire une macro :
    Outils, macro, visual basic éditor.
    a gauche, tu double cliques sur ta feuille et tu colles ca :
    Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    'combobox1 est le nom de ta liste déroulante, si c'est pas ca, remplace par son nom, tu l'as dans propriété name
    a = ""
    i = 1 'si tes valeurs commencent à la ligne ecris i=2, si c'est 3, i=3
    Do While Sheets("Feuil2").Cells(i, 1) <> "" 'cells(ligne, colonne), s ta colonne est 2 mets cells(i,2)
    If Cells(i, 1) = ComboBox1.Value Then 'idem pour le nom de ta liste déroulante
    a = 1
    End If
    Loop
    If a = "" Then
    Cells(i, 2) = ComboBox1.Value 'idem pour le nom de ta liste déroulante
    End If
    a = ""
    End Sub

    A chaque fois que tu feras un double clic sur ta liste déroulante, ca vérifiera si la donnée est présente et le cas échéant ca l'ajoutera
    1
    1. Melmex
       
      Merci beaucoup melanie1324! ^^

      (Désolé de répondre que maintenant)
      0
    2. Melmex
       
      J'ai une tite question par rapport à ton code :
      Je ne comprend pas trop à quoi sert cette partie, tu pourrais m'expliquer? (et du coup je ne sais pas quelle numero de colonne je dois mettre à la place du "2")

      Loop
      If a = "" Then
      Cells(i, 2) = ComboBox1.Value 'idem pour le nom de ta liste déroulante
      End If
      a = ""
      End Sub

      Merci
      0
    3. Melmex Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      Bon alors en fait, ça ne marche pas! ^^
      Je tape :
      Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      a = ""
      i = 1
      Do While Sheets("Feuil46").Cells(i, 2) <> ""
      If Cells(i, 2) = ComboBox1.Value Then
      a = 1
      End If
      Loop
      If a = "" Then
      Cells(i, 2) = ComboBox1.Value
      End If
      a = ""
      End Sub

      Et lorsque je test il y a un bug et ça surligne en jaune la ligne
      "Do While Sheets("Feuil46").Cells(i, 2) <> "" "

      et je n'arrive pas à comprendre pourquoi!
      0
    4. Melmex Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      Ah en fait je pense que c'est parce que j'essai de l'adapter sur le UserForm et il ne faut peut etre pas faire de la même manière?!
      0
  2. melanie1324 Messages postés 1561 Statut Membre 156
     
    Cette partie permet de balayer ton tableau.
    Si ta valeur est dans ton tableau alors a=1
    si ta valeur n'est pas dans ton tableau alors a=""
    si a="", on rajoute la valeur.

    Est-ce plus clair?

    Si ca ne l'est pas rapetisse la fenetre ou tu as ton code et appuies sur f8.
    Tu verras sur excel, ce que ca fait.
    0
    1. Melmex Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      Si, Merci Mélanie, c'est plus clair.
      Donc en fait je met pareil dans chacun des "cells(1,2)".

      (PS: je t'ai envoyé un mail avec un autre problème de liste déroulante, je ne sais pas si tu as vu. Si tu pouvais m'aider j'apprecierais vraiment :/)
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    si ta liste ne comporte pas de trous
    la liste commence dans cette démo en C2 feuille2
    ton combo en feuille1

    chaque que tu ajoutes ou modifies une donnée dans la liste, le combo est mis à jour

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim nbre As Byte
    If Not Intersect(Target, Range("liste")) Is Nothing Then
    nbre = Application.CountA(Range("liste"))
    Feuil1.ComboBox1.ListFillRange = "feuil2!$C$2:$C$" & nbre + 2
    End If
    End Sub


    pour installer la macro:
    copier cette macro
    clic droit sur l'onglet de la feuille2 (où il y a la liste)
    visualiser le code
    coller
    0
    1. Melmex Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Michel, :)

      Merci pour ta réponse!

      Et si je met cette ComboBox1 dans un userform il faudrait modifier quoi dans ton code pour l'adapter?
      Merci
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Tout dépend si ta liste peut être modifiée ou non après le lancement de l'userform et avant unload.

      ici le combo propose les éléments présents dans ta liste au lancement de l'userform ( il n'est plus nécessaire de garder un nom à la liste
      toujours si ta liste n'a pas de trous!

      Private Sub UserForm_Initialize()
      
      For lig = 2 To Feuil2.Range("C2").End(xlDown).Row
           ComboBox1.AddItem Feuil2.Cells(lig, "C")
      Next
      End Sub
      0
    3. Melmex Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      Comment peut-on savoir si elle peut être modifié ou non après le lancement de l'UserForm?
      Si je ne donne pas de nom à la liste comment la comboBox va chercher les nom de la liste?

      Lorsque je tape ce code et que je lance le UserForm pour tester :

      Private Sub UserForm_Initialize()
      For lig = 1 To Feuil46.Range("B1").End(xlDown).Row
      ComboBox1.AddItem Feuil46.Cells(lig, "B")
      Next
      End Sub

      Il y a un bug. il y a UserForm1.show surligné en jaune alors que sans ce code il n'y a pas de problème.
      0
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Il y a un bug.
      J'avais testé avant de t'envoyer ce bout de code: c'était OK

      Comment peut-on savoir si elle peut être modifié ou non après le lancement de l'UserForm?

      Il faut que un de tes codes fasse une modif directement ou indirectement à partir de l'userform puisque ce dernier a pris la main
      0
    5. Melmex Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      Il ne faudrait pas le mettre ailleurs ce code? ou pas pour "initialize" mais un autre truc ?
      0