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 :

Amélioration de mon UserForm (avec des flèches)


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut Amélioration de mon UserForm (avec des flèches)
    Bonjour,

    Je viens encore une fois ici pour essayer d'améliorer mon travail.

    Je vais essayer d'être le plus clair possible.
    J'ai actuellement un UserForm avec deux listes en cascade (par exemple pays puis région) et un bouton qui lance le remplissage d'un tableau suivant les selection sur la seconde liste.
    Or pour l'instant je ne peut pas choisir des régions de pays différent.
    Ce que j'aimerais donc c'est avoir deux boutons flèches gauche/droite qui me permettrait de remplir/déremplir une troisième liste qui contiendrait alors toutes les régions selectionnées peu importe le pays.
    Voir l'image ci-dessous pour plus de clarté.
    Nom : userform.png
Affichages : 1012
Taille : 14,5 Ko

    Si quelqu'un avait un lien vers un toto, exemple qui fait la même chose ou similaire, ou la gentillesse de m'expliquer comment je pourrais faire (Si c'est possible de la faire bien sur), je lui en serait particulièrement reconnaissant.

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi

    En attachement un petit exemple rapide
    Classeur1.xls

    Tu va voir c'est extrêmement simple

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Merci, effectivement ça a l'air beaucoup moins compliqué que ce que je pensais.
    Je devrais pouvoir adapter ton code pour que ça marche avec une selection multiple et faire la flèche dans l'autre sens sans trop de problème.

    Merci encore.

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    En effet, sélection multiple, il faut juste rajouter un parcours de la sélection lors de l'ajout dans l'autre liste.

    Tu peux aussi affiner avec la suppression des éléments de la liste de départ lors du transfert vers la liste de destination ou au moins vérifier qu'il ne sont pas déjà présent pour éviter les doublons

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    La suppression ne me parait pas très utile, par contre éviter les doublons c'est intéressant y a t il plus simple que de faire pour chaque ajour une boucle sur tous éléments déjà présents pour vérifier si il y est déjà?

  6. #6
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Il existe une API qui permet de chercher une valeur dans une listbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long   
    Private Const LB_FINDSTRINGEXACT = &H1A2
     
    Dim index as Integer
    Dim searchString as String
    searchString = "Target" & Chr(0)
     
    index = SendMessage(ListBox1.hWnd, LB_FINDSTRINGEXACT , -1, searchString)

  7. #7
    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
    éviter les doublons sans boucle dans une List box c'est pas possible
    de tout façon pour la remplir a partir d'une autre List box il faut bien boucler sur les item sélectionnés c'est le B a Ba

    je te propose donc afin d'éviter les doublons cet exemple qui :

    1° sélection multiple dans chaque liste box
    2° les bouton flèche gauche et droite font respectivement la même chose d'une liste box a l'autre (vise et versa )
    3° les item transféré dans une List box sont supprimés de la liste box source (vise et versa)
    4° on peut alimenter une liste box a partir de l'autre en plusieurs fois c'est pas un soucis c'est prévu pas de doublons

    en prime cadeau par c'est un bon jour la liste qui viens d'être alimenté ou réalimenté se met en ordre alphabétique
    allez assez de blablabla démo en image et pièce jointe
    Nom : demoingto64 in-out.gif
Affichages : 1043
Taille : 441,2 Ko
    Fichiers attachés Fichiers attachés
    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

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Il existe une API qui permet de chercher une valeur dans une listbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long   
    Private Const LB_FINDSTRINGEXACT = &H1A2
     
    Dim index as Integer
    Dim searchString as String
    searchString = "Target" & Chr(0)
     
    index = SendMessage(ListBox1.hWnd, LB_FINDSTRINGEXACT , -1, searchString)
    Je ne sais pas ce que c'est qu'une API et de toute façon je ne comprend rien au code.
    Mais merci quand même

    Citation Envoyé par patricktoulon
    bonjour
    éviter les doublons sans boucle dans une List box c'est pas possible
    de tout façon pour la remplir a partir d'une autre List box il faut bien boucler sur les item sélectionnés c'est le B a Ba

    je te propose donc afin d'éviter les doublons cet exemple qui :

    1° sélection multiple dans chaque liste box
    2° les bouton flèche gauche et droite font respectivement la même chose d'une liste box a l'autre (vise et versa )
    3° les item transféré dans une List box sont supprimés de la liste box source (vise et versa)
    4° on peut alimenter une liste box a partir de l'autre en plusieurs fois c'est pas un soucis c'est prévu pas de doublons

    en prime cadeau par c'est un bon jour la liste qui viens d'être alimenté ou réalimenté se met en ordre alphabétique
    allez assez de blablabla démo en image et pièce jointe
    Merci pour cet autre exemple mais pour mon problème actuel je n'ai pas besoin de toutes ces fonctionalités.
    Pour des raisons de logique et de clarté pour l'utilisateur par rapport au rest de mon userform, je ne veut pas suppprimés les items selectionnés, par contre je souhaite quand même gérer les doublons, j'ai essayé le code suivant, mais bien sur il y a une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = ListBox4.ListCount - 1 To 1 Step -1
    MsgBox "i=" & i
        For j = i - 1 To 0 Step -1
     
            MsgBox "j=" & j
            'erreur sur la ligne en dessous'
            If ListBox4.List(i) = ListBox4.List(j) Then ListBox4.RemoveItem (i)
        Next j
    Next i
    "error 381: could not get the list property. invalid property array index"
    Donc si je comprends bien j'ai un i ou un j (plutot un j d'apres mes test) qui dépasse la taille de ma liste, mais je ne comprends pas pourquoi, puisque j'ai fait mes boucles "à l'envers" justement pour éviter le problème

  9. #9
    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 re
    tiens j'ai encore simplifié
    il y a qu'une fonction pour les deux list
    tu parle de clarté etc.... en supprimant l'item transféré tu n'a pas a gérer les doublons

    j'dis ca moi j'dis rien hein!!!!

    ensuite situ ne tiens pas a gérer l'ordre alphabétique tu peut supprimer les ligne a partir de la création de l'Object
    ce qui nous fera que moins de 10 ligne pour faire ce que tu demande
    on peut parler de clarté tant que tu veux je ne vois pas ce qui peut être plus clair par expérience

    imagine que ta liste fasse 10000 item (alimenté par une plage de cellule par exemple )
    pour tester tes doublons il faut tester tout les items de la liste réceptrice

    quand l'api je la connais très bien mais il faut savoir que depuis les version 64 d'office elle fonctionne très mal avec les hwnd.children j'entends par la que avec une fenêtre (en l'occurrence l'userform) oui
    mais avec un control (enfant de la fenêtre (userform) ca n'est pas fiable

    A bon entendeur



    voila le dernier code de mon exemplaire
    je ne vois pas ce qui peut etre plus simple
    code bouton droite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
       transfert ListBox1, ListBox2
    End Sub
    sub pour les deux boutons
    code bouton gauche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton2_Click()
        transfert ListBox2, ListBox1
    End Sub
    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
    Sub transfert(lisTout, lisTin)
    Dim i As Long, malist2 As Object
        For i = lisTout.ListCount - 1 To 0 Step -1
            If lisTout.Selected(i) Then
                lisTin.AddItem lisTout.List(i)
            lisTout.RemoveItem i
            End If
        Next
         Set malist = CreateObject("System.Collections.ArrayList")
        For i = 0 To lisTin.ListCount - 1
    malist.Add lisTin.List(i)
    Next
    malist.Sort: lisTin.Clear
    For Each elem In malist
    lisTin.AddItem elem
    Next
    End Sub
    Private Sub UserForm_Activate()
    mylist = Array("toto", "robert", "jean", "frederic", "paul", "henry", "jacques", "serge", "armant", "luc", "gerard")
     
        ListBox1.List = mylist
    End Sub
    ca te va la clarté la ???????
    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

  10. #10
    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 re et oui l'erreur est simple
    re
    ton erreur est d'essayer de supprimer l'item dans une boucle imbriquée dans la boucle de l'item comparé
    bref on ne peut pas faire comme ca
    c'est pour ca que dans une boucle simple on commence par la fin
    mais toi tu a une seconde boucle dans la première donc après la première suppression les index I sont faux et ne correspondent plus a la réalité
    il te faut memoriser les index doublons de la boucle "j" dans une variable tableaux et apres etre sorti de la boucle i boucle sur le tablo


    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for z= ubound(tablo) to 0 
    listboxX.removeitem tablo(z)
    next
    demo

    imagine que tu a une liste avec
    toto
    titi
    toto
    grosminet

    et que tu fait deux boucle imbriqué comme tu la fait par i et j
    quand j arrive au dernier toto tu le suprimeet donc termine sa boucle par grosminet il n'y aplus que 3 item dans la liste
    mais maleureusement des le depart tu a dis a i d'aller jusqu'à 4 (le nombre d'item a la base(listcount-1)) donc forcement des que tu sort de j
    et que tu passe au i suivant.
    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

  11. #11
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    @patricktoulon : En effet Office x64 a à mon sens pas mal mis la pagaille...
    C'est pour cela que je n'installe que des Office x32 sur les postes de mon parc !

  12. #12
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Je pense qu'on s'est mal compris, je pas dis que ton exemple ou ton code n'était pas clair, au contraire il est très bien.
    C'est juste qu'il y a trop de fonctionalité pour mes besoins.

    Mon UserForm est un peu plus compliqué que juste deux listes où on change de place les items, par rapport a ce qui passe dans le reste du userform la suppression des items pourrait rendre confus certains utilisateurs du fichier. (notamment parce que ça ne correspond pas à ce qu'ils actuellement)

    De plus certaines listes sont recalculées dynamiquement en fonction des choix dans d'autres listes. Donc même si on les supprime les items pourraient revenir.

    C'est pour ça que je voudrais gérer les doublons sans utiliser la suppression des items.

    Edit: Merci pour avoir chercher l'erreur

    imagine que tu a une liste avec
    toto
    titi
    toto
    grosminet

    et que tu fait deux boucle imbriqué comme tu la fait par i et j
    quand j arrive au dernier toto tu le suprimeet donc termine sa boucle par grosminet il n'y aplus que 3 item dans la liste
    mais maleureusement des le depart tu a dis a i d'aller jusqu'à 4 (le nombre d'item a la base(listcount-1)) donc forcement des que tu sort de j
    et que tu passe au i suivant pof oh!!! il ny est plus a ben mince alors !!!
    Sauf que les boucles sont a l'envers donc i ne prend pas la valeur 4 mais 3 et il y a bien 3 item dans la liste

  13. #13
    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
    relis le post #10

    au départ tu a dit j'ai deux liste je veux envoyer ou faire revenir c'est bien ca

    apres tu dis que tu ne veux pas de doublons
    apres tu dis que tu veux pas supprimer les items transférés
    mais si tu fait revenir !!!! d'apres toi ca fait quoi ??
    et j'irais meme plus loin a quoi bon faire revenir puisqu'ils sont jamais parti tes items
    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

  14. #14
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Problème réglé
    Voilà le code que j'utilise pour le transfert d'une liste vers l'autre sans suppression et avec gestion des doublons
    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
    Private Sub droite_Click()
    For i = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) = True Then
                ListBox4.AddItem ListBox1.List(i)
        End If
    Next i
    For i = ListBox4.ListCount - 1 To 1 Step -1
        For j = i - 1 To 0 Step -1
            If ListBox4.List(i) = ListBox4.List(j) Then
                ListBox4.RemoveItem (i)
                Exit For
            End If
        Next j
    Next i
    End Sub

  15. #15
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    au départ tu a dit j'ai deux liste je veux envoyer ou faire revenir c'est bien ca

    apres tu dis que tu ne veux pas de doublons
    apres tu dis que tu veux pas supprimer les items transférés
    mais si tu fait revenir !!!! d'apres toi ca fait quoi ??
    et j'irais meme plus loin a quoi bon faire revenir puisqu'ils sont jamais parti tes items
    +1 d'ou mon exemple de départ avec juste un bouton dans un sens

    Edit : Pour une gestion des doublons dans besoin de reparcours des items, tu pourrais aussi maintenant un string dans lequel tu stock chaque valeur de la seconde liste.
    Et du coup avec InStr tu vérifie si la valeur est déjà présente.
    Bien sur séparer les valeur avec un caractère de séparation

  16. #16
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    au départ tu a dit j'ai deux liste je veux envoyer ou faire revenir c'est bien ca

    apres tu dis que tu ne veux pas de doublons
    apres tu dis que tu veux pas supprimer les items transférés
    mais si tu fait revenir !!!! d'apres toi ca fait quoi ??
    et j'irais meme plus loin a quoi bon faire revenir puisqu'ils sont jamais parti tes items
    Au départ je voulais savoir comment marche ce genre de boutons en général pour ensuite pouvoir l'appliquer au cas particulier qui m'intéresse.

    Et comme je l'ai dit à plusieurs reprise, le cas particulier en question c'est sans suppression d'item mais avec gestion des doublons.
    Je n'ai jamais parlé de faire revenir les items.

  17. #17
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Ce qui à créer la confusion c'est que tu voulais un bouton aller et un bouton retour.

    Quel est l'intérêt du bouton retour si tu ne fais pas un transfert bidirectionnel

  18. #18
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Le bouton "retour" sert a vider la liste de droite (mais sans remettre les items a gauche)

  19. #19
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Du coup dans ton cas en particulier il parait plus logique et intuitif que ce bouton s'appel supprimer et soit placé de tel manière que l'utilisateur comprenne immédiatement qu'il va supprimer une entrée dans la liste de gauche

    Pour le plaisir
    Illustration ce que j'ai évoqué plus haut :
    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
    Private remove1stList As Boolean
    Private remove2ndList As Boolean
    Private itemsIn1stList As String
    Private itemsIn2ndList As String
     
    Private Sub CommandButton1_Click()
        Dim i As Integer
     
        For i = ListBox1.ListCount - 1 To 0 Step -1
            If ListBox1.Selected(i) Then
                If InStr(itemsIn2ndList, ListBox1.List(i) & "|") = 0 Or itemsIn2ndList = vbNullString Then
                    ListBox2.AddItem ListBox1.List(i)
                    itemsIn2ndList = itemsIn2ndList & ListBox1.List(i) & "|"
                End If
     
                If remove1stList Then
                    itemsIn1stList = Replace(itemsIn1stList, ListBox1.List(i) & "|", "")
                    ListBox1.RemoveItem i
                End If
            End If
        Next
    End Sub
     
    Private Sub CommandButton2_Click()
        Dim i As Integer
     
        For i = ListBox2.ListCount - 1 To 0 Step -1
            If ListBox2.Selected(i) Then
                If InStr(itemsIn1stList, ListBox2.List(i) & "|") = 0 Then
                    ListBox1.AddItem ListBox2.List(i)
                    itemsIn1stList = itemsIn1stList & ListBox2.List(i) & "|"
                End If
     
                If remove2ndList Then
                    itemsIn2ndList = Replace(itemsIn2ndList, ListBox2.List(i) & "|", "")
                    ListBox2.RemoveItem i
                End If
            End If
        Next
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim i As Integer
     
        remove2ndList = True
     
        For i = 1 To 12
            ListBox1.AddItem MonthName(i)
            itemsIn1stList = itemsIn1stList & MonthName(i) & "|"
        Next
    End Sub
    Deux string qui contiennent les éléments de chaque listes séparer par |
    Lors de l'ajout ou de la suppression on vérifie si l'élément est présent dans le string de la liste de destination.

    Petit plus deux boolean pour gérer ou non la suppression dans chaque listes

    PS : On pourrait surement utiliser la propriété TAG de chaque liste pour gérer le string des items mais ayant un doute sur une possible limitation de longueur...
    Utiliser alors le tag au moins pour gérer l'activation ou non de la suppression

  20. #20
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un diagramme avec des flèches dans les deux sens
    Par raphz dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 5
    Dernier message: 24/01/2010, 10h27
  2. Trier mon planning avec des horaires
    Par jetset30 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/11/2009, 18h36
  3. Relier 2 listBox avec des flèches
    Par le_bono dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/10/2009, 17h04
  4. Déplacement de la fenetre avec des flèches
    Par MayOL69bg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 04/05/2007, 00h09

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