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 SubVous 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 Subric
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 SubMerci à vous 2 et bonne soirée !
Bonsoir,
merci @ vous !
@ bientôt
LouReeD