Extraire les deux premières lettres d'une chaîne de mots [Résolu/Fermé]

Signaler
-
Messages postés
5524
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
21 octobre 2020
-
Bonjour à tous,

J'ai besoin d'aide car je bute sur la dernière étape de ma formule excel.
Je vous explique, je cherche a créer une référence produit en automatique. La désignation possède de 1 à 4 mots. Lorsqu'il n'y a qu'un seul mot dans la désignation, la formule doit donner les 4 premières lettre du mot unique. Lorsque la désignation possède 2 mots et plus, elle doit donner les 2 premières lettres de chaque mot qui compose la désignation.

Exemple (au pif)
Désignation 1 : Moissonneuse => Ref : MOIS
Désignation 2 : Moissonneuse Batteuse => Ref : MOBA
Désignation 3 : Moissonneuse Batteuse Faucheuse => Ref : MOBAFA

Voici ma formule :

Pour les désignations avec un seul mot (formule ok)
=SI((NBCAR(D2)-NBCAR(SUBSTITUE(D2;" ";""))+1)=1;(GAUCHE(D2;4));)

Formule à la suite de la première => pour les désignations avec 2 mots (formule ok)
&(SI((NBCAR(D2)-NBCAR(SUBSTITUE(D2;" ";""))+1)=2;(GAUCHE(D2;2)&STXT(D2;CHERCHE(" ";2)+1;2));))

Formule à la suite de la seconde => pour les désignations avec 3 mots (formule ok)
&(SI((NBCAR(D8526)-NBCAR(SUBSTITUE(D8526;" ";""))+1)=3;(GAUCHE(D2;2)&STXT(D2;CHERCHE(" ";D2)+1;2)&STXT(D2;(CHERCHE(" ";D2;CHERCHE(" ";D2;1)+1))+1;2));))

La formule que j'ai pour les désignations à 4 mots ne fonctionne pas, quelqu'un aurait une idée pour m'aider?

Merci d'avance, c'est très important pour moi



8 réponses

Messages postés
2811
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
25 octobre 2020
384
Bonjour,

Un essai

https://www.cjoint.com/c/GBvsThyRzpi

Crdmt
Messages postés
25433
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
26 octobre 2020
5 552
Bonsoir
essayez celle ci qui semble, sauf erreur donner ce que vous voulez:
=MAJUSCULE(GAUCHE(A1;2)&SIERREUR(STXT(A1;TROUVE("/";SUBSTITUE(A1;" ";"/";1))+1;2);"")&SIERREUR(STXT(A1;TROUVE("/";SUBSTITUE(A1;" ";"/";2))+1;2);"")&SIERREUR(STXT(A1;TROUVE("/";SUBSTITUE(A1;" ";"/";3))+1;2);""))

pour admettre plus de mots, il suffit de coller à la suite des items &SIERREUR(........);"") en changeant le N° de rang du " " à remplacer dans le code substitue
SUBSTITUE(A1;" ";"/";1))+1;2)
SUBSTITUE(A1;" ";"/";2))+1;2)
SUBSTITUE(A1;" ";"/";3))+1;2)
(ne fonctionne avec SIERREUR qu'à partir d'Excel 2007)


crdlmnt



La qualité de la réponse dépend surtout de la clarté de la question, merci!
Messages postés
5524
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
21 octobre 2020
500
Bonjour Claire

Essayer cette formule

=SI(A1="";"";SI(SIERREUR(TROUVE(" ";A1;1);"")="";GAUCHE(A1;4);SIERREUR(SI(TROUVE("+";SUBSTITUE(SUBSTITUE(SUBSTITUE(A1;" ";"+";1);" ";"-";1);" ";"/";1));GAUCHE(A1;2);0);"")&SIERREUR(STXT(A1;TROUVE("+";SUBSTITUE(SUBSTITUE(SUBSTITUE(A1;" ";"+";1);" ";"-";1);" ";"/";1))+1;2);"")&SIERREUR(STXT(A1;TROUVE("-";SUBSTITUE(SUBSTITUE(SUBSTITUE(A1;" ";"+";1);" ";"-";1);" ";"/";1))+1;2);"")&SIERREUR(STXT(A1;TROUVE("/";SUBSTITUE(SUBSTITUE(SUBSTITUE(A1;" ";"+";1);" ";"-";1);" ";"/";1))+1;2);"")))

le texte est en A1 dans ma formule
Messages postés
25433
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
26 octobre 2020
5 552
Bonsoir Philou

