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 :

Double clic pour ouvrir une listbox et sélection intempestive


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut Double clic pour ouvrir une listbox et sélection intempestive
    Bonjour à tous,
    Je rencontre régulièrement le problème suivant et je n'ai jusqu'alors pas trouvé de solution :

    Mon classeur Excel se compose de la manière suivante :
    - Je double clic sur une "cellule A"
    - Un UserForm s'ouvre avec une Listbox et un Bouton Ok
    - Je peux sélectionner plusieurs ligne de ma Listbox et en pressant Ok, ma cellule A va se remplir avec les valeurs sélectionnées dans ma Listbox.
    - Si je refais un double clique sur ma cellule A, alors la listbox surlignera en bleue les choix précédemment sélectionné à l'étape précédente (correspondant donc aussi au contenu de ma cellule)
    - Je peux alors les sélectionner/dé-selectionner pour ajouter/enlever des éléments à ma cellule.

    Mon problème est le suivant :
    Lorsque je double clic sur ma cellule A, SI l'userForm s'ouvre devant ma cellule A alors cela sélectionne automatiquement la première ligne de la Listbox PLUS la ligne se trouvant sous ma souris lors du double clic.

    Nom : 1.png
Affichages : 1828
Taille : 30,3 Ko
    Sur l'exemple ci-dessous :
    - je double clique sur la cellule qui se trouve à l'exacte position du pointeur de ma souris sur l'image ci-dessus (la cellule est donc sous l'Userbox puisque celui-ci s'est ouvert correctement)
    - mon Userform s'ouvre et cela sélectionne automatique le 1er élément plus celui se trouvant sous mon pointeur alors que dans ce cas aucune ligne de ma Listbox ne devrait être sélectionné

    Voilà j'espère avoir été clair, merci par avance de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Il faudrait voir ton code pour mieux comprendre.
    Comment codes-tu le double-click ?
    Comment fermes-tu le Userform ? Hide ou Unload ?
    Comment inscris-tu tes données quand tu cliques le bouton OK ?

    Sur l'image que tu fournis, tu dis que les items de la listbox ne devraient pas être sélectionnés.
    Il n'y avait donc aucune donnée dans ta cellule ? c'est ça ?

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bonjour,
    Je ne vais pas résoudre le problème, mais j'essaie de trouver une explication à ce qu'il se passe.
    J'imagine que tu as codé avec un evenement BeforeDoubleClick ? Or comme le dit son nom, les actions qui sont codées dans la macro BeforeDoubleClick s'effectuent avant de prendre en compte le double clique.
    Donc d'abord tu ouvres le userform et ensuite Excel prend en compte ton double clique, donc il sélectionne ce qu'il y a sous ta souris.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    J'ai fais un exemple simple qui devrait répondre à toutes vos questions :
    - Créer un nouveau classeur Excel
    - Feuil1 : dans les cases A1:A5 taper a,b,c,d,e
    Nom : a.png
Affichages : 1554
Taille : 1,9 Ko

    - Dans le code VBA correspondant à la feuille1 taper le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Load UserForm1
    UserForm1.Show
    End Sub
    Nom : b.png
Affichages : 1588
Taille : 11,8 Ko

    - Créer un Userform : UserForm1 (nom par défaut) avec une Listbox : ListBox1 (nom par défaut)
    Nom : c.png
Affichages : 1617
Taille : 11,3 Ko

    - Ajouter le code suivant à la listbox que vous venez de créer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
    UserForm1.ListBox1.MultiSelect = fmMultiSelectMulti
    ActiveWorkbook.Names.Add "List_Box", "=" + Feuil1.Name + "!R1C1:R5C1"
    UserForm1.ListBox1.RowSource = "List_Box"
    End Sub
    Nom : d.png
Affichages : 1602
Taille : 12,8 Ko

    Maintenant pour tester le problème retourner dans le classeur à la feuil1.
    Un double click permet de lancer le formulaire, placez votre curseur de façon à ce que la liste s'ouvre dessus comme sur l'image suivante.
    Nom : e.png
Affichages : 1611
Taille : 64,2 Ko

    Maintenant double cliqué et vous verrez que deux éléments sont sélectionné...
    Nom : f.png
