Bonjour,
Je souhaitais détecté l'action "glisser une cellule" dans mon projet excel, ce que j'ai fait en gérant les évènements 2 change puis1 selectionChange
Dans le premier évènement change, je regarde si la cellule d'origine est différente de la cellule de destination.
Si oui, il s'agit d'un glisser, et je fais ce que j'ai à faire (undo pour récupérer les anciennes valeurs, puis traitement).
Cela marche bien, sauf que récemment j'ai constaté que mon traitement ce déclenchait lorsque j'utilisais le pinceau (déclenche 1 change et 1 selectionChange).
Le premier change a aussi une cellule d'origine et une cellule de destination différente, donc il déclenche le traitement et je ne le veux pas.
Voici (simplifié), comment je procède:
Dans une feuille Excel, je mets ce code:
Ce que je voudrais, ce serait un moyen de détecter si j'utilise le pinceau (variable récupérant le contenu du pinceau, si ça existe).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Worksheet_Change(ByVal Target As Range) ' Si l'origine et la destination sont différentes If Target.Address <> prevCel.Address Then MsgBox "Il y a un glissé" ' Traitement End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set prevCel = Target End Sub
Ceci, me permetterai de garder mon code en rajoutant simplement une condition.
Sinon, je devrait tout modifier, et ce ne sera pas évident à cause du traitement.
Sinon une solution serait:
Mais le traitement que j'ai fait complique énormement la chose. Donc, s'il existe un moyen de détecter les peintures...
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 Dim prevCel As Range Dim intcountEvent As Integer Dim bGlisserPeinture As Boolean Private Sub Worksheet_Change(ByVal Target As Range) ' On compte les passsages dans change intcountEvent = intcountEvent + 1 ' Si l'origine et la destination sont différentes on indique un glisser où une peinture If Target.Address <> prevCel.Address Then bGlisserPeinture = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set prevCel = Target ' Si peinture If intcountEvent = 1 And bGlisserPeinture = True Then MsgBox "il y a eu peinture" ElseIf intcountEvent = 2 And bGlisserPeinture = True Then MsgBox "il y a eu glisser" End If intcountEvent = 0 bGlisserPeinture = False End Sub
Partager