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:
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
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).

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:
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
Mais le traitement que j'ai fait complique énormement la chose. Donc, s'il existe un moyen de détecter les peintures...