[VBA] Macro lancée quand A3 change de valeur

Fermé
ZaNet - 22 mai 2008 à 10:24
 Anne - 7 mars 2016 à 10:02
Bonjour,

J'ai un problème avec le lancement d'une macro Excel.

Je declenche une macro lorsque la valeur d'une cellule change. Ici il s'agit de la cellule A3

Ca ressembleà ca :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$3" Then
Cells(2, 1) = "la cellule A3 a changé"
Macro1
End If
End Sub

Quand j'écris dans la cellule A3, ca fonctionne bien.

Par contre, quand je fais un copier coller de plusique cellules (A3 en faisant partie), la marco ne se declenche pas.
Elle se declenche quand je double clique dans la cellule, comme pour lui dire "eh oh ! la valeur a changé !

Comment faire pour lui dire que la cellule a changé par ce copier coller ?

Question bonus : quel est le code permettant de dire qu'une valeur dans une plage de cellule a changé ?
comment changer le target.address pour qu'il prenne une plage de cellules ?

Merci pour votre aide
A voir également:

7 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
22 mai 2008 à 11:05
Bonjour,
voir avec..
'Seule obligation, mettre la formule =A3 dans une cellule "perdue"
Dim MemoCell As String

Private Sub Worksheet_Calculate()
    If Cells(3, 1) <> MemoCell Then
        Cells(2, 1) = "la cellule A3 = " & Cells(3, 1).Value
        MemoCell = Cells(3, 1)
        'Code....
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Address = "$A$3" And Cells(3, 1) <> MemoCell Then
        Cells(2, 1) = "la cellule A3 = " & Cells(3, 1).Value
        MemoCell = Cells(3, 1)
        'Code....
    End If

End Sub


A+
1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 6/10/2012 à 19:58
Bonjour,
Hum oui, mais depuis 2008 ..
Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("A3:BV3")) Is Nothing Then 
        Target.Offset(-1) = "Celule " & Target.Address & " changée" 
        ' envoyer le code ou la macro....
    End If 
End Sub


A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
1
Herr Hic Messages postés 3 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 8 octobre 2012
6 oct. 2012 à 14:39
Bonjour,

Je relance la discussion.
Le code ci-dessous fonctionne correctement pour une cellule.
En A3 j'entre une valeur.
En A2 la même valeur s'affiche.

(pour que cela fonctionne j'ai ajouté que A4=a3 comme indiqué par l'auteur du code)
D'ailleurs, merci à l'auteur.

Dim MemoCell As String

Private Sub Worksheet_Calculate()
If Cells(3, 1) <> MemoCell Then
Cells(2, 1) = "la cellule A3 = " & Cells(3, 1).Value
MemoCell = Cells(3, 1)
'Code....
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$A$3" And Cells(3, 1) <> MemoCell Then
Cells(2, 1) = "la cellule A3 = " & Cells(3, 1).Value
MemoCell = Cells(3, 1)
'Code....
End If

End Sub

Ma question est :
comment faire pour que les valeurs des cellules de A3 à BV3 s'affichent de la même manière de A2 à BV2 ?

Merci pour vos conseils avisés
Herr Hic

PS : Désolé si j'ai raté une discussion qui relèverait de ma demande.

Configuration: Windows XP / Firefox 15.0.1
0
Herr Hic Messages postés 3 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 8 octobre 2012
7 oct. 2012 à 12:24
Bonjour Lermite,

Merci pour ta réponse rapide.
Ca marche impec !
Bonne journée et à +

Herr Hic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Herr Hic Messages postés 3 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 8 octobre 2012
8 oct. 2012 à 21:40
Bonsoir,

J'utilise le code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("j11:BV11")) Is Nothing Then
Target.Offset(-9) = Target.Value
End If
End Sub

Si en j11 j'entre une valeur (J11=2 par exemple), cette même valeur est renvoyée automatiquement en J2 : parfait.

Par contre, si je remplace les valeurs de la ligne 11 par des formules se répétant de J11 à BV11 (J11 =SOMME.SI($E$24:$E$2015;$I11;J$24:J$2015), lorsque que le résultat de la formule change je ne parviens pas à renvoyer le résultat en J2

Là, j'aurais besoin d'un coup de pouce une nouvelle fois..

Merci d'avance

Herr Hic
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 oct. 2012 à 09:29
Supprime le code précédant et remplace par..
Private Sub Worksheet_Calculate()
Dim Col As Integer
    For Col = 10 To 77
        Cells(2, Col) = Cells(11, Col).Value
    Next Col
End Sub

A placer au même endroit.

0
Je débute, mais à chaque fois que je veux copier ce code sous VBA, la macro ne s'enregistre pas
Je procède de la manière suivante:
Je nomme ma macro puis je clique sur créer
Visual Basic s'ouvre en indiquant:
Sub Macro23()

End Sub
Je copie
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$6" Then
Macro7
End If
entre Sub Macro23() et End Sub
Et ça marche pas
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
5 janv. 2013 à 14:38
Compris, tu met pas au bon endroit ...
Tu clic droit sur le nom de l'onglet -> Visualiser le code
Tu entre dans l'IDE du VBA et il y a une fenêtre ouverte.
C'est DANS cette fenêtre que tu colle les deux sub.
A+
0
Merci :-)
0