Extraire des caractères dans une chaîne

Eric Dé

XLDnaute Occasionnel
Bonjour,

Je souhaiterais extraire des caractères situés entre 2 tirets (du 6) dans une chaîner de caractères.
La longueur totale de la chaîne peut être variable ainsi que la longueur de la chaîne à extraire elle-même.

Exemples :
Dans la chaîne : AAAAAAA-233-BBBBBB, je dois extraire 233
Dans la chaîne : CCC-44-DDDD, je dois extraire 44

Auriez-vous une formule à me proposer ?

Merci d'avance.
Eric
 

Chris24

XLDnaute Impliqué
Bonjour

Pour extraire les chiffres dans une chaine

Une formule parmi d'autres

Code:
=1*STXT(A1;EQUIV(1;1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));0);SOMME(1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))))

Formule matricielle validation par Ctrl+Maj+Entrée

Cdt
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Une autre pour le fun avec les données en colonne A pour "A1":
Code:
=STXT($A1;CHERCHE("-";$A1)+1;CHERCHE("µ";SUBSTITUE($A1;"-";"µ";2))-(CHERCHE("-";$A1)+1))*1

JHA
 

Pièces jointes

  • Classeur Eric Dé.xlsx
    8.3 KB · Affichages: 32

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Pour le fun aussi, mais pas pour les macistes ;)
Une UDF
VB:
Function NOMBRESEUL(Plage As Range)
With CreateObject("vbscript.regexp")
    .Global = True: .Pattern = "[^\d]+"
    NOMBRESEUL = .Replace(Plage.Text, vbNullString) * 1
End With
End Function
Syntaxe d'utilisation
Si données en A1, en B1 par exemple: =NOMBRESEUL(A1)
 

Staple1600

XLDnaute Barbatruc
Re

Une autre formule pour le fun et pour braver la tempête qui ici fait rage ;)
(formule non matricielle)
Code:
=1*STXT(A1;MIN(CHERCHE({0;1;2;3;4;5;6;7;8;9};A1&"0123456789"));TROUVE("-";A1;MIN(TROUVE({0;1;2;3;4;5;6;7;8;9};$A1&" 0123456789")))-MIN(TROUVE({0;1;2;3;4;5;6;7;8;9};$A1&" 0123456789")))
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir Eric Dé,

Essayez cette fonction que m'avaient concoctée ceux qui y sont nommés. Vous verrez, elle marche très bien.
VB:
Function NumDansCadena(chaîne As String, Optional n As Byte = 1) As Double
'Récupère un chiffre dans une chaîne de caractères
'BOISGONTIER / david84 / mapomme
'- chaîne : la chaîne de caractères qui comprend 1, voire davantage de chiffres séparés par du texte
'- n : la position du chiffre dans la chaîne s'il y en a plusieurs
'Exemple : NumDansCadena("Romina a 1 magnifique chatte, 2 petits chiens adorables & 4 sœurs à tomber à la renverse",3) --> 4

    Dim Obj As Object, a As Object
  
    Set Obj = CreateObject("vbscript.regexp")
    Obj.Global = True
    Obj.Pattern = "\d+(" & Application.DecimalSeparator & "\d+)?"
    Set a = Obj.Execute(chaîne)
    NumDansCadena = a(n - 1)
End Function
 

Magic_Doctor

XLDnaute Barbatruc
joke, joke...

Prenons un exemple concret :
Supposons qu'en A1 il y ait la chaîne = "Romina a 1 magnifique chatte, 2 petits chiens adorables & 4 sœurs à tomber à la renverse"

NOMBRESEUL(A1) = 124 ---> pb au cas où il y ait plusieurs nombres dans la chaîne

NumDansCadena(A1) = 1 ou NumDansCadena(A1;1) = 1
NumDansCadena(A1;2) = 2
NumDansCadena(A1;3) = 4

Nettement plus discriminatif.

[private joke]
Moi, ce sont les sœurs de Romina qui m'intéressent
Porque Romina ¡ya fue!
[/private joke]
 

Staple1600

XLDnaute Barbatruc
Re

@Magic_Doctor
[private joke bis]
Je ne suppose pas (ou alors 6 lignes plus bas)
Je me base sur ce que dit le demandeur
Exemples :
Dans la chaîne : AAAAAAA-233-BBBBBB, je dois extraire 233
Dans la chaîne : CCC-44-DDDD, je dois extraire 44
De toute façon, ta solution ou la mienne ne sont pas de bonnes solutions:D
Car supposons que l'utilisateur possède un mac ;)
Quoique moi, j'avais prévenu dés le début ;)
Pour le fun aussi, mais pas pour les macistes ;)
Une UDF
[/private joke bis]
 

Staple1600

XLDnaute Barbatruc
Re

[private joke ou joke unilatérale apparemment]
Peut-être, mais il y a des XLDnautes (dont je suis pas) qui utilisent Excel avec un Mac.
Et comme dit plus bas, RegExp ne fonctionnera que sous Windows.
Pas conséquent nos propositions avec CreateObject("vbscript.regexp") sont effectivement discriminatives puisque ne fonctionnant que sur un seul OS ;)
[/private joke ou joke unilatérale apparemment]
 

Discussions similaires

Statistiques des forums

Discussions
312 354
Messages
2 087 548
Membres
103 586
dernier inscrit
julie30620