première lettre de chaque mot

xpxpplus

XLDnaute Junior
Salut a vous tous, encore moi...
j'ai déja essayer avec NomPropre, il met la première lettre en majuscule et ca c'est ok, mais il me remet le mot en entier, mais j'aimerai avoir seulement la Première lettre de chaque mot de la cellule ex :

camion bleu donnerai CB
vélo rouge pale donnerai VRP
auto verte donnerai AV
ect....

en avance merci

Marcmarc
 

Luki

XLDnaute Accro
Re : première lettre de chaque mot

Salut,

Je te propose une fonction personnalisée, à coller dans un module vba standard, puis dans excel : insertion /fonction/ personnalisée.

Code:
 Function PremLettre(Texte As String) As String
Dim i%
Dim Str$

    Application.Volatile
    Str = Mid(Texte, 1, 1)
    For i = 2 To Len(Texte)
        If Mid(Texte, i - 1, 1) = " " Then Str = Str & Mid(Texte, i, 1)
    Next i
    PremLettre = Str
End Function

Vois si ça te va.


Edition:
Je pense que ça demande à être affiné pour gérer les cas particuliers (espaces multiples par ex)
Tu nous diras s'il faut aller plus loin.

 

Pièces jointes

  • Premlettre.xls
    21.5 KB · Affichages: 178
Dernière édition:

Luki

XLDnaute Accro
Re : première lettre de chaque mot

Re,

Version corrigée pour gérer les espaces multiples:

Code:
Function PremLettre(Texte As String) As String
    Dim i%
    Dim Str$
    
    Application.Volatile
    Str = Mid(Texte, 1, 1)
    For i = 2 To Len(Texte)
        If Mid(Texte, i - 1, 1) = " " And Mid(Texte, i, 1) <> " " Then Str = Str & Mid(Texte, i, 1)
    Next i
    PremLettre = Str
End Function

Bonne soirée
 

Luki

XLDnaute Accro
Re : première lettre de chaque mot

Re,

je viens de relire ton post, alors recorrection pour afficher le résultat en majuscules:
Code:
Function PremLettre(Texte As String) As String
    Dim i%
    Dim Str$
    
    Application.Volatile
    Str = Mid(Texte, 1, 1)
    For i = 2 To Len(Texte)
        If Mid(Texte, i - 1, 1) = " " And Mid(Texte, i, 1) <> " " Then Str = Str & Mid(Texte, i, 1)
    Next i
    PremLettre = [COLOR=Red]UCase[/COLOR](Str)
End Function

A te lire
 

nat54

XLDnaute Barbatruc
Re : première lettre de chaque mot

Bonjour,

Il doit y avoir moyen de le faire avec de 'simples' formules et non en VB
J'ai réussi quand il y a 2 mots, je me suis arrêtée là..
 

Pièces jointes

  • Classeur1.xls
    14 KB · Affichages: 238
  • Classeur1.xls
    14 KB · Affichages: 241
  • Classeur1.xls
    14 KB · Affichages: 262

Luki

XLDnaute Accro
Re : première lettre de chaque mot

Nat,
Ton exemple : :D !!!!! MDR!!!

C'est sûr que ce doit être possible, avec 10 feuilles xl, 3 PC en réseau, 10 litres café et 3 flacons de collyre! (c'est vrai, je ne suis pas formuliste, ça se voit?). A moins qu'un des super spécialiste trouve une solution plus courte...

Mais pourquoi se priver d'une fonction personnalisée (c'est une formule au final) si ça peut simplifier les choses?

Si c'est pour le défi, d'accord. Sinon,...... :rolleyes:

Bonne journée à toi.
 

Hervé

XLDnaute Barbatruc
Re : première lettre de chaque mot

bonjour :)

une autre syntaxe vba, bien moins digeste que la procédure de l'ami luki.

Code:
Public Function premlettre2(cellule As Range) As String
Dim i As Integer

