Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

dionys0s

XLDnaute Impliqué
Bonjour le forum

j'ai dans une cellule des nombres séparés par une virgule.
Pour quatre nombres inscrits, j'ai donc trois virgules dans ma formule

J'aimerais pouvoir extraire le nième nombre de ma chaîne de caractère en fonction de l'index dans un tableau d'un renseignement saisi ailleurs (je sais déjà récupérer l'index avec EQUIV).
C'est à dire que si ma cellule contient '23,13,102,9 et que l'index renvoyé par ma saisie est 3, alors je voudrais extraire 102 de ma chaîne de caractère.

Je ne suis pas certain d'être ultra clair, ce n'est pas évident à formuler, mais mon fichier exemple est simple et facile je pense.

D'avance merci pour votre aide :cool:
 

Pièces jointes

  • Exemple dionys0s.xlsm
    33.3 KB · Affichages: 60

dionys0s

XLDnaute Impliqué
Re : Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

Re le forum


alors j'ai trouvé une solution par formule :

Code:
=STXT($A$3;SIERREUR(CHERCHE("µ";SUBSTITUE($A$3;",";"µ";EQUIV($D$3;$A$7:$A$11;0)-1);1)+1;1);SIERREUR(CHERCHE("µ";SUBSTITUE($A$3;",";"µ";EQUIV($D$3;$A$7:$A$11;0));1)-SIERREUR(CHERCHE("µ";SUBSTITUE($A$3;",";"µ";EQUIV($D$3;$A$7:$A$11;0)-1);1)+1;1);NBCAR($A$3)))

C'est pas ultra digeste, mais ça marche. Si vous trouvez mieux, n'hésitez pas ^_^
La démarche de la formule est détaillée en PJ.

Bonne journée tout le monde !
 

Pièces jointes

  • Extraction de chaîne par formule.xlsm
    31.5 KB · Affichages: 38

JBOBO

XLDnaute Accro
Re : Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

Bonjour,

A tester mais de toute façon la formule n'est pas plus digeste que la tienne :
=SI(D4=4;CNUM(STXT(A3;CHERCHE("-";SUBSTITUE(A3;",";"-";D4-1);1)+1;NBCAR(A3)));SI(D4=1;CNUM(STXT(A3;1;CHERCHE(",";A3;1)-1));CNUM(STXT((SUBSTITUE(SUBSTITUE(A3;",";"+";D4-1);",";"-";D4-1));(CHERCHE("+";(SUBSTITUE(SUBSTITUE(A3;",";"+";D4-1);",";"-";D4-1));1)+1);(CHERCHE("-";(SUBSTITUE(SUBSTITUE(A3;",";"+";D4-1);",";"-";D4-1));1))-(CHERCHE("+";(SUBSTITUE(SUBSTITUE(A3;",";"+";D4-1);",";"-";D4-1));1)+1)))))
 

Dranreb

XLDnaute Barbatruc
Re : Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

Bonjour.
"Par formule" n'impliquant pas "sans VBA" je trouverais ceci plus digeste :
VB:
Function ParSplit(ByVal Z As String, ByVal N As Long) As String
ParSplit = Split(Z, ",")(N - 1)
End Function
Code:
=ParSplit($D$3;$D$4)
Si D4 est bien le numéro d'ordre de la sous-chaine (pas évident pour moi de le discerner dans la formule)
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

Bonjour Dranreb

Très bonne idée ! Du coup j'ai essayé de développer une fonction VBA qui renvoit un Range, et ça marche, sauf que je veux utiliser ce range pour définir une liste de validation, mais impossible de valider ma formule VBA dans l'assistant liste de validation. Même résultat avec une fonction string qui concaténerait des valeurs. Aurais-tu une idée ?
 

Dranreb

XLDnaute Barbatruc
Re : Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

Pourrai-je voir c'est essai, je n'y vois pas très clair. Et il faudrait des tests parce que ce genre de contexte n'est pas évident pour moi non plus. Mais une fonction peut aussi retourner un tableau. Mettre As Variant() derrière.
 

R@chid

XLDnaute Barbatruc
Supporter XLD
Re : Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

Bonsoir @ tous,
Code:
=STXT(A3;TROUVE("*";SUBSTITUE(","&A3;",";"*";EQUIV(D3;A7:A10;0)));TROUVE("*";SUBSTITUE(","&A3&",";",";"*";EQUIV(D3;A7:A10;0)+1))-TROUVE("*";SUBSTITUE(","&A3;",";"*";EQUIV(D3;A7:A10;0)))-1)*1
@ + +
 

dionys0s

XLDnaute Impliqué
Re : Par formule : isoler une chaîne de caractères en fonction d'une valeur saisie

Bonjour Rachid, bonjour le forum

merci pour ton aide ! Ta formule est sensiblement plus courte que la mienne, ça va peut-être m'aider pour traiter mon problème ^^
 

Discussions similaires

Statistiques des forums

Discussions
314 619
Messages
2 111 211
Membres
111 068
dernier inscrit
Lirije