Rechercher : dans
Par :

[Excel] Macro majuscule lettre initial

Dernière réponse le 2 avr 2009 à 22:50:44 Simon, le 3 mai 2006 à 17:14:36 
 Signaler ce message aux modérateurs

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 ;)

Meilleures réponses pour « [Excel] Macro majuscule lettre initial » dans :
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...

1

Lupin.A, le 3 mai 2006 à 20:20:48

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

Répondre à Lupin.A

2

lami20j, le 3 mai 2006 à 23:58:33

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.

Répondre à lami20j

3

lami20j, le 4 mai 2006 à 00:38:37

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

Répondre à lami20j

4

Lupin.A, le 4 mai 2006 à 03:43:27

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

Répondre à Lupin.A

5

P€DR0, le 13 déc 2006 à 16:39:39

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

Répondre à P€DR0

6

deus, le 13 déc 2006 à 17:08:46

J'ai pas testé mais je pense que la fonction PROPER( ) devrait pouvoir t'aider
What Jesus can't fix tonight,
The Whisky certainly might.

Répondre à deus

7

 krystof84, le 2 avr 2009 à 22:50:44

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+

Répondre à krystof84
Collection CommentÇaMarche.net