Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

prise en compte du changement de plusieurs valeurs

16 réponses
Avatar
Xavier
bonjour à tous,
voilà mon problème
je souhaiterais déclencher une macro à chaque fois qu'une valeur est
modifiée dans une de mes feuilles.
Vous allez me dire : Facile, il y a qu'à utiliser l'événement
Worksheet_Change et le tour est joué.

Le problème c'est qu'il se peut que dans ma feuille plusieurs cellules
soient modifiées en même temps (en utilisant le copier coller par
exemple) et malheureusement l'événement Worksheet_Change ne se déclenche
qu'une fois et que pour la première cellule modifiée.

Y a t-il une astuce pour prendre en compte le changement des autres
cellules ?

merci

10 réponses

1 2
Avatar
Jacky
Bonjour,
Y a t-il une astuce pour prendre en compte le changement des autres
cellules ?



par exemple, l'événement Worksheet_Change se déclenche au changement de
a1,a10,c1,c10
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Set plage = Range("a1,a10,c1,c10")
If Not Intersect(Target, plage) Is Nothing And Target.Count = 1 Then
MsgBox Target.Address
End If
End Sub
'--------------------------
--
Salutations
JJ


"Xavier" a écrit dans le message de news:
4aa22c64$0$24637$
bonjour à tous,
voilà mon problème
je souhaiterais déclencher une macro à chaque fois qu'une valeur est
modifiée dans une de mes feuilles.
Vous allez me dire : Facile, il y a qu'à utiliser l'événement
Worksheet_Change et le tour est joué.

Le problème c'est qu'il se peut que dans ma feuille plusieurs cellules
soient modifiées en même temps (en utilisant le copier coller par exemple)
et malheureusement l'événement Worksheet_Change ne se déclenche qu'une
fois et que pour la première cellule modifiée.

Y a t-il une astuce pour prendre en compte le changement des autres
cellules ?

merci


Avatar
Xavier
T'es génial
merci


Jacky a écrit :
Bonjour,
Y a t-il une astuce pour prendre en compte le changement des autres
cellules ?



par exemple, l'événement Worksheet_Change se déclenche au changement de
a1,a10,c1,c10
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Set plage = Range("a1,a10,c1,c10")
If Not Intersect(Target, plage) Is Nothing And Target.Count = 1 Then
MsgBox Target.Address
End If
End Sub
'--------------------------


Avatar
Xavier
Merci jacky,
par contre je viens de me rendre compte que ça marche pas à tous les coups
je m'explique

Si ce qu'il y a dans ma cells(1,1) est copié dans les cells(10,1),
cells(11,1), cells(12,1) ça marche. Mon événement Worksheet_Change me
donne le bon nombre de target.count ainsi que les bonnes adresses des
cellules modifiées.