For i = 0 To UBound(Split(cellule, " "))
    premlettre2 = UCase(premlettre2 & Left(Split(cellule, " ")(i), 1))
Next i

End Function

salut
 

nat54

XLDnaute Barbatruc
Re : première lettre de chaque mot

Luki à dit:
Nat,
Ton exemple : :D !!!!! MDR!!!

C'est sûr que ce doit être possible, avec 10 feuilles xl, 3 PC en réseau, 10 litres café et 3 flacons de collyre! (c'est vrai, je ne suis pas formuliste, ça se voit?). A moins qu'un des super spécialiste trouve une solution plus courte...

Mais pourquoi se priver d'une fonction personnalisée (c'est une formule au final) si ça peut simplifier les choses?

Si c'est pour le défi, d'accord. Sinon,...... :rolleyes:

Bonne journée à toi.

Oui c'était un pti défi ... :p
J'aurais jamais trouvé ta fonction par exemple.
d'ailleurs je ne la comprends pô..

et puis masquer les colonnes ca existe :D
 

Luki

XLDnaute Accro
Re : première lettre de chaque mot

Pour Nat, qui comprends pô.... ( et ceusses qui veulent)

En Pj, les deux dernières fonctions proposées avec explications de texte en commentaires.

Merci Hervé, jai découvert "split" que je ne connaissais pas.

Bonne journée
 

Pièces jointes

  • ExplicationsPourNat.xls
    27 KB · Affichages: 219

Hervé

XLDnaute Barbatruc
Re : première lettre de chaque mot

re

merci luki pour l'exemple.

faut que j'arrete de minimiser les codes, ca devient incompréhensible.

donc, le meme code un peu plus etoffé :

Code:
Function PREM_LETTRES2(cellule As Range) As String
Dim tablo, element
Dim texte As String

'crée un tablo variant comportant toutes les sous chaines de la valeur de
'cellule séparées par un espace
tablo = Split(cellule, " ")

'boucle sur chaque élément du tablo
For Each element In tablo
    'extrait le premier caractere à gauche de cette élément
    'et concatene avec le texte
    texte = texte & Left(element, 1)
Next element

'renvoi du texte à la fonction
PREM_LETTRES2 = UCase(texte)
End Function
salut
 

jipi06

XLDnaute Junior
Re : première lettre de chaque mot

Bonjour à tous, je reprends ce fil car j'ai un problème voisin mais un peu plus complexe :
j'ai une colonne A avec des adresses de ce type :
3 RUE DE LA POISSONNERIE

J'applique dessus une formule type NomPropre() : résultat en colonne B
3 Rue De La Poissonnerie

En fait je veux obtenir :
3 Rue de la Poissonerie :) :)


Merci à tous de votre aide.

A+
 

Hervé

XLDnaute Barbatruc
Re : première lettre de chaque mot

bonjour

on pourrais imaginer faire un tableau des mots à exclure, exemple en piece jointe.

Code:
Sub Bouton1_QuandClic()
Dim c As Range
Dim i As Byte
Dim tablo, aexclur

aexclur = Array("de", "du", "la", "des")

For Each c In Range("a1:a" & Range("a65536").End(xlUp).Row)
    tablo = Split(c, " ")
    For i = 1 To UBound(tablo)
        If Not IsError(Application.Match(tablo(i), aexclur, 0)) Then
           tablo(i) = LCase(tablo(i))
        Else
            tablo(i) = Application.Proper(tablo(i))
        End If
    Next i
    c.Offset(0, 1) = Join(tablo, " ")
Next c

End Sub

salut :)
 

Pièces jointes

  • Classeur3.zip
    7.9 KB · Affichages: 94
  • Classeur3.zip
    7.9 KB · Affichages: 77
  • Classeur3.zip
    7.9 KB · Affichages: 86

Discussions similaires

Statistiques des forums

Discussions
312 415
Messages
2 088 236
Membres
103 777
dernier inscrit
ddyyff