Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 extraire les premières lettres d'une chaine de caractère

kabamel

XLDnaute Occasionnel
Salut à tous, comme dans le titre, J'ai besoin avec une fonction d'extraire les premières lettres d'une chaine dans une cellule. Mais les mots : "DES"; "DE"; "DU"; "D'"; "LES"; "LE"; "L'" et autres caractères comme "&" ne font pas partie. Par exemple : "Société d'Extraction de pétrole français" il m'envoie "SEPF". Merci pour aide.
 

Yurperqod

XLDnaute Occasionnel
Bonjour le forum

Un essai en formule avec 3 colonnes
en A1
Société d'Extraction de pétrole français
en B1
Code:
=SUBSTITUE(SUBSTITUE(A1;"d'";"");"de";"")
en C1
Code:
=MAJUSCULE(SUBSTITUE(GAUCHE(B1)&STXT(B1;TROUVE("$";SUBSTITUE(B1&"  ";" ";"$";1))+1;1)&STXT(B1;TROUVE("$";SUBSTITUE(B1&"  ";" ";"$";2))+1;1)&STXT(B1;TROUVE("$";SUBSTITUE(B1&"  ";" ";"$";3))+1;1)&STXT(B1;TROUVE("$";SUBSTITUE(B1&"  ";" ";"$";4))+1;1);" ";""))
La formule en C1 renvoie SEPF
 

Jacky67

XLDnaute Barbatruc
Salut à tous, comme dans le titre, J'ai besoin avec une fonction d'extraire les premières lettres d'une chaine dans une cellule.
Bonjour,
A tester...une fonction perso...
VB:
Function Sigle(Y As Range) As String
    Dim X As String, A As String, i As Long
    X = Y.Value
    X = Replace(X, " du ", " ")
    X = Replace(X, "Du ", " ")
    X = Replace(X, " de ", " ")
    X = Replace(X, "De ", "")
    X = Replace(X, " des ", " ")
    X = Replace(X, "Des ", " ")
    X = Replace(X, " les ", " ")
    X = Replace(X, "Les ", " ")
    X = Replace(X, " le ", " ")
    X = Replace(X, "Le ", " ")
    X = Replace(X, " la ", " ")
    X = Replace(X, "La ", " ")
    X = Replace(X, " l'", " ")
    X = Replace(X, "L'", "")
    X = Replace(X, " d'", " ")
    X = Replace(X, "D'", "")
    X = Replace(X, "$", "")
    X = Replace(X, "@", "")
    X = Replace(X, "&", "")
    If Left(X, 1) <> " " Then X = " " & X
    X = Replace(X, "££", "£")
    X = Replace(X, " ", "£")

    For i = 1 To Len(X)
        If Mid(X, i, 1) = "£" Then A = A & Mid(X, i + 1, 1)
    Next
    Sigle = UCase(A)
End Function
Liste non exhaustive

Un peu plus....en PJ
Re...PJ remplacée
 

Pièces jointes

  • kabamel sigle v2.xlsm
    18.6 KB · Affichages: 55
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Bonjour Modeste
Manque encore le "Ou"
Merci de m'avoir rappeler la fonction "Trim()" que j'ai tendance à oublier.
il conviendra toutefois de différencier la fonction VBA TRIM de la WorkSheetFunction.Trim qui ont des comportements différents.
VBA Trim : seule suppression des espaces précédents et suivants
WSF.Trim : suppression des espaces précédents et suivants + réduction à un seul des espaces redondants intérieurs

VB:
Function Sigle(Y As Range) As String
    Dim X As String, A As String, i As Long
    X = Application.Proper(Y.Value)
  ' ---------------------------------- articles , conjonctions et sigles superfétatoires
    X = Replace(X, "$", " ")
    X = Replace(X, "@", " ")
    X = Replace(X, "&", " ")
    X = Replace(X, "(", " ")
    X = Replace(X, ")", " ")
    X = Replace(X, ".", " ")
    X = Replace(X, "-", " ")
    X = Replace(X, "D'", " ")
    X = Replace(X, "Du ", " ")
    X = Replace(X, "De ", " ")
    X = Replace(X, "Des ", " ")
    X = Replace(X, "Les ", " ")
    X = Replace(X, "Le ", " ")
    X = Replace(X, "La ", " ")
    X = Replace(X, "L'", " ")
    X = Replace(X, "Et ", " ")
    X = Replace(X, " Of ", " ")
    X = Replace(X, " Pour ", " ")
    X = Replace(X, " À ", " ")
    X = Replace(X, " Au ", " ")
    X = Replace(X, " Aux ", " ")
    X = Replace(X, " En ", " ")
    X = Replace(X, " Ou ", " ")
    X = Replace(X, " Un ", " ")
    X = Replace(X, " Une ", " ")
    X = Replace(X, " Par ", " ")
    ' ----------------------------suppression espaces redondants
    X = " " & WorksheetFunction.Trim(X)
    ' ----------------------------recupération initiales
    For i = 1 To Len(X)
        If Mid(X, i, 1) = " " Then A = A & Mid(X, i + 1, 1)
    Next
    Sigle = SansAccent(A)
End Function
Function SansAccent(texte)
'Définition des variables
     avec = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç_"
     sans = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc "
     tmp = texte
'Boucle de traitement
     For i = 1 To Len(tmp)
         pot = InStr(avec, Mid(tmp, i, 1))
         If pot > 0 Then Mid(tmp, i, 1) = Mid(sans, pot, 1)
     Next i
     If tmp = 0 Then tmp = ""
     SansAccent = tmp
End Function
 

Jacky67

XLDnaute Barbatruc
RE...
Pas mal tout y est...presque, reste les chiffres
A quoi sert ,
If TMP = 0 Then TMP = ""
?
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir à tous

Pourquoi ne pas utiliser un tableau Array , moins de remplacement à faire non?



VB:
Txt = Array("$", "@", "&", "/", "\", "(", ")", ".", "-", " D' ",  _
" Du ", " De ", " Des ", " L' ",  " Le ", " Les ", " La ", " Et ",  _
" Ou ", " Of ", " Pour ", " À ", " Au ", " Aux ", " En ",  "pour", "l'")
 
  For k = LBound(Txt) To UBound(Txt)
  X = Replace(X, Txt(k), " ")
  Next k
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…