prise en compte du changement de plusieurs valeurs

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #20069551
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" 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


Xavier
Le #20070231
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
'--------------------------


Xavier
Le #20070481
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
'--------------------------


Jacky
Le #20071321
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" 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
'--------------------------




Xavier
Le #20071501
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/



FS
Le #20072251
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/





Jacky
Le #20073231
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" 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/







Xavier
Le #20073201
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


FS
Le #20073361
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..??


Jacky
Le #20073891
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" 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




Publicité
Poster une réponse
Anonyme