Affichages : 1600
Taille : 80,3 Ko

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    C'est effectivement très bizarre...
    C'est la 1ere fois que je vois ça.

    Tu pourrais toujours tricher un peu en décalant le Userform
    Quelque chose dans le genre de ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Cancel = True
        UserForm1.StartUpPosition = 0
        UserForm1.Left = Application.Left + ActiveCell.Left + ActiveCell.Width
        UserForm1.Top = 200
        UserForm1.Show
    End Sub

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    J'y avais déjà pensé mais ici c'est juste un exemple mon formulaire est bcp trop grand pour pouvoir l'écarter de la feuille avec cette méthode...

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Je ne vois pas d'autres solutions que d'effacer tous les items de la listbox avant de les sélectionner, au besoin, avec le contenu de ta cellule (Target)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    En attendant de trouver une meilleure solution j'ai simplement mis un UserForm avec deux boutons : "Ok" et "Annuler" qui dit "Attention le formulaire va apparaître"
    Ainsi le double clic se fait sur cet UserForm qui ne sert à rien du tout, sauf de bouclier à double clic si on peut dire... "OK" permet de lancer l'UserForm avec ma liste sélectionnable et "Annuler" ferme tous les UserForm.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Dans le même ordre d'idée, ce pourrait être un MsgBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim Rep As Integer
     
        Cancel = True
     
        Rep = MsgBox("Ouvrir le formulaire?", vbYesNo, "")
        If Rep = vbYes Then UserForm1.Show
    Ça permet de répondre Oui avec la barre d'espacement (le oui étant par défaut) ou la lettre O et de fermer avec N

  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
    bonjour

    je pense qu'il y a conflit entre "listbox" et range("listbox")selon les versions Excel ce ne doit pas être possible de l'écrire comme tu l'écris
    en tout cas chez moi ne n'est ce soucis
    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
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Patrick, je n'utilise pas sa méthode, mais j'arrive à voir le problème.

    Dans le UF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        Me.ListBox1.List = Range("A1:A5").Value
    End Sub
    Dans la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Cancel = True
        UserForm1.Show
    End Sub
    Maintenant, assure-toi de double-cliquer une cellule qui va se retrouver derrière cette listbox au moment de l'affichage
    Edit: j'ai ajouté le Cancel = True que j'avais oublié en copiant...

  12. #12
    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
    ok je vais tester
    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

  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 re
    en effet ca le fait
    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
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonsoir,
    Je vais sans nul doute dire une bêtise, mais désinhiber l'événement Click de la ListBox pourrait peut être solutionner le problème...

    Dans un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public DontClic As Boolean
    Le code de l'événement Worksheet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Cancel = True
        DontClic = True
        UserForm1.Show
        DontClic = false
    End Sub
    Et, dans le module de l'UserForm, l'événement Clic de la ListBox (nommée ici ListBox1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub ListBox1_Click()
        If DontClic Then Exit Sub
        'reste d'un éventuel code
    End Sub

  15. #15
    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
    pijaku
    non ca le fait quand meme

    ta variable sort de évènement click et empêche le reste du code dans l'évènement de s'exécuter mais la sélection se fait quand même
    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

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Ce problème n'est pas engendré sur Excel 2007.
    Quelle est ta version ?

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Je suis sous Excel 2010.

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    constaté sur 2010, pas d'explication non plus.
    On peut s'en affranchir avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Activate()
        UserForm1.ListBox1.Visible = True
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        UserForm1.ListBox1.Visible = False
    End Sub
    .enabled n'est pas suffisant apparemment
    eric

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Salut Eric, si j'ai bien compris ton msg :

    Dans L'UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub UserForm_Initialize()
    ListBox1.List = Range("A1:A5").Value
    End Sub
    '''''''''''''''''''''''''''''''Script de ERIC''''''''''''''''''''''''''''''''''''
    Private Sub UserForm_Activate()
    UserForm1.ListBox1.Visible = True
    End Sub
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    UserForm1.ListBox1.Visible = False
    End Sub
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dans la feuil1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    UserForm1.Show
    End Sub
    Malheureusement, ça ne fonctionne pas... Ou alors j'ai pas compris ton msg
    Nom : a.png
Affichages : 1509
Taille : 10,4 Ko

  20. #20
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Oui, c'est exactement ça.
    Ca a suffit chez moi. Mon proc n'est plus tout jeune et sans doute pas bien rapide, peut-être que ça joue.
    Tente en ajoutant une tempo avant le .Visible = True pour retarder son activation.
    Le problème semble être qu'il reçoit et traite les clics comme s'il n'avait pas encore vidé la pile des événement (enfin j'imagine..)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Double clic pour ouvrir un lien ?
    Par gantec dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/05/2011, 11h55
  2. visualiser un PDF : double clic pour ouvrir le fichier
    Par ETL68350 dans le forum Access
    Réponses: 2
    Dernier message: 07/04/2010, 14h28
  3. Réponses: 1
    Dernier message: 02/10/2009, 01h17
  4. [VB.NET] Problème pour alimenter une listbox.
    Par gueguen23 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/01/2005, 15h05
  5. API pour ouvrir une BD Access
    Par GofAcid dans le forum Access
    Réponses: 2
    Dernier message: 15/12/2004, 20h25

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