Empêcher l’exécution d'une macro en sortant d'une feuille

Bonsoir le forum,

Je suis confronté à un problème, sans doute simple à résoudre, mais je sèche !

Mes compétences en VBA sont très faibles, contrairement à d'autres ici.

Dans une feuille, je fais exécuter une macro de mise en forme conditionnelle, qui s'applique à chaque bouton filtre d'un segment de TCD.

Jusque là tout va bien, cela fonctionne.

Cependant, quand je quitte cette feuille, j'ai un message d'erreur qui s'affiche "La méthode Select de la classe Range a échoué"

Vous allez me dire que c'est normal, avec le code suivant, car je demande une sélection Range("").Select sur une feuille non active

J'ai chercher plusieurs solutions mais en vain

Voici ledit code :

Private Sub Worksheet_Change(ByVal Target As Range)
Range("S2:S37").Select
    Selection.FormatConditions.AddDatabar
    Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1)
        .MinPoint.Modify newtype:=xlConditionValueAutomaticMin
        .MaxPoint.Modify newtype:=xlConditionValueAutomaticMax
    End With
    With Selection.FormatConditions(1).BarColor
        .Color = 13012579
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).BarFillType = xlDataBarFillGradient
    Selection.FormatConditions(1).Direction = xlContext
    Selection.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
    Selection.FormatConditions(1).BarBorder.Type = xlDataBarBorderSolid
    Selection.FormatConditions(1).NegativeBarFormat.BorderColorType = _
        xlDataBarColor
    With Selection.FormatConditions(1).BarBorder.Color
        .Color = 13012579
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).AxisPosition = xlDataBarAxisAutomatic
    With Selection.FormatConditions(1).AxisColor
        .Color = 0
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).NegativeBarFormat.Color
        .Color = 255
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).NegativeBarFormat.BorderColor
        .Color = 255
        .TintAndShade = 0
    End With
    Range("A1").Select
End Sub

Vous aurez compris que c'est

Range("S2:S37").Select

qui pose problème

Quant à Range("A1").Select en fin de code, je peux le supprimer sinon il me renverra aussi une erreur !

Par avance, merci à vous

Bonsoir,

personnellement je n'aurais pas dit "normale" car quitter une feuille ce n'est pas y faire un changement de valeur...

N'avez vous pas un autre code qui tourne sur du Activate ou Desactivate ?

@ bientôt

LouReeD

Bonjour à tous,

Je n'ai pas de solution à ton problème ... seulement une proposition pour éliminer les sélections (excepter A1).

Private Sub Worksheet_Change(ByVal Target As Range)
   With Range("S2:S37")
      .FormatConditions.AddDatabar
      .FormatConditions(.FormatConditions.Count).ShowValue = True
      .FormatConditions(.FormatConditions.Count).SetFirstPriority
      With .FormatConditions(1)
         .MinPoint.Modify newtype:=xlConditionValueAutomaticMin
         .MaxPoint.Modify newtype:=xlConditionValueAutomaticMax
      End With
      With .FormatConditions(1).BarColor
         .Color = 13012579
         .TintAndShade = 0
      End With
      .FormatConditions(1).BarFillType = xlDataBarFillGradient
      .FormatConditions(1).Direction = xlContext
      .FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
      .FormatConditions(1).BarBorder.Type = xlDataBarBorderSolid
      .FormatConditions(1).NegativeBarFormat.BorderColorType = xlDataBarColor
      With .FormatConditions(1).BarBorder.Color
         .Color = 13012579
         .TintAndShade = 0
      End With
      .FormatConditions(1).AxisPosition = xlDataBarAxisAutomatic
      With .FormatConditions(1).AxisColor
         .Color = 0
         .TintAndShade = 0
      End With
      With .FormatConditions(1).NegativeBarFormat.Color
         .Color = 255
         .TintAndShade = 0
      End With
      With .FormatConditions(1).NegativeBarFormat.BorderColor
         .Color = 255
         .TintAndShade = 0
      End With
   End With
   Range("A1").Select
End Sub

ric

Bonsoir LouReeD, bonsoir ric

En effet LouReed, j'ai du "Activate" dans mon code !

ric, merci pour le code, qui fonctionne exactement comme je le voulais

Je le mets dans son intégralité et la prochaine fois, je n'y manquerais pas de le faire, pour que cela réponde directement à la question de LouReeD

Private Sub Worksheet_Activate()

ActiveWorkbook.RefreshAll

Range("S2:S37").Select
    Selection.FormatConditions.AddDatabar
    Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1)
        .MinPoint.Modify newtype:=xlConditionValueAutomaticMin
        .MaxPoint.Modify newtype:=xlConditionValueAutomaticMax
    End With
    With Selection.FormatConditions(1).BarColor
        .Color = 13012579
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).BarFillType = xlDataBarFillGradient
    Selection.FormatConditions(1).Direction = xlContext
    Selection.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
    Selection.FormatConditions(1).BarBorder.Type = xlDataBarBorderSolid
    Selection.FormatConditions(1).NegativeBarFormat.BorderColorType = _
        xlDataBarColor
    With Selection.FormatConditions(1).BarBorder.Color
        .Color = 13012579
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).AxisPosition = xlDataBarAxisAutomatic
    With Selection.FormatConditions(1).AxisColor
        .Color = 0
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).NegativeBarFormat.Color
        .Color = 255
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).NegativeBarFormat.BorderColor
        .Color = 255
        .TintAndShade = 0
    End With
    Range("A1").Select

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   With Range("S2:S37")
      .FormatConditions.AddDatabar
      .FormatConditions(.FormatConditions.Count).ShowValue = True
      .FormatConditions(.FormatConditions.Count).SetFirstPriority
      With .FormatConditions(1)
         .MinPoint.Modify newtype:=xlConditionValueAutomaticMin
         .MaxPoint.Modify newtype:=xlConditionValueAutomaticMax
      End With
      With .FormatConditions(1).BarColor
         .Color = 13012579
         .TintAndShade = 0
      End With
      .FormatConditions(1).BarFillType = xlDataBarFillGradient
      .FormatConditions(1).Direction = xlContext
      .FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
      .FormatConditions(1).BarBorder.Type = xlDataBarBorderSolid
      .FormatConditions(1).NegativeBarFormat.BorderColorType = xlDataBarColor
      With .FormatConditions(1).BarBorder.Color
         .Color = 13012579
         .TintAndShade = 0
      End With
      .FormatConditions(1).AxisPosition = xlDataBarAxisAutomatic
      With .FormatConditions(1).AxisColor
         .Color = 0
         .TintAndShade = 0
      End With
      With .FormatConditions(1).NegativeBarFormat.Color
         .Color = 255
         .TintAndShade = 0
      End With
      With .FormatConditions(1).NegativeBarFormat.BorderColor
         .Color = 255
         .TintAndShade = 0
      End With
   End With

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If ActiveSheet.Name <> "PREP P&E (2)" Then
   ActiveSheet.Name = "PREP P&E (2)"
End If

End Sub

Private Sub Worksheet_Deactivate()

        Cells.FormatConditions.Delete
End Sub

Merci à vous 2 et bonne soirée !

Bonsoir,

merci @ vous !

@ bientôt

LouReeD

Rechercher des sujets similaires à "empecher execution macro sortant feuille"