/ / Excel VBA - Erreur de majuscule forcée lorsque le contenu est supprimé - excel, excel-vba, vba

Excel VBA - Forcer l'erreur en majuscule lorsque le contenu est supprimé - excel, excel-vba, vba

"J'essaie de forcer une cellule à prendre une valeur majuscule, ce qui fonctionne, en utilisant le code ci-dessous.

If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Unprotect Password:=""
Target = UCase(Target)
Application.EnableEvents = True
ActiveSheet.Protect Password:=""

Toutefois, lorsque le contenu de la cellule est supprimé (ce qui peut être requis), je reçois le message d'erreur suivant: "Erreur d'exécution" 13 ": Incompatibilité de type"

Si vous pouvez nous éclairer, c’est génial!

Réponses:

2 pour la réponse № 1

La cible est une plage et non une chaîne (en supposant que vous utilisiez l'événement Worksheet_Change).

Le devrait être plusieurs cellules changeant à la fois, pas des cellules vides.

Lorsque vous avez une seule cellule, tout va bien, parce que valeur de Target est évalué à Target.Value qui peut généralement être converti en String. Lorsque vous modifiez plus d'une cellule à la fois, Target.Value renverra un tableau, qui ne peut pas être converti en String.

Donc, vous devez changer chaque cellule à la fois:

Dim cell as Range, cells as Range
Set cells=Intersect(Target, Range("B9", "F10"))
If cells Is Nothing Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Unprotect Password:=""
For each cell In cells.Cells
Cell.Value = UCase(cell.Value)
Next
Application.EnableEvents = True
ActiveSheet.Protect Password:=""

1 pour la réponse № 2

Je maintiens ma position. Le code d'origine est:

Target = UCase(Target)

ce qui implique que vous souhaitiez avoir la plage cible en majuscule. Pour ce faire, remplacez cette ligne par:

For Each c In Target
If VarType(c.Value)=vbString Then
c.Value = UCase(c.Value)
End If
Next

qui donne:

If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Unprotect Password:=""
Dim c As Range
For Each c In Target
If VarType(c.Value)=vbString Then
c.Value = UCase(c.Value)
End If
Next
Application.EnableEvents = True
ActiveSheet.Protect Password:=""