[Excel] Macro majuscule lettre initial

Résolu/Fermé
Simon - 3 mai 2006 à 17:14
 krystof84 - 2 avril 2009 à 22:50
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 ;)
A voir également:

5 réponses

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
deus Messages postés 93 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 24 mai 2007 91
13 déc. 2006 à 17:08
J'ai pas testé mais je pense que la fonction PROPER( ) devrait pouvoir t'aider
0
krystof84 > deus Messages postés 93 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 24 mai 2007
2 avril 2009 à 22:50
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
Utilisateur anonyme
3 mai 2006 à 20:20
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
3 mai 2006 à 23:58
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
4 mai 2006 à 00:38
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
4 mai 2006 à 03:43
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