Extraire NB d' une chaine de caractere aléatoire
Bonsoir, voici mon probleme:
Sous Excel, dans chaque ligne de la colonne A j'ai une chaine de caractere comportant un seul nombre positionne de facon aleatoire, je desire avoir seulement le nombre dans la colonne B
Petit exemple pour éclairé mon "pauvre" texte
---colonne A (fournie)---
Batiment voyageur (004)
bureau bien n° 28
301 local beta
bien n° 06 chaufferie
---colonne B (désirée)---
4
28
301
6
Merci d'avance, suivant votre solution (VBA) ou simplement excel, merci d'etre assez precis, j'ai deja parcourusde forum, sans jamais trouver de solution pour un nombre placer a different endroit dans la chaine de caractere
Salut Didier et le forum
Position du premier chiffre
=MIN(SI(ESTNUM(CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1));CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1);""))Position du dernier chiffre
=MAX(SI(ESTNUM(CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1));CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1);""))Au finale cela donne
=CNUM(STXT(A1;MIN(SI(ESTNUM(CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1));CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1);""));MAX(SI(ESTNUM(CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1));CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1);""))-MIN(SI(ESTNUM(CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1));CHERCHE({0;1;2;3;4;5;6;7;8;9};$A1);""))+1))Le CNUM peut-être supprimmer si tu veux 004 au lieu de 4,et je n'ai pas inclus de test si
deux séries de chiffre dans la colonne.
Mytå
Tout d'abord merci pour cette réponse tres rapide
J'ai constaté un petit bug qui a son importance, lorsque dans un chiffre a extraire, un nombre est present plusieurs fois, la ligne de programme n'en "prend" qu'un
exemple
suge 033, positon du premier chiffre :6 ; position du dernier chiffre 7 ( et non 8 )??
et du coup je me retrouve avec 3 au lieu de 33
Merci par avance si vous avez de quoi resoudre mon programme
Ci joint ma page excel avec les lignes qui "bug"
https://www.excel-pratique.com/~files/doc/uFA2Iextraire_un_nombre_dans_chaine_caractere.xls
Bonjour didier, salut myta,
à essayer avec une formule matricielle :
=STXT($A1;EQUIV(0;(ESTERR(STXT($A1;LIGNE(INDIRECT( "1:"&NBCAR($A1)));3)*1)*1);0);4)*1
à valider par CTRL + MAJ + ENTREE
@+
Bonjour à tous
Je vois que nous sommes nombreux à creuser..
Pour ma formule,celle-ci étant trop longue, j'en ai nommé une partie:
=CHERCHE({0;1;2;3;4;5;6;7;8;9};Feuil1!$A1) est nommé Cherche
La formule, issue de celles de Mytå, évite l'erreur lorsque le dernier caractère est répété, mais montre ses limites dès que le chiffre 9 est de nouveau intercalé entre 2 autres. Ces formules sont matricielles et à valider avec les 3 touches Ctrl+Maj+Entrée.
=STXT(STXT($A3;MIN(SI(ESTNUM(Cherche);Cherche;""));MAX(SI(ESTNUM(Cherche);Cherche;""))-MIN(SI(ESTNUM(Cherche);Cherche;""))+1);1;NBCAR(STXT($A3;MIN(SI(ESTNUM(Cherche);Cherche;""));MAX(SI(ESTNUM(Cherche);Cherche;""))-MIN(SI(ESTNUM(Cherche);Cherche;""))+1))-1)&REPT(DROITE(STXT($A3;MIN(SI(ESTNUM(Cherche);Cherche;""));MAX(SI(ESTNUM(Cherche);Cherche;""))-MIN(SI(ESTNUM(Cherche);Cherche;""))+1);1);NBCAR($A3)-NBCAR(SUBSTITUE($A3;DROITE(STXT($A3;MIN(SI(ESTNUM(Cherche);Cherche;""));MAX(SI(ESTNUM(Cherche);Cherche;""))-MIN(SI(ESTNUM(Cherche);Cherche;""))+1));"")))
colonne à droite, sans les 0 devant.
Je crains qu'il ne faille une formule tellement complexe, qu' une solution vba paraisse plus appropriée, et là, je ne suis pas dans le coup.
En rouge, les erreurs avec l'application des différentes formules.
https://www.excel-pratique.com/~files/doc/Numerique.xls
NB: Thibo, j'avais ta formule d'un précédent post, mais je n'ai pu la mettre en application.
Cordialement
re,
salut Amadeus,
En fait la formule de base est celle-ci :
=STXT($A1;EQUIV(0;(ESTERR(STXT($A1;LIGNE(INDIRECT( "1:"&NBCAR($A1)));2)*1)*1);0);3)*1
qui permet d'extraire un nombre de 0 à 99 (2 caractères maxi).
J'ai tenté de l'adapter (dans le post ci-dessus) pour 3 caractères, mais pas très probant.
Je vais y consacrer quelques neurones pour voir si on peut améliorer cette formule
@+
Salut le forum
Allons-y pour une fonction à mettre dans un module standard
Utilisation =FindNumber(A3)
Function FindNumber(Cellule As Range)
Application.Volatile
Dim X As Integer
Dim Debut As Integer
Dim Fin As Integer
For X = Len(Cellule) To 1 Step -1
If IsNumeric(Mid(Cellule, X, 1)) Then Debut = X
Next X
For X = 1 To Len(Cellule)
If IsNumeric(Mid(Cellule, X, 1)) Then Fin = X
Next X
FindNumber = Mid(Cellule, Debut, Fin - Debut + 1)
End FunctionCode vite fait, surement moyen de l'améliorer.
Mytå
Bonjour,
La formule suivante permet d'extraire un nombre en format texte d'une chaîne de caractère, pour autant :
- qu'il n'y ait qu'un seul nombre
- que ce nombre soit précédé et suivi d'une espace.
=(STXT(A1;EQUIV(0;(ESTERREUR(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)*1);0);NBCAR(A1)+1-SOMME((ESTERREUR(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)*1))))
formule matricielle à valider par Ctrl+Maj+Entrée
Pour extraire en format nombre il suffit de multiplier la formule par 1
Pour les nombres entre () il faut préalablement faire un rechercher / remplacer des "(" par "( " et ")" par " )" (sans les ""), c'est à dire ajouter des espaces.
Bonjour
Dré, tu es un chef!
que ce nombre soit précédé et suivi d'une espace.
Quand le nombre n'est pas précédé d'un espace, le résultat renvoyé reste bon.
Pour prévenir la parenthése sortante (l'entrante n'est pas retenue par la formule) on peut donc écrire directement:(Matricielle, bien sur)
=SUBSTITUE((STXT($A3;EQUIV(0;(ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1);0);NBCAR($A3)+1-SOMME((ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1))));")";"")
Les résultats sont dans la colonne I du classeur joint.
https://www.excel-pratique.com/~files/doc/8UzVYNumerique.xls
Cordialement
Re,
La formule donnée est loin d'être parfaite, bien qu'Amadéus ouvre de nouvelles voies !
Ainsi je ne parviens pas (encore) à éliminer une lettre qui se trouverait derrière un nombre, sans une espace entre les deux..
Exemple : 304A
la formule renvoie 304A
Petit complément : on dit une espace lorsqu'il s'agit de typographie, un espace lorsqu'il s'agit d'une étendue.
Toujours bon à savoir (de la part d'un belge qui se débat avec les problèmes linguistiques de son pays !).
Ha joli ! Fallait le savoir
On se croirait sur le blog des correcteurs du Monde.
(de la part d'un habitant d'une région où l'on dit "prendre la bus" et "une avion")
F.
dre a écrit :Petit complément : on dit une espace lorsqu'il s'agit de typographie, un espace lorsqu'il s'agit d'une étendue.
Toujours bon à savoir (de la part d'un belge qui se débat avec les problèmes linguistiques de son pays !).
Salut le Quebec,
Petit message à l'attention de Dré.
Après application de ta formule (ici ligne 3 en I3 pour un texte en A3)
=(STXT($A3;EQUIV(0;(ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1);0);NBCAR($A3)+1-SOMME((ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1))))
Si on applique à ce résultat la formule:
=SI(ET(CODE(DROITE(SUPPRESPACE(I3);1))>47;CODE(DROITE(SUPPRESPACE(I3);1))<58);SUPPRESPACE(I3);SUBSTITUE(SUPPRESPACE(I3);DROITE(SUPPRESPACE(I3);1);""))
On élimine les espaces et la derniére lette(tous les caractères n'ayant pas un des codes de chiffre), si elle existe.
Par contre, je n'ai pas réussi à imbriquer ces 2 formules pour en faire une seule.
Crois-tu cela faisable?
Cordialement,
Bonjour,
Même si c'était faisable, je ne crois pas que ce soit une solution.
D'abord parce que la première formule renvoie #VALEUR! (en format nombre) lorsqu'il n'y a pas d'espace, donc pas moyen de se baser sur ce résultat.
Ensuite par ce que le texte qui suit n'est pas necessairement limité à une seule lettre (exemple : 304rouge).
Je cherche à récupérer la position du dernier chiffre afin d'y ajouter une espace, mais là je coïnce ... pour le moment.
Bonjour
La formule suivante semble ne pas être prise en défaut.
Matricielle
STXT($A3;EQUIV(0;(ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1);0);NBCAR($A3)-SOMME((ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1)))
renvoie tous les nombres sous forme de texte
et:
1*STXT($A3;EQUIV(0;(ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1);0);NBCAR($A3)-SOMME((ESTERREUR(STXT($A3;LIGNE(INDIRECT("1:"&NBCAR($A3)));1)*1)*1)))
Renvoie les nombres en numérique.
Mais, où est passé Didier001 ?
Cordialement
Cordialement
Bonjour,
Bien vu, félicitations !
A mon avis, mais il se peut que je me trompe, une prime de fin d'année devient inéluctable (lol).
Rajout Amadéus: Sébastien, j'espére que tu notes..Bien que..à mon avis, la seule prime soit celle de notre satisfaction
Salut le forum
Chapeau bas aux formulistes, qui ont trouvés la solution.
Manque juste le réponse de Didier, à son retour de chasse surement
Amadéus a écrit :Rajout Amadéus: Sébastien, j'espére que tu notes..Bien que..à mon avis, la seule prime soit celle de notre satisfaction
Sébastien, rajouter lui 1000 crédits à son compteur comme prime de bénévolat à Amadéus
Et gardons cet esprit d'aide qui est, à la base, la motivation de ses bénévoles.
Mytå
Bonjour à tous
Mytå, avant de prendre mon sac à dos pour partir, moi aussi, comme Didier001 à la chasse ( mais moi, à l'Isard, Dimanche) , je tombe sur ton message..
Comme il arrive après celui que j'ai mis hier, je le trouve un peu savoureux
https://forum.excel-pratique.com/viewtopic.php?t=572&start=10&postdays=0&postorder=asc&highlight=
Si Sébastien transforme mon compteur pour le rendre invisible ou le mettre à 00000000 et l'y laisser, je suis preneur.
Sébastien?...Ouh...Ouhhhh!.....Sébastien?.... (Pas déjà à la chasse lui aussi!....Jamais là quand il faut...gregneugneu..) Au secours! Met moi vite à Zéro (en cachette, pendant que Mytå Lé au Moose), sinon les Z'activistes de tout bord vont me tirer dessus. S'il te plait...Sébastien..
Tout ceci bien sur, en toute sympathie.
Trés cordialement
Si si, tjr la enfin de retour (pas a la chasse, mais partis pour le travail)
En tout cas, merci a tous pour ces reponses, je ne pensais pas avoir une reponse aussi rapide, j'ai meme ete surpris par le fait que les probleme de certain soit resolus par d'autre et ainsi de suite
alors encore une fois, merci a tous pour vos solution
Question supplemetaire pour les plus " fort "
dans mes numeros qui en fait sont des numeros de bien, certain ne sont pas que des chiffre, certain, sont precede de "IF"
alors la question "bonus" est comment pour les biens IF 028, IF 125 ...... arriver a recuperer le IF
Cf page ci -jointe
https://www.excel-pratique.com/~files/doc/extraire_bonus.xls
Bonjour,
Tant commencer par ce qui semble être le plus difficile.
https://www.excel-pratique.com/~files/doc/DiDierV3.xls
Cette formule fonctionne pour les trois exemples donnés, mais représentent-ils tous les cas de figure ?
Bonjour a tous
Toutes mes excuses, je me suis mal exprimé, pour la formule qui "trouve les IF", il faut aussi quelle trouve les nombres seule comme dans le premier exemple
Encore mille excuse, et merci d'avance....
Didier001
page ci-jointe
https://www.excel-pratique.com/~files/doc/extraire_bonus2.xls