IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[XL-2010]Manipulation de liste déroulante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    Bonjour,
    voici mon problème, j'ai créé un formulaire avec une liste déroulante (qui prend sa source depuis un fichier excel). J'aimerai que lorsque l'on click sur un bouton, un label soit créé dans mon formulaire avec comme texte la valeur que l'utilisateur a choisis dans la liste déroulante (ou plus simplement je pense une seconde liste déroulante avec toutes les valeurs sélectionnées).
    Ni arrivant pas, j'ai actuellement stocker dans un tableau toutes les valeurs que l'utilisateur à choisis dans la liste déroulante afin de créer une boucle plus facilement en ayant des variables dynamiques.



    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Dim i1 As Long
    Dim i As Integer, j As Integer
    Dim Tableau() As String
    Option Explicit
     
    Private Sub bt_ajouter_Click()
     
        If i1 = 0 Then
     
            'Définit le type de données pour le tableau.
            'Dim i As Integer, j As Integer
     
            'Définit la taille du tableau
            i = 30
            ReDim Tableau(i)
     
            'Alimente les éléments du tableau
            j = 0
            Tableau(j) = Me.zl_article.Value
            j = j + 1
     
            'Boucle sur les éléments du tableau
            For j = 0 To i1
                MsgBox Tableau(j)
            Next j
            i1 = i1 + 1
        Else:
            Tableau(j) = Me.zl_article.Value
            j = j + 1
     
            'Boucle sur les éléments du tableau
            For j = 0 To i1
                MsgBox Tableau(j)
            Next j
            i1 = i1 + 1
        End If
    End Sub
    Donc est-il possible de masquer dans la liste déroulante les valeurs qui ont déjà été sélectionnées, sans les supprimer du fichiers excel ?
    Et de créer une liste déroulante ou des labels à partir des valeurs contenues dans un tableau ?

    Merci de votre aide !

    Personne ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Bonjour sasafca,

    Ds mon modèle un userform et 2 listbox, mais tu dois pouvoir modifier par des combobox! Bien que dans ce cas 2 listbox doivent être préférables!

    Donc voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If Listbox1 = "" Then Exit Sub
    '*******
     
     
    'ListBox2.AddItem 'ajout d'une ligne
    'ListBox2.List(ListBox2.ListCount - 1, 0) = ListBox1.Text
    ListBox2.AddItem Listbox1
    On Error GoTo fin1
    If Listbox1.List(Listbox1.ListIndex, 0) <> "" Then
     
    Listbox1.List(Listbox1.ListIndex, 0) = ""
    Listbox1.RemoveItem Listbox1.ListIndex
     
    End If
     
    fin1:
    End Sub
     
     
     
    Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If ListBox2 = "" Then Exit Sub
    '*******
     
    'ListBox1.AddItem 'ajout d'une ligne
    'ListBox1.List(ListBox1.ListCount - 1, 0) = ListBox2.Text
    Listbox1.AddItem ListBox2
    On Error GoTo fin1
    If ListBox2.List(ListBox2.ListIndex, 0) <> "" Then
     
    ListBox2.List(ListBox2.ListIndex, 0) = ""
    ListBox2.RemoveItem ListBox2.ListIndex
     
    End If
     
    fin1:
    End Sub
     
     
    Private Sub UserForm_Initialize()
     ' charge ta listbox1 sans doublon sur feuil1 colonne a
    Dim MonDico As Object, Cellule As Range
     
      Set MonDico = CreateObject("Scripting.Dictionary")
          For Each Cellule In Sheets("feuil1").Range("a2:a60000")
          If Not MonDico.Exists(Cellule.Value) Then MonDico.Add Cellule.Value, Cellule.Value
          Next Cellule
            Listbox1.List = MonDico.Items
            MonDico.RemoveAll
    End Sub
    donc il est possible de faire passer par dblclick d'une listbox à l'autre !

    Cordialement,

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    Bonjour jijie,

    merci pour ta réponse, cependant je viens de la tester et elle ne fonctionne pas. Lorsque je double clique sur la liste1 pour ajouter un item dans l'autre liste, un message d'erreur apparait:

    Erreur d'éxecution '-2147352571 (80020005)':
    Type mismatch

    sur la ligne quand je débogue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListBox2.AddItem ListBox1
    j'ai essayé ListBox1.value mais ça fait pareil...

    Comment régler ce petit problème ?

    Merci

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    et la :

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Par défaut
    C'est bien mieux merci beaucoup !!

    Juste par curiosité, si j'aurai voulu mettre deux colonnes associées comment aurai-je pu faire ?

    Exemple parce que je ne sais pas si j'ai été clair:

    Colonne A Colonne B
    Fraise 2€
    Banane 1€


    et dans la liste on aurait:
    Fraise - 2€
    Banane - 1€

    Car j'ai testé et avec le code actuel ça fait:
    Fraise
    2€
    Banane
    1€

    Et lorsqu'un double clique on a une erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox2.AddItem ListBox1.Value
    Le type ne correspond pas


    Encore merci jijie !!

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    jijie
    1° il serait plus interessant de boucler sur un tablo plutot que les cellulespar rapport au nombre important de ligne (rapidité)
    2° il n'est pas necessaire de tester l'existance le dictionnaire le fait tout seul(n'accepte pas les doublons )
    3° plutot que de boucler jusqua la ligne 6000 on s'arretera a la derniere utilisée pas la peine de descendre tout en bas si c'est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
     ' charge ta listbox1 sans doublon sur feuil1 colonne a
    dim MonDico As Object, Cellule As Range
     with Sheets("feuil1")
    Set MonDico= CreateObject("Scripting.Dictionary")
            tablo = .Range("A2:C" & .Range("A" & Rows.Count).End(xlUp).Row).Value
            For Each elem In tablo
                MonDico.Item(elem) = ""
            Next elem
           Listbox1.List = MonDico.keys 'ou  MonDico.Items 'comme tu veux 
        End With
    set mondico=nothing'on vide pas le dico on vide la variable tout court 
    end sub
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. manipulation des liste déroulantes
    Par erlerwade dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2012, 02h04
  2. [AC-2010] Conversion liste déroulante access 2003 à 2010
    Par gio286 dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 22/07/2011, 15h58
  3. [AC 2010]Zone de liste déroulante
    Par zoltix dans le forum IHM
    Réponses: 2
    Dernier message: 01/08/2010, 11h40
  4. De la manipulation des listes déroulantes
    Par Herode dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/11/2007, 17h55
  5. manipulation liste déroulante
    Par grinder59 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/12/2005, 23h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo