Macro qui se répète au changement de cellule
bonjour,
je débute,
j'ai crée plusieurs macro qui se déclenchent quand la valeur de la cellule, d'un tableau change.
quand je change la valeur de la première cellule (DY50) les macros associés se déclenchent bien . Quand je change la valeur de la seconde cellule (DX51) les macros associés à cette cellule ce déclenche comme je le voulais, mais aussi les macros de la cellule (DX50) se re-déclenche, ce que je ne veut pas..
comment faire pour que les macros restent totalement associé à sa cellule sans que les autres ce déclenchent ?
merci d'avance
voici mon code:
Sub Worksheet_Change(ByVal Target As Range)
Set Target = Range("DY50")
If Target.Value = 1 Then
Call MacroC1
End If
If Target.Value = 2 Then
Call MacroW1
End If
If Target.Value = 3 Then
Call MacroEV1
End If
Set Target = Range("DY51")
If Target.Value = 1 Then
Call MacroC2
End If
If Target.Value = 2 Then
Call MacroW2
End If
If Target.Value = 3 Then
Call MacroEV2
End If
End SubBonjour Florent, bonjour le forum,
Peut-être comme ça :
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$DY$50"
Select Case Target.Value
Case 1
Call MacroC1
Case 2
Call MacroW1
Case 3
Call MacroEV1
End Select
Case "$DY$51"
Select Case Target.Value
Case 1
Call MacroC2
Case 2
Call MacroW2
Case 3
Call MacroEV2
End Select
End Select
End Subbonjour et merci pour la réponse
cela ne change rien malheureusement... la macro de la cellule DX50 se répète quand même
Bonjour à tous,
Set Target = Range("DY50")
non, tu n'as pas à faire cela.
Target est passé à la procédure, c'est le range ayant déclenché l'événement.
Il faut tester son adresse comme te montre Thauthème
Si ta macro se redéclenche, c'est sans doute qu'une des macro que tu appelles modifie également cette cellule.
Il faut interdire les événements juste avant avec Application.EnableEvents = False
et rétablir après avec =True
eruc
c'est re-moi (qui a poster ce topic) j'ai fait une fausse manip et changé de compte en clôturant l'ancien .
bref merci erric mais j'ai rien compris
j'ai essayer d'inclure Application.EnableEvents = False
à mon code sans succès
Ton épaule gêne, on ne voit pas bien ton écran pour savoir ce que tu as fait...
j'ai fait ça :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("DX50:EO57")) Is Nothing Then
Select Case Target.Address
Application.EnableEvents = False
Case "$DY$50"
Select Case Target.Value
Case 1 = True
Call MacroC1
Case 2 = True
Call MacroW1
Case 3 = True
Call MacroEV1
End Select
Application.EnableEvents = False
Case "$DY$51"
Select Case Target.Value
Case 1 = True
Call MacroC2
Case 2
Call MacroW2
Case 3
Call MacroEV2
End Select
End Select
End If
End Submais non, d'est dans une de tes macro appelée (MacroC2 ou/et ???) que tu dois avoir une écriture dans la cellule.
J'ai bien fait de préciser de le faire juste avant l'ecriture et de rétablir juste après avec =True juste après...
Si tu lis la moitié des réponses tu vas perdre du temps.
Sans fichier, impossible de tout deviner
eric
ok je recommence tout alors :
j'ai changé mon code (c'est du texte qui fait apparaître ma macro) "COM" "W" etc...
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$DY$50"
Select Case Target.Value
Case "COM"
Call MacroC1
Case "W"
Call MacroW1
Case "EV"
Call MacroEV1
End Select
Case "$DY$51"
Select Case Target.Value
Case "COM"
Call MacroC2
Case "W"
Call MacroW2
Case "EV"
Call MacroEV2
End Select
End Select
End Subet en fonction de ce qui apparaît dans la cellule cible exemple la formule de DY50 est :
=SI(ESTNA(RECHERCHEV(DX51;'base trains'!$B$1:$Q$2989;2;FAUX));"";RECHERCHEV(DX51;'base trains'!$B$1:$Q$2989;2;FAUX))
en fonction de ce qui apparaît "COM", "W" ma macro qui est une image doit apparaître dans un autre tableau
bon là ça fait plus apparaître mes macros...
au tout début mon code était
Sub Worksheet_Change(ByVal Target As Range)
Set Target = Range("DY50")
If Target.Value = "COM" Then
Call MacroC1
End If
If Target.Value = "EVO" Then
Call MacroC1
End If
If Target.Value = "MAN" Then
Call MacroC1
End If
If Target.Value = "W" Then
Call MacroW1
End If
If Target.Value = "EV" Then
Call MacroEV1
End If
Set Target = Range("DY51")
If Target.Value = "COM" Then
Call MacroC2
End If
If Target.Value = "EVO" Then
Call MacroC2
End If
If Target.Value = "MAN" Then
Call MacroC2
End If
If Target.Value = "W" Then
Call MacroW2
End If
If Target.Value = "EV" Then
Call MacroEV2
End If
End Subet ça me faisait apparaître ma macro de la cellule DY50 2 fois
Bonjour,
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'Désactivation de tous les événements
Dim Image As String, Plage As String, SelectCell As String
Select Case Target.Value 'Défini l'image à copier coler!
Case "COM": Image = "Picture 80" ' MacroC1
Case "W": Image = "Picture 67" ' MacroW1
Case "EV": Image = "Picture 70" ' MacroEV1
End Select
Select Case Target.Address 'Défini les plage concernées
Case "$DY$50": Plage = "H22:M29": SelectCell = "DX50"
Case "$DY$51": Plage = "W22:AB29": SelectCell = "DX51"
Case "$DY$52": Plage = "AL22:AQ29": SelectCell = "DX52"
Case "$DY$53": Plage = "BA22:BF29": SelectCell = "DX53"
Case "$DY$54": Plage = "BP22:BU29": SelectCell = "DX54"
Case "$DY$55": Plage = "CE22:CJ29": SelectCell = "DX55"
Case "$DY$56": Plage = "CT22:CY29": SelectCell = "DX56"
Case "$DY$57": Plage = "DI22:DN29": SelectCell = "DX57"
End Select
If Image <> "" And Plage <> "" Then Call MacroCopy(Image, Plage, SelectCell)
Application.EnableEvents = True 'Réactivation de tous les événements
End Sub
'factorisation de toutes les macros en une!
Sub MacroCopy(Picture As String, Plage As String, SelectCell As String)
ActiveSheet.Shapes(Picture).Copy
Range(Plage).Select
ActiveSheet.Paste
Range(SelectCell).Select
End SubBonjour,
merci dysorthographie de te pencher également sur mon problème. cela ne fonctionne toujours pas. les macros ne s'affiche pas. je post mon fichier ici.
d'avance merci
Je relance... si quelqu'un a une solution à mon problème.
Merci beaucoup
Bonjour,
"H22:M29" sont des cellules fusionnées il ne faut s'intéresser qu'à la première cellule "H22" pour l'exemple!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False 'Désactivation de tous les événements
Dim Image As String, Plage As String, SelectCell As String
Select Case Target.Offset(0, 1).Value 'Défini l'image à copier coler!
Case "COM": Image = "Picture 80" ' MacroC1
Case "W": Image = "Picture 67" ' MacroW1
Case "EV": Image = "Picture 70" ' MacroEV1
End Select
Select Case Target.Offset(0, 1).Address 'Défini les plage concernées
Case "$DY$50": Plage = "H22": SelectCell = "DX50"
Case "$DY$51": Plage = "W22": SelectCell = "DX51"
Case "$DY$52": Plage = "AL22": SelectCell = "DX52"
Case "$DY$53": Plage = "BA22": SelectCell = "DX53"
Case "$DY$54": Plage = "BP22": SelectCell = "DX54"
Case "$DY$55": Plage = "CE22": SelectCell = "DX55"
Case "$DY$56": Plage = "CT22": SelectCell = "DX56"
Case "$DY$57": Plage = "DI22": SelectCell = "DX57"
End Select
If Image <> "" And Plage <> "" Then Call MacroCopy(Image, Plage, SelectCell)
Application.EnableEvents = True 'Réactivation de tous les événements
End Sub
'factorisation de toutes les macros en une!
Sub MacroCopy(Picture As String, Plage As String, SelectCell As String)
ActiveSheet.Shapes(Picture).Copy
Range(Plage).Select
ActiveSheet.Paste
Range(SelectCell).Select
End SubBonjour,
Merci Dysorthographie. j'ai essayé ton code en faisant un copier/coller dans la feuille 1 de VBA et cela ne fonctionne pas. les images ne s'affichent pas..
il faut peut être que j'ajoute quelque chose ?
Waou !!!
Mon problème est enfin résolu , ça fonctionne parfaitement.
un grand merci à toi dysorthographie !!!