1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Plage As Range
Dim Plage2 As Range
Dim NewTruc
'Vérifie qu'une seule cellule est sélectionnée et si adres <> ""
If Target.Count > 1 Or adres = "" Then Exit Sub
'On change de cellule : Si elle était dans plage ou plage2
'on mémorise la valeur
Set Plage = Range("I4:I700")
Set Plage2 = Range("C4:C700")
If Not Application.Intersect(Target, Plage, Plage2) Is Nothing Then
NewTruc = Range(adres).Value
End If
'Vérifie que l'adres et le contenu de la cellule a changé
'-> Si la donnée et l'adresse n'ont pas changé, on sort
'Explication :
'1 - On est dans la cellule, donc on n'a pas la nouvelle valeur
'2 - la donnée n'a pas changé, on n'a rien à faire
If Not (adres <> Target.Address And truc <> Target) Then Exit Sub
'Si les deux ont changé, c'est qu'on est sorti de la cellule et
'que la donnée a été modifiée. Donc, on traite, où qu'on soit
Application.ScreenUpdating = False
Application.EnableEvents = False
'Selon que la cellule qui a changé est de l'une ou l'autre plage
'on lance la macro correspondante
If Not Application.Intersect(Range(adres), Plage) Is Nothing Then
'Lance la macro pour copier le produit choisi
MsgBox "Donnée = " & truc
'Incorporer_Ventes
ElseIf Not Application.Intersect(Range(adres), Plage2) Is Nothing Then
MsgBox "Donnée = " & truc
'Incorporer_Ventes2
End If
'On sait que la valeur a changé, on affecte la nouvelle valeur à truc
truc = NewTruc 'ou = Range(adres).Value
'adres ne change pas ici
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub |
Partager