simplement pour info, et bien que votre proposition soit correcte, mais ça peut servir:
vous pouvez choisir quel est le rang du blanc que vous voulez remplacer simplement en plaçant son N° d'ordre dans le texte:
SUBSTITUE(texte;texte cherché; nouveau texte;rang)

si rang =1 SUBSTITUE remplace le 1° blanc, si rang =2 le 2° blanc, =3, le 3° blanc etc...
ainsi on évite d'empiler des SUBSTITUE l'un dans l'autre, voir mon message 3, la formule est nettement plus lègère.

bien cordialement
Messages postés
5524
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
21 octobre 2020
500 >
Messages postés
25433
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
26 octobre 2020

Merci Vaucluse pour cette information, je vais tester de ce pas pour bien comprendre et j'espère m'en souvenir pour l'utiliser dans le futur
Merci encore une fois, pour votre aide.

On apprend toujours de ses erreurs
Messages postés
5524
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
21 octobre 2020
500 >
Messages postés
5524
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
21 octobre 2020

Pour Vaucluse dans mon cas c'est toujours le rang 1,puisse que le premier devient "+" pour le substitue suivant c'est à nouveau le premier
Ou alors expliquez-moi ?
Messages postés
25433
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
26 octobre 2020
5 552 >
Messages postés
5524
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
21 octobre 2020

C'est le même principe, Philou, et ça ne change rien à votre solution.. sauf qu'avec ça, la formule est nettement plus courte_et donc plus légère si un grand champ est à traiter), puisque on ne substitue qu'une fois à chaque texte à sortir

=MAJUSCULE(GAUCHE(A1;2)&SIERREUR(STXT(A1;TROUVE("/";SUBSTITUE(A1;" ";"/";1))+1;2);"")&SIERREUR(STXT(A1;TROUVE("/";SUBSTITUE(A1;" ";"/";2))+1;2);"")&SIERREUR(STXT(A1;TROUVE("/";SUBSTITUE(A1;" ";"/";3))+1;2);""))

(soit trois SUBSTITUE au lieu de 12)
crdlmnt
Messages postés
5524
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
21 octobre 2020
500 >
Messages postés
25433
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
26 octobre 2020

Merci Vaucluse

J'ai compris il ne faut pas les imbriquer mais les relier par &
Maintenant je vois l' utilité du rang
Merci mille fois

C'est au pied du mur que l'on voit le maçon
Merci à tous pour vos réponses, c'est exactement ce que je cherchais et cela va beaucoup m'aider!

Bonne soirée

Claire
Bonjour

voila une function en vba
http://www.cjoint.com/c/GBvtJSac8R4

A+
Maurice
Messages postés
12788
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
25 octobre 2020
2 048
Bonsoir à tous

Et une autre possibilité avec une fonction personnalisée à mettre dans un module de l'éditeur VBA (ALT+F11 pour ouvrir Editeur puis Inserer - Module et copier-coller la fonction suivante dans la page blanche avant de refermer l'éditeur
Function reference(cel As Range)
'si mot unique (pas d'espace) on prend les 4 premieres lettres
If Len(cel.Value) = Len(Application.WorksheetFunction.Substitute(cel.Value, " ", "")) Then
reference = Left(cel.Value, 4)
'sinon on découpe la chaine en fonction des espaces
Else
tableau = Split(cel.Value, " ")
     'boucle sur le tableau et on concatene les 2 premoeres lettres de chaque item
    For i = 0 To UBound(tableau)
    reference = reference & Left(tableau(i), 2)
    Next
End If
'enfin le resultat est mis en majuscules
reference = UCase(reference)
End Function

La fonction s'utilise alors comme n'importe quelle fonction selon la syntaxe :
= reference(adresse produit à référencer) par ex reference(A1)

Cdlmnt
Via
Messages postés
17293
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
24 octobre 2020
4 306
Bonsoir le fil,
j'arrive après la bataille avec une autre approche qui peut servir

=SI(NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";""))+1=3;GAUCHE(DROITE(A1;NBCAR(A1)-TROUVE(" ";A1;TROUVE(" ";A1)+1));2);SI(NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";""))+1=2;GAUCHE(A1;2)&GAUCHE(SUPPRESPACE(STXT(A1;TROUVE(" ";A1;TROUVE(" ";A1;1)-1);20));2);SI(NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";""))+1=1;GAUCHE(A1;4);"")))
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
21
En faite faut compter les espace vides je penses