Microsoft 365 Evènements de feuille qui s'enchaînent... mais pourquoi ?

  • Initiateur de la discussion Initiateur de la discussion ThierryP
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ThierryP

XLDnaute Occasionnel
Bonjour le forum,

Je bute sur un truc étrange que je ne sais pas résoudre (sinon je ne serais pas là !!). Tout est dit dans le fichier et j'ai mis les macro WS_Change et WS_Selectionchange un peu simplifiées que j'utilise.
Ce que je souhaite, c'est afficher un message d'alerte si on sélectionne C1 : jusque là tout va bien 😉
Je modifie la valeur en C1, donc je passe dans le WS_Change, tout va encore bien ! Je désactive les évènements, je fais ma petite tambouille, je vais à la fin de la macro, là je réactive les évènements, je passe par End Sub, et c'est là que je ne comprends plus : Le WS_SelectionChange est activé, et comme je suis toujours sur C1, je revois le message.
Mais pourquoi je repasse dans le WS_SelectionChange ??? Et surtout, comment faire pour éviter ça ????
Merci d'avance à tous ceux qui jetteront un coup d'oeil à mon souci !!
 

Pièces jointes

Bonjour,

Ce que je souhaite, c'est afficher un message d'alerte si on sélectionne C1 : jusque là tout va bien 😉
Je modifie la valeur en C1, donc je passe dans le WS_Change, tout va encore bien ! Je désactive les évènements, je fais ma petite tambouille, je vais à la fin de la macro, là je réactive les évènements, je passe par End Sub, et c'est là que je ne comprends plus : Le WS_SelectionChange est activé, et comme je suis toujours sur C1, je revois le message.
Ca doit être un bug d'O365 car chez moi sous 2016 il n'y a pas ce problème : je repasse bien sûr par Selection_Change, mais c'est parce que la validation de la modification du contenu de C1 fait passer en C2, mais comme on passe en C2, le message ne se réaffiche pas.
 
Bonjour TooFatBoy,

Merci pour ton retour, j'avais comme l'impression d'avoir oublié le peu que je connais en VBA !! Mais finalement tu as le même comportement que moi, c'est juste que tu as choisi comme option de déplacer le curseur vers le bas et pas moi.
Du coup, la question reste ouverte : comment pallier ce comportement si pour quelque raison on veut que la sélection reste en C1 ?
Mais ton idée me va bien, je vais déplacer ma sélection, au moins je n'aurais pas de message !
 
Bonjour,

Je ne comprends pas comment interpréter cette instruction : If Target = Range("C1") Then
Donc on peut se placer sur n'importe quelle cellule (target), si cette cellule contient la même valeur que la cellule C1 alors on efface toutes les données ?
 
Bonjour,

Je ne comprends pas comment interpréter cette instruction : If Target = Range("C1") Then
Donc on peut se placer sur n'importe quelle cellule (target), si cette cellule contient la même valeur que la cellule C1 alors on efface toutes les données ?
Bonjour mapomme,

tu as tout à fait raison, mais j'ai pondu ça vite fait à titre d'exemple.... Il fallait lire if Target.address=range("C1").address ! mais ça ne change rien à la question !!
 
Décidément, ce n'est pas mon jour......
Ce que je voulais dire en plaisantant c'est que tu peux, comme on a dit en #4 et #5, essayer avec un booléen.

vaut mieux que j'arrête pour aujourd'hui 🙁
Meuh nan ! On va y arriver. 😉


Tu as dis que tu avais déjà utilisé le booléen, mais as-tu regardé le classeur de #4 pour voir, d'une part si ça te convient, d'autre part si on a procédé de façons identiques ?
 
Dernière édition:
Bonjour à tous,

Y en a qui cherchent vraiment à se compliquer la vie !!!
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$1" Then Range("D2:E4").ClearContents
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$C$1" Then _
        If MsgBox("Attention ! En modifiant cette cellule, vous allez effacer toutes les données", vbOKCancel) = vbCancel Then Range("A3").Select
End Sub

A+
 

Pièces jointes

Maintenant si l'on veut traiter le cas où "Déplacer la sélection après validation" est décochée il suffit d'envoyer une touche :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$C$1" Then Exit Sub
    If Not Application.MoveAfterReturn Then CreateObject("WScript.Shell").SendKeys "~" 'envoi de la touche <Entrée>
    Range("D2:E4").ClearContents
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$C$1" Then _
        If MsgBox("Attention ! En modifiant cette cellule, vous allez effacer toutes les données", vbOKCancel) = vbCancel Then Range("A3").Select
End Sub
Je vous laisse tester en décochant la case dans les Options avancées.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour