[Excel] Macro majuscule lettre initial

Résolu
Simon -  
 krystof84 -
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

  1. P€DR0
     
    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
    0
    1. deus Messages postés 93 Statut Membre 91
       
      J'ai pas testé mais je pense que la fonction PROPER( ) devrait pouvoir t'aider
      0
      1. krystof84 > deus Messages postés 93 Statut Membre
         
        Salut,
        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+
        0
  2. Utilisateur anonyme
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
    -1