Forcer la saisie d' un texte en Maj, min ou, nom propre


#1

Bonjour Doc, je viens de lire votre article sur la transformation d’un texte saisi en majuscule, minuscule et nom propre grâce à des formules / fonctions. Existe-t-il un moyen de faire cela dès l’encodage, comme en Access par exemple, où avec le “>” la saisie de l’utilisateur est directement transformée en majuscule ? En passant : félicitations pour tout ce que vous faites, c’est tjs très instructif. Merci d’avance pour votre réponse.


#2

Dans Excel, il n’existe pas de format permettant de transformer tous les caractères saisis en majuscules ou minuscules.
Par contre, il existe un outil qui s’appelle “Validation de données” et par va vous permettre d’obliger la saisie en majuscules par exemple.
Il faut aussi connaître deux fonctions intégrées d’Excel

  • la fonction MAJUSCULE()
  • la fonction EXACT()

#3

Bonjour @osis

Merci :smiley:

Qu’entends-tu exactement par “dès l’encodage” ?

Tu ne peux pas changer automatiquement ce que l’utilisateur écrit dans les cellules, sauf par exemple si la saisie est faite dans un formulaire, ou bien si une macro vérifie toutes les entrées dans le fichier…


#4

Bonsoir Doc,

Merci de votre réponse rapide !

Oui, je veux changer automatiquement ce que l’utilisateur écrit dans les cellules, comme dans Access, lorsque dans la création d’une table je mets le format du texte en “>”, ce qui a comme conséquence que même si l’utilisateur écrit en minuscule, c’est directement enregistré en majuscule. Mon cas pratique : je crée des tableaux Excel que je ne suis pas seule à remplir, des collègues les remplissent également. Seulement, tout le monde rempli ces tableaux n’importe comment, donc je dois retravailler ces tableaux, afin de mettre les différents champs soit en majuscules(=majuscules), soit en commençant avec une majuscule et puis des minuscules (=nompropre).

Vous l’aurez compris, je ne suis pas experte, et j’essaye de trouver un moyen (pas trop compliqué) pour éviter ce “re-travail”, et malheureusement je n’y rien en macro pour imaginer une solution de ce côté.

Auriez-vous une solution ?

Merci d’avance pour le temps que vous m’accordez et, encore, félicitations pour votre travail ! :+1:

Salutation et bonne soirée

Osis


#5

En VBA tu peux utiliser les commandes suivantes pour changer la casse d’une cellule:

    'tout mettre en majuscules
Range("A1").Value = StrConv(Range("A1").Value, vbUpperCase)

    'tout mettre en Nom Propre
Range("A1").Value = StrConv(Range("A1").Value, vbProperCase)

    'tout mettre en minuscules
Range("A1").Value = StrConv(Range("A1").Value, vbLowerCase)

#6

Bonsoir Doc,

Encore une fois, merci pour la réponse rapide.

Mais, comment déjà précisé, les macros et vba, j’y comprends pas grand chose, je suis nulle là! Où dois-je mettre ces commandes dans ma feuille Excel ? Créer une macro séparée pour chaque commande et retravailler le tableau avec elles ? Ou y a-t-il un moyen plus “automatique” (comme en Access) ?

Encore une fois, merci du temps que tu m’accordes.

Bàt & bonne soirée

Osis


#7

Bonjour,
Si vous désirez imposer une saisie de caractères en majuscules sans passer par du VBA, vous pouvez utiliser de la validation de données.
Je joins une validation de Texte en obligeant de l’encoder en majuscules (fichier Excel) et un fichier PDF qui explique comment réaliser cette validation.

Obliger de saisir du contenu en majuscules.xlsx (8,4 Ko)

Comment obliger la saisie en majuscules.pdf (694,0 Ko)


#8

Bonjour @osis, @DocteurExcel, @CordierEt,

@osis Tu ne fais vraiment pas d’efforts pour nous aider a t’aider, en effet tu ne fournis pas de fichier, nous ne savons pas quelles colonnes sont concernées par ta demande, nous n’avons pas de boule de cristal :roll_eyes:

Bref, voici une proposition avec un code VBA mis dans la “Feuil1” de l’éditeur “Visual Basic”.
En colonne “A2 à A10000” Majuscule
En colonne “B2 à B10000” Minuscule
En colonne “C2 à C10000” Nom Propre

Pour voir le code VBA faire alt + F11
Si le code n’apparait pas tout de suite, suivre la procédure ci-dessous:

Code VBA Feuil1

Voici le code VBA:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("A2:A10000")) Is Nothing Then Target = UCase(Target)
    If Not Intersect(Target, Range("B2:B10000")) Is Nothing Then Target = LCase(Target)
    If Not Intersect(Target, Range("C2:C10000")) Is Nothing Then Target = Application.Proper(Target)
    
End Sub

Et voici le fichier exemple ICI==> osis V1.xlsm (16,4 Ko)

Si tu n’arrives pas a adapter le code à ton fichier, alors fourni en un et je t’aiderais.

Cordialement.


#9

Bonsoir à tous,

Un grand merci pour le code et désolée si j’ai manqué de clarté.

mdo100 a parfaitement compris ma situation : une première colonne avec le nom en majuscule, la 2ème avec le prénom (1ère lettre en majuscule), ensuite l’adresse (1ère lettre de chaque mot en majuscule) et la localité en majuscule; les autres données (des numéros de gsm, date de naissance, etc) ne me causent pas de problèmes.

J’ignore si cela a de l’importance, certains champs sont extraits, par formule, d’autre champs, comme par exemple la date de naissance qui est extraite du RN (registre national), idem pour le sexe de la personne. D’autres données sont extraite de listes déroulantes, comme les localités & CP, le nom du formateur, etc. Pour les formules, je ne m’en tire pas trop mal. Le fichier original étant au bureau, je ne peux malheureusement pas le joindre ici, j’ai reconstitué le fichier de base, sans les formules que je viens de mentionner.

Pour poser le cadre : je travaille pour une association et je gère des listes de personnes inscrites à différentes activités. Des collègues font des inscriptions dans un fichier du Google Drive que je recopie par copié-collé dans le fichier Excel définitif, je reçois également des coordonnées d’autres associations qui veulent inscrire des participants (sous format de tables Excel) etc. Dans un souci de cohérence et de présentation je souhaite garder les casses comme énoncé plus haut.

J’ai téléchargé votre table, et là, mon 1er souci : lorsque j’introduis de nouvelles données en les tapant dans les cellules, je reçois un message d’erreur du débogage : erreur 28 : espace pile insuffisant. j’ai tenté de voir sur Internet pour résoudre le problème, mais je ne comprends rien aux explications. Bon, cela fonctionne, mais ce message est un peu gênant.

2ème soucis : cela ne fonctionne pas lorsque les données sont introduites par copié collé, que j’utilise assez bien, comme expliqué plus haut.

3ème problème : je ne comprend absolument pas comment introduire votre code dans ma table ! je fais alt f11, j’ai bien un volet qui s’ouvre sur la gauche avec Propriétés - Feuil1, mais sur la droite je n’ai aucun espace pour écrire, dans l’onglet “insertion” j’ai le choix entre la création d’un formulaire ou de modules (de macros ?), mais rien qui ressemble à la feuille de code de mdo100. Quand je vous disais que j’étais nulle pour les macros! :sob: . Pourriez vous encore une fois venir à mon secours ?

Un grand merci et un beau WE à vous.

Osis

sos excel.xlsx (9.76 KB)


#10

Bonsoir,

je vous remercie de votre message. Votre solution est intéressante, mais ne sera pas vraiment utilisable dans mon cas, car j’ai également de nombreuse de données (en provenance d’autres tables Excel) que j’introduis par copié-collé.

Merci du temps que vous avez bien voulu me consacrer.

Bonne soirée et bon WE

Osis


#11

Bonjour @osis,

Pas de soucis et merci pour ton explication, j’ai récupéré le fichier que tu as joins à ton dernier message, je m’en occuperais dans la soirée, car là, je dois m’absenter une bonne partie de la journée pour accompagner un ami vers sa dernière demeure.

Donc à plus tard.
Cordialement.


#12

Bonsoir @osis,

Donc de ce que j’ai compris, tu veux les colonnes “C & H” en majuscule et “D & F” en Nom Propre le tout automatisé.

Voici ma proposition dans la fichier joint:

D’abord le code VBA différent de celui proposé afin de corriger les “erreurs” dans la Feuil1:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim nMnP As Range, nCell As Range

Application.EnableEvents = False
Application.ScreenUpdating = False

    Set nMnP = Intersect(Target, Columns("C"))
        If Not nMnP Is Nothing Then
            For Each nCell In nMnP
                nCell = UCase(nCell)
            Next nCell
        End If
        
    Set nMnP = Intersect(Target, Columns("H"))
        If Not nMnP Is Nothing Then
            For Each nCell In nMnP
                nCell = UCase(nCell)
            Next nCell
        End If
        
    Set nMnP = Intersect(Target, Columns("D"))
        If Not nMnP Is Nothing Then
            For Each nCell In nMnP
                nCell = Application.WorksheetFunction.Proper(nCell)
            Next nCell
        End If
        
     Set nMnP = Intersect(Target, Columns("F"))
        If Not nMnP Is Nothing Then
            For Each nCell In nMnP
                nCell = Application.WorksheetFunction.Proper(nCell)
            Next nCell
        End If
           
Application.EnableEvents = True

End Sub

Pour voir le code suivre la procédure dans l’image ci-dessous:

J’ai aussi fait des tests de copier/coller et par formules, cela n’a pas posé de problème, donc fait des tests de ton côté.

Fichier en retour ICI==> osis V2.xlsm (18,1 Ko)

Cordialement.


#13

Bonjour mdo100,

Tu as très bien saisi et ça marche !! Super !! Mille mercis ! Tu es un génie ! Je ne sais comment te remercier ! Dans un premier temps je vais “bêtement” utiliser ton code, mais je vais tenter de le comprendre, même si cela doit me prendre 2 mois !

Je te souhaite déjà de joyeuses Fêtes et plein de bonnes choses pour 2018.

Un très beau dimanche à toi et merci encore,

Bàt,

Osis


#14

Bonjour @osis,

Et bien tout simplement en n’oubliant pas de cliquer sur le petit :white_check_mark: sous la solution pour la valider.

À toi également.
Cordialement.