[Excel] Macro majuscule lettre initial
Résolu
Simon
-
krystof84 -
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 ;)
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
-
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 -
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 -
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. -
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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