VBA Majuscule forcée

Bonjour à le forum !

Je souhaite imposer à l’utilisateur d'un fichier Excel le fait de devoir saisir son texte en Majuscule, sans pour autant être intrusif.

D'où le fait de ne pas vouloir passer par la validation de données.

De même que l'usage de la formule "Majuscule" dans une case annexe n'est pas envisageable.

Je me suis donc rabattu sur le code vba suivant, inséré dans les Microsoft Excel Object de la feuille en question:

Private Sub Worksheet_Activate()
For Each maj In [d18] 'plage a traitée
Application.ScreenUpdating = False
If maj <> "" Then
maj.Select
maj = UCase(maj)
ActiveCell = maj
End If
Next
Application.ScreenUpdating = True
Range("a1").Select
End Sub

Pourtant, bien que je saisisse du texte en minuscule, celui-ci n'est pas transformé en Majuscule automatiquement une fois appuyé sur entrée.

Petit plus, si je pouvais ne pas avoir d'accent sur les majuscules, ce serait le top du top !

Merci de votre aide !

Bonne journée,

Gilles

Bonjour,

L'évènement Activate n'est pas approprié pour ce que tu veux faire.

Utilise :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect
Set isect = Application.Intersect(Target, [D18])
If Not isect Is Nothing Then
   Application.EnableEvents = False
   Target = StrConv(Target, 1)
   Application.EnableEvents = True
End If
End Sub

Nota1: Ne gère pas les caractères accentués !

Nota2 : L'utilisation de ce type de macro est fortement déconseillé aux programmeurs VBA inexpérimentés :

L'utilisation de l'évènement Worksheet_Change et de Application.EnableEvents = False dans des conditions maladroites risque de conduire à des blocages d'Excel entrainant la fermeture sans sauvegarde et la perte de toutes les modifications.

A+

A+

Bonjour,

Bonjour Galopin01,

Procédure mis à jour avec l'ajout d'une fonction personnalisée (pas de moi) pour supprimer les accents indésirables.

Option Explicit
Public Function SupprimerAccents(ByVal sChaine As String) As String
Dim sTmp As String, i As Long, p As Long
Const sCarAccent As String = "ÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ"
Const sCarSansAccent As String = "AAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy"
    sTmp = sChaine
    For i = 1 To Len(sTmp)
        p = InStr(sCarAccent, Mid(sTmp, i, 1))
        If p > 0 Then Mid$(sTmp, i, 1) = Mid$(sCarSansAccent, p, 1)
    Next i
    SupprimerAccents = sTmp
End Function

Mercià vous deux pour vos réponses.

Je vais tester ça dans l'aprem.

En revanche, cela présente-il un risque pour l'utilisateur? Quels types de maladresse ou d'erreurs peuvent mener à la fermeture sans sauvegarde?

Merci,

bonjour,

ça ne présente un risque pour l'utilisateur que si le programmeur à laissé subsister un code pourri par mégarde...

En effet malgré de nombreux essais, il arrive souvent qu'au bout de quelques temps on découvre "une faille" qui avait résisté à tous les essais, mais qui dans certaines conditions devient critiques.

Tous les programmeurs connaissent ça.

La macro proposée (y compris celle modifiée par Jean-Eric) ne présente pas ce risque... si on ne les modifie pas !

Cependant dès qu'on commence à vouloir utiliser l'évènement Worksheet_Change, le risque est grand de vouloir l'améliorer, l'adapter... Et de fil en aiguille on arrive au crash !

Ceci dit, il faut savoir peser le pour et le contre : C'est en acceptant la prise de risque qu'on progresse...

A+

Très bien, merci pour ces précisions.

L'idée est de ne pas y toucher, car je ne serai pas là pour le support. Donc a priori pas de risques..!

Enfin bon, je vais m'amuser à tester un peu avant de déployer cela !

Merci encore !

Rechercher des sujets similaires à "vba majuscule forcee"