XL 2010 Mettre la première lettre d'une ligne en majuscule.

oderoaldes

XLDnaute Junior
Bonjour à toutes et à tous,
Je me tourne vers vous car je n'arrive pas à trouver la solution au problème suivant :
Dans un fichier Excel j'ai des désignation produits par cellule de type Exemple cellule A1
dimension 150x40x20 cm
hauteur 155 cm
support alu
verre dépoli
Je voudrai mettre la première lettre de chaque ligne en majuscule et cerise sur le gateau rajouter un point en fin de ligne.
J'ai trouvé pas mal de chose dont une formule : CONCATENER(MAJUSCULE(GAUCHE(A15;1));MINUSCULE(DROITE(A15;NBCAR(A15)-1))) ou un code vba
Sub essai()
For Each c In Selection
a = Split(c.Text, ".")
For i = LBound(a) To UBound(a) - 1
a(i) = Trim(a(i))
Mid(a(i), 1, 1) = UCase(Mid(a(i), 1, 1))
If i > 0 Then a(i) = " " & a(i)
Next i
tmp = Join(a, ".")
c.Value = tmp
Next c
End Sub
mais pour celui là même en ajoutant un point en fin de ligne, cela ne fonctionne que sur la première ligne de la cellule.
J'ai tenté aussi de le transformer dans word ou notepad++ mais cela me créé autant de lignes que lignes de texte, le contenu n'est dons plus dans une cellule.
J'espère que c'est clair.
Merci par avance de votre aide.
 
Solution
Merci à tous, je dois m'absenter pour la journée mais je vais suivre l'avancée de vos réflexions. Vu le niveau (pas le mien) il doit être possible de mixer la macro de Sylvanu qui fonctionne très bien sur les cellules à plusieurs lignes et sur une plage avec le menu contextuel de Riton00,simplifié par PatrickT.
A plus tard

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir tout le monde,
A essayer, avec chaîne à traiter en A1 :
VB:
Sub MiseEnForme()
    Dim retour As String, chaine As String, i As Integer
    retour = ""
    chaine = [A1]
    Tablo = Split(chaine, Chr(10))
    Taille = UBound(Tablo)
    For i = 0 To Taille
        retour = retour & UCase(Left(Tablo(i), 1)) & LCase(Right(Tablo(i), Len(Tablo(i)) - 1)) & "." & Chr(10)
    Next i
    [A1] = Left(retour, Len(retour) - 1)
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
VB:
Sub MiseEnForme()
Dim retour As String, chaine As String, i As Integer
For Each Cell In Range("A1:A25")    ' Mettre la plage désirée
    retour = ""
    chaine = Cell.Value
    Tablo = Split(chaine, Chr(10))
    Taille = UBound(Tablo)
    For i = 0 To Taille
        retour = retour & UCase(Left(Tablo(i), 1)) & LCase(Right(Tablo(i), Len(Tablo(i)) - 1)) & "." & Chr(10)
    Next i
    Cell.Value = Left(retour, Len(retour) - 1)
Next Cell
End Sub
 

riton00

XLDnaute Impliqué
Bonsoir oderoaldes, sylvanu, le forum

Si cela te tente une macro complémentaire, il suffit d'ouvrir le fichier joint en PJ et le refermer pour obtenir ce menu contextuel par le biais du clic droit
image.jpg
 

Pièces jointes

  • Menucontextuel-MAJUSCULE.xlsm
    46 KB · Affichages: 20

oderoaldes

XLDnaute Junior
Bonjour à tous et une grand merci pour votre aide.
#Sylvanu au débogage ça me donne : "Cell.Value = Left(retour, Len(retour) - 1)", mais cela n'empêche pas la macro de fonctionner.
#Riton00 : super pratique, mais cela ne fonctionne que sur la première ligne de la cellule.
Merci à vous.
 

patricktoulon

XLDnaute Barbatruc
re
bonjour riton00
j'ai simplifié
VB:
Sub LancerMaj()
ActiveCell.Value = UCase(ActiveCell.Value)
End Sub
Sub LancerMin()
ActiveCell.Value = LCase(ActiveCell.Value)
End Sub
Sub LancerMajdeb()
ActiveCell.Value = UCase(Left(ActiveCell.Value, 1)) & LCase(Mid(ActiveCell.Value, 2))
End Sub
Sub LancerMajdebmot()
ActiveCell.Value = Evaluate("proper(" & ActiveCell.Address & ")")
End Sub
Sub LancerColonneMajuscule()
ActiveCell.EntireColumn.Value = Evaluate("index(upper(" & ActiveCell.EntireColumn.Address & "),)")
End Sub
Sub LancerColonneMinuscule()
ActiveCell.EntireColumn.Value = Evaluate("index(LOWER(" & ActiveCell.EntireColumn.Address & "),)")
End Sub
Public Sub Delete()
On Error Resume Next
Application.CommandBars("Cell").Reset
End Sub

tu pourrais ajouter 2 boutons
et
VB:
Sub LancerLigneMajuscule()
ActiveCell.EntireROW.Value = Evaluate("index(upper(" & ActiveCell.Entirerow.Address & "),)")
End Sub

Sub LancerLigneMinuscule()
ActiveCell.Entirerow.Value = Evaluate("index(LOWER(" & ActiveCell.Entirerow.Address & "),)")
End Sub

;)
 
Dernière édition:

oderoaldes

XLDnaute Junior
Merci à tous, je dois m'absenter pour la journée mais je vais suivre l'avancée de vos réflexions. Vu le niveau (pas le mien) il doit être possible de mixer la macro de Sylvanu qui fonctionne très bien sur les cellules à plusieurs lignes et sur une plage avec le menu contextuel de Riton00,simplifié par PatrickT.
A plus tard
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 923
Membres
101 840
dernier inscrit
SamynoT