XL 2019 Problème avec Target.Value = UCase(Target.Value)

pat66

XLDnaute Impliqué
Bonjour le forum,

pourriez vous me dire pourquoi lorsque je supprime le contenu d'une de ces cellules C6,C7,C9,H6:H7 (exemple erreur de saisie), j'ai un bug sur la ligne : Target.Value = UCase(Target.Value) et la fonction majuscule ne fonctionne plus

Sub Worksheet_Change(ByVal Target As Range)
'Me.Unprotect "jojo"
Application.EnableEvents = False 'désactive les évènements
If Not Application.Intersect(Target, Range("C6,C7,C9,H6:H7")) Is Nothing Then
Target.Value = UCase(Target.Value)
End If
--------------------
----------------------
---------------------
End sub

un grand merci pour votre aide
Cdt
Pat66
 
Dernière édition:
Solution
Re,
Je me pose une question : si vous protégez vos feuilles alors un Worksheet_Change ne peut pas marcher puisque la protection interdit de changer une valeur.
En PJ un essai avec un Worksheet_SelectionChange qui dévérouille la feuille quand on clique sur une bonne cellule et un Worksheet_Change pour la modif.

TooFatBoy

XLDnaute Barbatruc
Ce que je voulais dire, c'est que tu nous donne une macro en disant qu'elle bloque sur une instruction, mais cette instruction n'existe pas dans la macro que tu nous donnes. Donc difficile de voir poyrquoi ça bloque. ;)


C'est bizarre que le classeur ne s'ouvre plus. Ça ne devrait pas avoir d'incidence.

Est-ce que ta feuille est déjà complètement protégée (manuellement ou par macro) quand tu la protège uniquement pour l'utilisateur ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Je me pose une question : si vous protégez vos feuilles alors un Worksheet_Change ne peut pas marcher puisque la protection interdit de changer une valeur.
En PJ un essai avec un Worksheet_SelectionChange qui dévérouille la feuille quand on clique sur une bonne cellule et un Worksheet_Change pour la modif.
 

Pièces jointes

  • Classeur1.xlsm
    14.3 KB · Affichages: 13

TooFatBoy

XLDnaute Barbatruc
Re,
Je me pose une question : si vous protégez vos feuilles alors un Worksheet_Change ne peut pas marcher puisque la protection interdit de changer une valeur.
Comme toi tu le sais déjà, si la feuille est protégée avec UserInterfaceOnly=True alors ça ne pose pas de souci car la protection est alors effective uniquement pour l'utilisateur mais pas pour VBA.

Comprends-tu la différence, Pat66 ?
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
re,

oui en principe avec UserInterfaceOnly=True, cela ne bloque pas le VBA mais là ce n'est pas le cas.

je teste la solution de Sylvanu post #18
Perso, je ne mettrais pas un PROTECT dans une macro CHANGE.
Je mettrais le PROTECT à l'ouverture du classeur.

Juste pour savoir si c'est bien la protection totale qui pose un problème, tu peux tester ceci : ajouter une ligne pour déprotéger la feuille, juste avant la protection avec UserInterfaceOnly =True.
 

pat66

XLDnaute Impliqué
re,

oui c'est ce que je veux faire une protection à l'ouverture du classeur, mais voila ensuite ce que j'ai tenté et là il colle une erreur 1104 sur cette ligne c = UCase(c.Formula)

VB:
Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Me.Unprotect "jojo"
Protect "jojo", UserInterfaceOnly:=True
Application.EnableEvents = False 'désactive les évènements
For Each c In [C6:C7,C9,H6:H7]
    c = UCase(c.Formula)
Next
Application.EnableEvents = True 'réactive les évènements
End sub
 

TooFatBoy

XLDnaute Barbatruc
Désolé, je n'ai rien pour tester ta macro, et des "me.protect" ou "protect", vu mon niveau en VBA, ça ne me cause pas trop...
Perso j'utilise plutôt un truc du genre sheets("MaFeuille").protect pour être un peu moins incertain de ce que je fais... 😕

Je ne saurais donc t'en dire plus, mais je vois qu'heureusement tu as déjà eu une solution à ton problème.
 

Discussions similaires