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 :

Wosksheet_Selection_Change empiète sur Worksheet_BeforeDoubleClic [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut Wosksheet_Selection_Change empiète sur Worksheet_BeforeDoubleClic
    Bonjour,

    Ça va être évident pour vous, mais ça n'est l'est pas (encore) pour moi.

    Ci-après un "condensé" de code, en espérant qu'il soit suffisant pour vous exposer le problème.
    Le double clic sur une cellule du Range défini n'est manifestement pas actif et je pense que c'est lié au Worksheet_SelectionChange.
    Si c'est bien ça, y a-t-il un moyen de "forcer" l'évènement BeforeDoubleClic quand on sélectionne une cellule qui vient de passer par le SelectionChange ?
    En espérant que l'exposé du problème soit clair...
    Merci d'avance pour vos lumières,
    Cdt

    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
    Private Sub Worksheet_selectionChange(ByVal Target As Range)
     
        Select Case Target.Address(0, 0)
            Case Is = "W16"
                'blabla
            Case Is = "W28"
                'blabla
        End Select
    End Sub
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
        Set rg = Range("A1:Z10")
        If Not Intersect(rg, Target) Is Nothing And Target.Count = 1 Then
            Target.ClearContents
        End If
        Cancel = True
    End Sub

  2. #2
    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

    Je ne vois pas du tout ce que tu sembles vouloir "dénoncer".
    L'évènement BeforeDoubleClick intervient bel et bien avant l'évènement SelectionChange et les instructions de l'évènement SelectionChange ne sont pas exécutées si double clic.

    Il est normal que l'exemple que tu montres (tel qu'écrit), n'efface pas le contenu de la cellule si ton double click est fait en cellule W16. Et pour cause : la cellule W16 n'est pas dans la plage A1:Z10 que tu soumets à l'évènement BeforeDoubleClick.
    Idem en ce qui concerne la cellule W28

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Bonjour,

    W16 et W28 sont des "boutons" qui lancent des procédures. Ils ne font pas partie de la zone concernée par l'effacement.

    Si je mets un STOP en tête de "-- SelectionChange" et de "-- BeforeDoubleClic" et je je fais un double clic, c'est "-- SelectionChange" qui détecte le premier.
    A présent, je pense que c'est la "liste déroulante" qui s'ouvre dans chaque cellule à effacer qui est (pourrait) être responsable de ce problème.

    Si je clic sur la cellule, le menu s'ouvre et il me semble que c'est normal que le SelectionChange soit sollicité.

    Cdt

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    W16 et W28 sont des "boutons" qui lancent des procédures
    ce n'est pas ce que montre ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select Case Target.Address(0, 0)
        Case Is = "W16"
            'blabla
        Case Is = "W28"
            'blabla
    End Select
    Si je mets un STOP en tête de "-- SelectionChange" et de "-- BeforeDoubleClic" et je je fais un double clic, c'est "-- SelectionChange" qui détecte le premier
    Si tu change de cellule, effectivement, c'est SelectionChange() qui est exécuté en premier et pour cause, il faut bien sélectionner la cellule avant de faire un double clic dessus mais si tu fait un double clic sur la cellule active, seule BeforeDoubleClick() sera exécutée !
    ...y a-t-il un moyen de "forcer" l'évènement BeforeDoubleClic...
    tu peux mais ça n'a aucun intérêt car dans ce cas, autant mettre les instructions dans SelectionChange() mais bon, voilà comment tu peux appeler la procédure :
    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 Worksheet_selectionChange(ByVal Target As Range)
     
        Select Case Target.Address(0, 0)
            Case Is = "W16"
                'blabla
            Case Is = "W28"
                'blabla
        End Select
     
        Worksheet_BeforeDoubleClick Target, True
     
    End Sub
    Je ne pense pas que la présence d'une liste déroulante (issue de Validation des données) pose problème !
    Il faudrait peu être montrer le code en entier ou poster un petit classeur exemple.

  5. #5
    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
    Voilà qu'apparaissent tout d'un coup un "bouton" et une "liste déroulante" alors qu'il n'était jusqu'à présent question que de cellules et de leurs évènements (ce que corrobore d'ailleurs le code montré).

    Il semble qu'il y ait là une confusion totale entre :
    - bouton et cellule
    - évènement click d'un bouton et évènement click d'une cellule
    - évènement doubleclick d'une cellule et évènement click d'un bouton

    Et qu'est cette "liste déroulante" dont tu parles ?
    Et qu'est exactement ce bouton ? Et une macro lui est-elle affectée ? Si oui : à montrer dans sa totalité (depuis "sub" jusqu'à "end sub" inclus)

    Un chat n'y retrouve plus ces petits, dans cet "exposé"-là d'une situation ...

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Bonjour,

    Unparia

    J'ai mis "bouton" (avec guillemets). Ce sont des cellules, qui lorsqu'on clique dessus, lancent des Sub.

    AMHA ces "boutons" ne sont pas à l'origine du problème mais comme ils apparaissent dans -- SelectionChange :

    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
    Private Sub Worksheet_selectionChange(ByVal Target As Range)
     
        Select Case Target.Address(0, 0)
     
            Case Is = "W2"
                Call MasquageLignes
     
            Case Is = "W3"
                Call AffichageLignes
     
            Case Is = "W4"
                Call AfficheQuotas
     
            Case Is = "W5"
                Call AfficheTest
     
            'etc.
     
        End Select
    End Sub
    ... je les ai évoqués car -- SelectionChange se terminent par "End Select". J'ai donc imaginé qu'une fois la cellule désélectionnée (par le End Select), il était normal que le -- BeforeDoubleClick ne fonctionne pas.

    "menu déroulant" = "liste de validation de données" ?! Si je clique sur la cellule, une liste de validation s'affiche.

    Theze,

    Merci pour ta proposition. Cela semble ne pas fonctionner.

    Je viens de faire un essai de DoubleClic après avoir inhibé tout le code de -- SelectionChange. Le problème reste identique.

    En définitive, puis-je utiliser le code suivant sur une cellule qui comporte un "menu déroulant" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
        Set rg = Range("A1:Z100")
        If Not Intersect(rg, Target) Is Nothing And Target.Count = 1 Then
            Application.EnableEvents = False
            Target.ClearContents
            Target.Interior.ColorIndex = 2
            Application.EnableEvents = True
        End If
        Cancel = True
    End Sub
    En l'état, je pense que non car dès lors que je sélectionne la cellule, c'est la liste qui va s'afficher !

    Cdt

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

Discussions similaires

  1. Canvas qui empiète sur un Grid
    Par Kadelka dans le forum Silverlight
    Réponses: 2
    Dernier message: 16/09/2009, 15h49
  2. Menu qui empiète sur le bas sous Mozilla et pas sous IE
    Par guigui5931 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 09/07/2007, 17h34
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [Kylix] Kylix embarqué sur PDA ?
    Par Anonymous dans le forum NoSQL
    Réponses: 10
    Dernier message: 29/11/2002, 13h59
  5. F.A.Q, Doc, cours, tutoriels sur JBuilder
    Par Ricky81 dans le forum JBuilder
    Réponses: 0
    Dernier message: 14/03/2002, 15h28

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