[Excel] Macro majuscule lettre initial

Résolu
Bonjours à tous,

J'ai vu beaucoup de macro pour formater les polices tout en majuscule ou tout en minuscule, mais aucune ne fait mon bonheur à 100%. Voici le problème, j'ai des cellule excel qui contiennent tous plusieurs lignes chacune en faisant alt+entrée...Je voudrait formater le texte de ces cellules en minuscule mais que la première lettre de chaque ligne soit en majuscule...

Quelqu'un est assez fort pour m'aider ?

Merci d'avance ;)

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour je cherche a faire un macro qui me premaitrai pour chaque mot plus long que 4 caracteres mettre la premiere lettre en Majuscule et les suivante en minuscules.

    Ex:

    YAMAHA YFS 200 BLASTER
    deviendrai
    Yamaha YFS 200 Blaster

    et non pas

    Yamaha yfs 200 blaster

    Je vous remercie par avance

    Cordialement
    1. J'ai pas testé mais je pense que la fonction PROPER( ) devrait pouvoir t'aider
    2. @deusSalut,
      j'ai essayé la fonction PROPER que tu propose sur le site, mais ca ne marche pas -> il s'agit de la meme structure qu'une fonction nompropre, ou concatener, Non? (est une fonction pour exel parametré en anglais?)
      Merci
      a+
  2. Bonjour,

    voici un exemple :

    Sub Transforme()
    
        Dim Valeur As String
        Dim Plage, Cellule As Range
        
        ' Ici spécifier la plage à couvrir !
        Set Plage = Range("A1:C3")
        
        For Each Cellule In Plage
            Valeur = Mid(Cellule.Value, 2)
            Valeur = LCase(Valeur)
            Valeur = UCase(Mid(Cellule.Value, 1, 1)) & Valeur
            Cellule.Value = Valeur
        Next Cellule
    
    End Sub
    


    Lupin
    1. Modérateur
      Salut Lupin et Simon,

      contiennent tous plusieurs lignes chacune en faisant alt+entrée
      normalement c'est chr(10)

      la première lettre de chaque ligne soit en majuscule...

      Je ne crois pas que c'est ça qu'il veut simon.

      Avec ton code si dans la cells(1,1) j'ai

      ccm
      simon
      lupin
      armojax
      jdvo
      (donc passage à la ligne avec Alt+Enter)
      j'obtiens

      Ccm
      simon
      lupin
      armojax
      jdvo


      Moi j'ai compris qu'il veut obtenir

      Ccm
      Simon
      Lupin
      Armojax
      Jdvo


      Je ne suis pas un expert en VBA, donc sûrement toi ou Jdvo ou Armojax, vous trouverez une solution meilleure.
      Sub maj()
      Dim l As Long, i As Long
      Dim sTmp As String, sRes As String, sStr As String
      
      sStr = Cells(1, 1)
      l = Len(sStr)
      For i = 1 To l
          sRes = sRes & Mid(sStr, i, 1)
              If (Mid(sStr, i, 1) = Chr(10)) Then
                  sRes = Mid(sRes, 1, i) & UCase(Mid(sStr, i + 1, 1))
                  i = i + 1
              End If
      Next
      Cells(1, 1) = UCase(Left(sRes, 1)) & Mid(sRes, 2, l + 1)
      End Sub
      lami20j

      P.S. La macro mets en forme la cells(1,1) uniquement. Il faut adapter en fonction des besoins.
      1. Modérateur
        Re,

        Petites corrections :

        1.
        La variable sTmp ne sers à rien (c'était pour tester)

        Au lieu de
        Dim sTmp As String, sRes As String, sStr As String
        Ecrire
        Dim sRes As String, sStr As String

        2.
        Au lieu de jdvo

        Lire jvdo

        Désolé.

        lami20j
        1. Bonjour,

          merci lamivinj , je n'avais pas fais la nuance. Toute les solutions sont bonnes si le travail est fait, alors voici j'ai reconstruis une autre version avec l'explication du [ Set Plage = ] ainsi que la structure [ For Each Cellule In Plage ], le inputbox bien sur ..., et l'aide de lamivinj :-)

          Sub Transforme()
              
              Dim Cellule As Range, Plage As Range
              Dim sStr As String, sRes As String
              Dim Cmpt As Long, Ptr As Long
             
              Set Plage = Application.InputBox( _
                      "Sélectionner la plage à couvrir", _
                      "Plage:", _
                      ActiveWindow.Selection.Address(0, 0), _
                      Type:=8)
              
              If Not (Plage Is Nothing) Then
                  For Each Cellule In Plage
                      sStr = UCase(Left(Cellule.Value, 1)) & _
                              LCase(Mid(Cellule.Value, 2))
                      Ptr = Len(sStr)
                      For Cmpt = 1 To Ptr
                          sRes = Mid(sStr, Cmpt, 1)
                          If (sRes = Chr(10)) Then
                              sStr = (Mid(sStr, 1, Cmpt)) & _
                                      UCase(Mid(sStr, Cmpt + 1, 1)) & _
                                      Mid(sStr, Cmpt + 2)
                          End If
                      Next Cmpt
                      Cellule.Value = sStr
                  Next Cellule
              End If
          
          End Sub
          


          Lupin