Bonjour,
L'événement worksheet_change est merveilleux mais je n'arrive pas à lui faire faire deux actions différentes selon si la cellule était vide ou non avant sa modification.
Est-ce que c'est faisable ?
Merci d'avance.
Bonjour,
L'événement worksheet_change est merveilleux mais je n'arrive pas à lui faire faire deux actions différentes selon si la cellule était vide ou non avant sa modification.
Est-ce que c'est faisable ?
Merci d'avance.
Bonsoir,
certainement avec plus d'indices pour pouvoir t'aider
bonne soirée
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sur si votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Bonjour,
Est-ce quelque chose comme ça que tu souhaites ?
Bon, tu devras adapter vu que je ne l'ai fait que pour tester sur la cellule A1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Not IsEmpty(Range("A1").Value) Then 'Ce que tu veux si la cellules n'est pas vide MsgBox "Remplie!" Else 'Le cas contraire MsgBox "Vide!" End If End Sub
En gros, si la cellule était vide avant la modification, tu auras une MsgBox avec marqué "Remplie!" qui apparaîtra. Dans le cas contraire, c'est "Vide!" qu'on verra.
Et hop, 2 actions différentesje n'arrive pas à lui faire faire deux actions différentes selon si la cellule était vide ou non avant sa modification
Bonne soirée !
EDIT : Ok, je viens de comprendre. Tu ne veux sûrement pas la remplir pour marquer "Remplie" et la vider pour marquer "Vide"... Mon code te dit seulement quel est l'état de la cellule après changement. Toi tu veux connaître l'état AVANT changement, me trompe-je ?
Bon, ça ne change rien au final. Je te propose donc :
temp est ici une variable globale qui garde en mémoire l'état de la cellule A1 avant changement. En gros, lorsque tu modifies la cellules A1, tu as
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 Dim temp As Boolean Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) MsgBox temp If Not IsEmpty(Range("A1").Value) Then 'Ce que tu veux si la cellules n'est pas vide MsgBox "Remplie!" temp = True Else 'Le cas contraire MsgBox "Vide!" temp = False End If End Subqui te donne l'état de la cellule avant et la Msgbox suivante qui te donne l'état de la cellule après.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Msgbox temp
Enjoy !
DeaD
Salut NATOU2 et le forumEt nous non plus, maisL'événement worksheet_change est merveilleux mais je n'arrive pas à lui faire faire deux actions différentes selon si la cellule était vide ou non avant sa modification.
si tu stockes la valeur de la cellule dans une variable globale à la sélection, tu peux la comparer après. Ce qui donne des macros dans ce style :À mettre dans le module ThisWorkBook
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Option Explicit Dim Tab_v() Private Sub Workbook_Open() '.... End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim x As Long If Sh.Name <> "nom de l'onglet concerné" Then Exit Sub ReDim Tab_v(1 To 2, 1 To Selection.Count) For x = 1 To Selection.Count Tab_v(1, x) = Selection.Cells(x) Tab_v(2, x) = Selection.Cells(x).Address(0, 0) Next x End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim x As Long Dim Cel As Range If Sh.Name <> "nom de l'onglet concerné" Then Exit Sub For Each Cel In Target For x = 1 To UBound(Tab_v, 2) If Cel.Address(0, 0) = Tab_v(2, x) Then If IsEmpty(Tab_v(1, x)) Then 'traitement si la cellule était vide ElseIf Tab_v(1, x) = Cel Then 'traitement si la cellule n'a pas été modifiée Else 'traitement de la dernière possibilité End If End If Next x Next Cel End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Dim x As Long If Sh.Name <> "nom de l'onglet concerné" Then Exit Sub ReDim Tab_v(1 To 2, 1 To Target.Count) For x = 1 To Target.Count Tab_v(1, x) = Target.Cells(x) Tab_v(2, x) = Target.Cells(x).Address(0, 0) Next x End Sub
Ces macros à lancement automatique (concernant change et selectionchange) sont pratiquement les mêmes que celles de la feuille, mais avec la variable feuille en plus.
Pour initialiser le tableau varaible, soit tu le fais à l'ouverture, soit chaque fois que tu actives la feuille.
Nota :
- les macros Change se lancent quand une cellule sort du mode édition, qu'elle ait été modifiées ou non.
- les macros Change ne se lancent pas quand le contenu n'est pas changé, soit par macro, soit manuellement :
si le contenu de B1 est "=A1", un changement en A1 remplira la variable target de change uniquement avec A1, B1 n'apparaîtra pas, puisque son contenu reste "=A1"
A+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager