Imposer une casse à une plage de cellule

Bonjour,

Nous sommes plusieurs à travailler sur un fichier et le tableau est horrible car il y a à la fois qui tape tout en majuscule, d'autre en minuscule et d'autre qui font un compromis.

Sur une plage A1:B10 par exemple, comment lorsque que l'on saisie MOT COMPOSE on peut obtenir Mot Compose ?

Je n'arrive pas à le faire avec une mise en forme conditionnelle...

Bonjour Fred35,

Dans un premier temps, tu peux utiliser la fonction : NOMPROPRE()

A+

Bonjour,

Avec du VBA ?

Coller le code dans le module de la feuille...

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [A1:B10]) Is Nothing Then
        Application.EnableEvents = False
        Target.Value = UCase(Left(Target.Value, 1)) & LCase(Mid(Target.Value, 2))
        Application.EnableEvents = True
    End If
End Sub

A+

Merci pour vos réponses

BrunoM45 a écrit :

Bonjour Fred35,

Dans un premier temps, tu peux utiliser la fonction : NOMPROPRE()

A+

Sauf erreur de ma part pour utiliser la fonction NOMPROPRE()

je suis obligé de mettre en C1:D10 =NOMPROPRE(C1) etc...., mais le but n'est pas de recréer d'autres colonnes.

Le formatage doit être réalisé dans les cellules ou on tape.

Pour le VBA, je vais essayer mais il me semble que les macros sont désactivé, un choix de l'entreprise...


Dans le test en VBA ça fonctionne presque que je souhaite, merci

Mais, au lieu d'avoir "Mot Composé", j'obtient "Mot composé"

La majuscule doit être pour la première lettre de chaque mot qui compose le mot.

Re,

Sur l'idée de Lermite que je salue, mais en plus simple (utilisation de la fonction NOMPROPRE())

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, [A1:B10]) Is Nothing Then
    Application.EnableEvents = False
    Target.Value = Application.Evaluate("PROPER(""" & Target.Value & """)")
    Application.EnableEvents = True
  End If
End Sub

A+

EDIT :

Bonjour Bruno.

Le code de Bruno étant plus fonctionnel j'ai supprimé celui-ci.

J'avais pensé à cette fonction mais je ne suis pas parvenu à l'implémenter

A+

BrunoM45 a écrit :

Re,

Sur l'idée de Lermite que je salue, mais en plus simple (utilisation de la fonction NOMPROPRE())

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, [A1:B10]) Is Nothing Then
    Application.EnableEvents = False
    Target.Value = Application.Evaluate("PROPER(""" & Target.Value & """)")
    Application.EnableEvents = True
  End If
End Sub

A+

Merci, ça a fonctionné, mais quand j'ai supprimé les données de test j'ai eu une erreur code 13.

        Target.Value = Application.Evaluate("PROPER(""" & Target.Value & """)")

Votre macro ne permet pas de supprimer si quelqu'un fait une erreur ?

Re,

Il faut ajouter 2 tests

Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si plus d'une cellule sélectionnée, on sort
 If Target.Count > 1 Then Exit Sub
  ' Si la cellule ne contient rien
 If Target.Value = "" Then Exit Sub
  ' Sinon
  ' Si la cellule modifiée se trouve dans la plage A1:B10
 If Not Intersect(Target, [A1:B10]) Is Nothing Then
    ' Comme on va modifier de nouveau la cellule
    ' empêcher les évênements de se lancer
    Application.EnableEvents = False
    ' La valeur de la cellule modifiée est égale
    ' à l'évaluation de la fonction NOMPROPRE(Cellule)
    Target.Value = Application.Evaluate("PROPER(""" & Target.Value & """)")
    ' réactiver les évènements
    Application.EnableEvents = True
  End If
End Sub

A+

Yes, ça marche super, 1000 merci, tu m'enlèves une belle épine du pied.

Je vais peut être abusé, mais pourrait tu commenter les lignes, pour que je comprenne la logique de cette macro ?

Re,

C'est fait j'ai ajouter des commentaires dans mon post précédent

A+

Rechercher des sujets similaires à "imposer casse plage"