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 Sub

Bonjour 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 Sub

bonjour 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 Sub

mais 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

image

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 Sub

et 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 Sub

et ç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 Sub

Bonjour,

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.

6projet-4.zip (49.80 Ko)

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 Sub

Bonjour,

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 ?

7projet-4.zip (57.64 Ko)

Waou !!!

Mon problème est enfin résolu , ça fonctionne parfaitement.

un grand merci à toi dysorthographie !!!

Rechercher des sujets similaires à "macro qui repete changement"