Macro : 1ère lettre du 1er mot en majuscule

Lencorev -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

J'utilise la fonction "nom propre" sur excel qui permet de mettre une majuscule à chaque début de mot, et je l'utilise sur toute une colonne :

Sheets("Feuil3").Range("F5").Select
ActiveCell.Value = StrConv(ActiveCell.Value, vbProperCase)

For I = 1 To 400
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = StrConv(ActiveCell.Value, vbProperCase)
Next I


Le problème c'est par exemple lorsqu'une cellule contient "inox et plastique", mon code transforme la cellule en "Inox Et Plastique" alors que je voudrais "Inox et plastique"...
Existe-il une fonction qui fait ça directement? Ou pensez vous à un autre moyen? Je sèche un peu..

Merci d'avance!

3 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    il te suffit de "majusculer" le premier caractère de ta chaine
    Public Function InitialeMajuscule(s As String) As String
    InitialeMajuscule = UCase(Left(s, 1)) & Right(s, Len(s) - 1)
    End Function


    Cdlmnt
    0
    1. Lencorev
       
      Merci beaucoup de prendre le temps de me répondre.

      J'ai essayé d'adapter votre code à mon cas et voila ce que ça donne :
      Sheets("Feuil3").Range("F5").Select
      ActiveCell.Value = UCase(Left(Sheets("Feuil3").Range("F5").Value, 1)) & Right(Sheets("Feuil3").Range("F5").Value, Len(Sheets("Feuil3").Range("F5").Value) - 1)

      For I = 5 To 402
      ActiveCell.Offset(1, 0).Select
      ActiveCell.Value = UCase(Left(Sheets("Feuil3").Range("F" & I).Value, 1)) & Right(Sheets("Feuil3").Range("F" & I).Value, Len(Sheets("Feuil3").Range("F" & I).Value) - 1)
      Next I


      Mais ce code transforme toute la colonne F5 en majuscule, je ne comprends pas pourquoi..
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    En décomposant un peu, pour "majusculer" la première lettre des "Fxx" , xx allant de 5 à 10
    For I = 5 To 10
        s = Sheets("Feuil1").Range("F" & I).Value
        s = UCase(Left(s, 1)) & Right(s, Len(s) - 1)
        Sheets("Feuil1").Range("F" & I).Value = s
    Next I

    Cdlmnt
    0
    1. Lencorev
       
      Il me met "argument ou appel de procédure incorrect" à la ligne 3 :
       s = UCase(Left(s, 1)) & Right(s, Len(s) - 1)
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Je ne sais pas comment tu utilises
    Un exemple
    http://www.cjoint.com/c/EFpooOXE5jg
    0