Par contre si je ne copie pas le contenu de ma cells(1,1) dans des
cellules adjacentes (par exemple si je copie dans les cellules
cells(10,1),cells(12,1), cells(14,1))mon événement Worksheet_Change me
donne le bon nombre de target.count mais pas les bonnes adresses des
cellules modifiées.(il donne les adresses des cells((10,1), cells(11,1)
et cells(12,1))

j'aurais loupé un truc ?

Jacky a écrit :
Bonjour,
Y a t-il une astuce pour prendre en compte le changement des autres
cellules ?



par exemple, l'événement Worksheet_Change se déclenche au changement de
a1,a10,c1,c10
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Set plage = Range("a1,a10,c1,c10")
If Not Intersect(Target, plage) Is Nothing And Target.Count = 1 Then
MsgBox Target.Address
End If
End Sub
'--------------------------


Avatar
Jacky
Re...
Je ne suis pas sur d'avoir compris ce que tu souhaites faire.
La copie d'une cellule comme démontrée dans le code exemple ne déclenche pas
l'événement Worksheet_Change.
Donne un exemple précis de ce que doit faire l'événement "Worksheet_Change"
d'une de ces cellules sur:
http://www.cijoint.fr/

--
Salutations
JJ


"Xavier" a écrit dans le message de news:
4aa25551$0$9963$
Merci jacky,
par contre je viens de me rendre compte que ça marche pas à tous les coups
je m'explique

Si ce qu'il y a dans ma cells(1,1) est copié dans les cells(10,1),
cells(11,1), cells(12,1) ça marche. Mon événement Worksheet_Change me
donne le bon nombre de target.count ainsi que les bonnes adresses des
cellules modifiées.

Par contre si je ne copie pas le contenu de ma cells(1,1) dans des
cellules adjacentes (par exemple si je copie dans les cellules
cells(10,1),cells(12,1), cells(14,1))mon événement Worksheet_Change me
donne le bon nombre de target.count mais pas les bonnes adresses des
cellules modifiées.(il donne les adresses des cells((10,1), cells(11,1) et
cells(12,1))

j'aurais loupé un truc ?

Jacky a écrit :
Bonjour,
Y a t-il une astuce pour prendre en compte le changement des autres
cellules ?



par exemple, l'événement Worksheet_Change se déclenche au changement de
a1,a10,c1,c10
'------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Set plage = Range("a1,a10,c1,c10")
If Not Intersect(Target, plage) Is Nothing And Target.Count = 1 Then
MsgBox Target.Address
End If
End Sub
'--------------------------




Avatar
Xavier
voici le fichier.

http://www.cijoint.fr/cjlink.php?file=cj200909/cijmfMHlDa.xls


Jacky a écrit :
Re...
Je ne suis pas sur d'avoir compris ce que tu souhaites faire.
La copie d'une cellule comme démontrée dans le code exemple ne déclenche pas
l'événement Worksheet_Change.
Donne un exemple précis de ce que doit faire l'événement "Worksheet_Change"
d'une de ces cellules sur:
http://www.cijoint.fr/



Avatar
FS
Bonsoir,

Ça se complique ton affaire !
Est-ce qu'il peut arriver que tu copies, par exemple, en sélectionnant
A10, A12:A14 et A16 ?
Ou est-ce que tu copies soit sur une plage d'un seul tenant (A10:A16)
soit sur des cellules uniques séparées (A10, A12, A14, A16) ?
Dans le deuxième cas de figure on peut trouver une solution simple mais
dans le premier ça va être plus difficile.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Xavier a écrit :
voici le fichier.

http://www.cijoint.fr/cjlink.php?file=cj200909/cijmfMHlDa.xls


Jacky a écrit :
Re...
Je ne suis pas sur d'avoir compris ce que tu souhaites faire.
La copie d'une cellule comme démontrée dans le code exemple ne
déclenche pas l'événement Worksheet_Change.
Donne un exemple précis de ce que doit faire l'événement
"Worksheet_Change" d'une de ces cellules sur:
http://www.cijoint.fr/





Avatar
Jacky
Bonsoir Fréderic,

A un moment j'ai pensé à un "Application.InputBox("Sélectionnez une
cellule", Type:=8)" pour la plage à coller
à condition qu'il n'y ait qu'un copier à la fois.
Je n'arrive pas a séparer les plages de cette sélection
exemple :
Set CelluleAcoller = Application.InputBox("Sélectionnez une cellule",
Type:=8)
pour une sélection de (A10, A12, A14, A16)
msgbox CelluleAcoller.address retourne $A$10, $A$12, $A$14, $A$16 sur une
ligne
As-tu une solution pour récupérer $a$10 dans une cellule et $a$12 dans une
autre, etc..??
--
Salutations
JJ


"FS" a écrit dans le message de news:
OWjC%
Bonsoir,

Ça se complique ton affaire !
Est-ce qu'il peut arriver que tu copies, par exemple, en sélectionnant
A10, A12:A14 et A16 ?
Ou est-ce que tu copies soit sur une plage d'un seul tenant (A10:A16) soit
sur des cellules uniques séparées (A10, A12, A14, A16) ?
Dans le deuxième cas de figure on peut trouver une solution simple mais
dans le premier ça va être plus difficile.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Xavier a écrit :
voici le fichier.

http://www.cijoint.fr/cjlink.php?file=cj200909/cijmfMHlDa.xls


Jacky a écrit :
Re...
Je ne suis pas sur d'avoir compris ce que tu souhaites faire.
La copie d'une cellule comme démontrée dans le code exemple ne déclenche
pas l'événement Worksheet_Change.
Donne un exemple précis de ce que doit faire l'événement
"Worksheet_Change" d'une de ces cellules sur:
http://www.cijoint.fr/







Avatar
Xavier
bonsoir frederic,
ben oui je crains que cela se complique car je peux copier une cellule
vers plusieurs celles en même temps mais qui peuvent être répartie
aléatoirement A10, A16, A17, A32,...

Je pensais (naïvement) que le range target de l'événement
Worksheet_Change avait les références de toutes les cellules modifiées
mais bizarement il me sort le bon nombre mais pas les bonnes références
(sauf quand les cellules modifiées sont adjacentes). Bug d'Excel ?

Pensez vous qu'il existe une solution ou dois je abandonner l'idée
d'utiliser l'événement Worksheet_change pour répondre à mon pb?

Merci pour tout

Xavier




FS a écrit :
Bonsoir,

Ça se complique ton affaire !
Est-ce qu'il peut arriver que tu copies, par exemple, en sélectionnant
A10, A12:A14 et A16 ?
Ou est-ce que tu copies soit sur une plage d'un seul tenant (A10:A16)
soit sur des cellules uniques séparées (A10, A12, A14, A16) ?
Dans le deuxième cas de figure on peut trouver une solution simple mais
dans le premier ça va être plus difficile.

FS


Avatar
FS
Bonsoir,

Oui, pour ça tu peux utiliser Split.

Sub essai()
Dim Plage As Range
Set Plage = Range("A10,A12,A14,A16")
MsgBox Split(Plage.Address, ",")(0)
MsgBox Split(Plage.Address, ",")(1)
'etc.
End Sub

Ça se corse avec les plages comme
Range("A10,A12:A14,A16")

Attendons peut-être que Xavier précise son besoin.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Jacky a écrit :
Bonsoir Fréderic,

A un moment j'ai pensé à un "Application.InputBox("Sélectionnez une
cellule", Type:=8)" pour la plage à coller
à condition qu'il n'y ait qu'un copier à la fois.
Je n'arrive pas a séparer les plages de cette sélection
exemple :
Set CelluleAcoller = Application.InputBox("Sélectionnez une cellule",
Type:=8)
pour une sélection de (A10, A12, A14, A16)
msgbox CelluleAcoller.address retourne $A$10, $A$12, $A$14, $A$16 sur une
ligne
As-tu une solution pour récupérer $a$10 dans une cellule et $a$12 dans une
autre, etc..??


Avatar
Jacky
Re...
Avec l'aide du code de Frédéric et en modifiant la cellules A1
Essaie ceci:
'----------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
Application.EnableEvents = False
Columns(3).Clear
Cells(1, 5) = ""
CelluleAcopier = [a1]
On Error Resume Next
'Set CelluleAcopier = Application.InputBox("Sélectionnez la cellule à
copier", Type:=8)
Set CelluleAcoller = Application.InputBox("Sélectionnez la plage de
cellules pour le collage", Type:=8)
Cells(1, 5) = CelluleAcoller.Count
For i = 0 To CelluleAcoller.Count - 1
Cells(i + 1, 3) = Split(CelluleAcoller.Address, ",")(i)
Range(Split(CelluleAcoller.Address, ",")(i)) = CelluleAcopier
Next
End If
Application.EnableEvents = True
End Sub
'-------------------
Ton classeur modifié ici
http://www.cijoint.fr/cjlink.php?file=cj200909/cijBRYdvuP.xls
--
Salutations
JJ


"Xavier" a écrit dans le message de news:
4aa2b117$0$748$
bonsoir frederic,
ben oui je crains que cela se complique car je peux copier une cellule
vers plusieurs celles en même temps mais qui peuvent être répartie
aléatoirement A10, A16, A17, A32,...

Je pensais (naïvement) que le range target de l'événement Worksheet_Change
avait les références de toutes les cellules modifiées mais bizarement il
me sort le bon nombre mais pas les bonnes références (sauf quand les
cellules modifiées sont adjacentes). Bug d'Excel ?

Pensez vous qu'il existe une solution ou dois je abandonner l'idée
d'utiliser l'événement Worksheet_change pour répondre à mon pb?

Merci pour tout

Xavier




FS a écrit :
Bonsoir,

Ça se complique ton affaire !
Est-ce qu'il peut arriver que tu copies, par exemple, en sélectionnant
A10, A12:A14 et A16 ?
Ou est-ce que tu copies soit sur une plage d'un seul tenant (A10:A16)
soit sur des cellules uniques séparées (A10, A12, A14, A16) ?
Dans le deuxième cas de figure on peut trouver une solution simple mais
dans le premier ça va être plus difficile.

FS




1 2