Extraction Chiffre d'une Chaine (gauche, droite variables)

Sghaier Chafaa

XLDnaute Junior
Bonsoir à tous,

j'ai des cellules qui contiennent des chaines alphanumériques: 1 Lt, 0.50 Kg, 0.125Lt, etc...

Je ne trouve pas comment exploiter les fonctions "droite" et "gauche" pour l'extraction de la partie numérique de ces chaines pour l'utiliser au calcul de poids net total, car les chaines n'ont pas une écriture 'monotone'

Avez vous de solutions ?, j'essaye d’éviter les macro

Merci
 

Chris24

XLDnaute Impliqué
Bonsoir

Si ton séparateur décimal est différent de celui présent dans la chaîne (adapter les arguments dans la fonction SUBSTITUE) :

Code:
=1*STXT(SUBSTITUE(A2;".";",");MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))));MAX(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2))))-MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))))+1)


Si ton séparateur décimal est le même que celui présent dans la chaîne :

Code:
=1*STXT(A2;MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))));MAX(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2))))-MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))))+1)

Formules matricielles valider par Ctrl+Maj+Entrée

Cdt
 
Dernière édition:

Sghaier Chafaa

XLDnaute Junior
Bonsoir

Si ton séparateur décimal est différent de celui présent dans la chaîne (adapter les arguments dans la fonction SUBSTITUE) :

Code:
=1*STXT(SUBSTITUE(A2;".";",");MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))));MAX(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2))))-MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))))+1)


Si ton séparateur décimal est le même que celui présent dans la chaîne :

Code:
=1*STXT(A2;MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))));MAX(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2))))-MIN(SI(ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))>0;ESTNUM(1*STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))*LIGNE(INDIRECT("1:"&NBCAR(A2)))))+1)

Formules matricielles valider par Ctrl+Maj+Entrée

Cdt



Merci monsieur Chris pour les deux proposition,

j'ai trouvé cette solution en internet, que franchement j'ai pas compris son code, sauf qu'elle est tres efficace et elle est jocker de partt

Option Explicit
Function Extraire_chiffres(Cellule As Range) As Double
Dim i As Integer, N As Integer
Dim K As String, Texte As String
If Cellule <> "" Then
For i = 1 To Len(Cellule)
K = Cellule.Characters(i, 1).Text
N = Asc(K)
If IsNumeric(K) Or N = 44 Then Texte = Texte & K
Next i
Extraire_chiffres = CDbl(Texte)
End If
End Function


1,67 AAA ---> 1,670
1,671 BBA ---> 1,671
1,67g CBA ---> 1,670
1,67 g ADA ---> 1,670
10,670ASA ---> 10,670
10,670m ALA ---> 10,670
10,57 / AA ---> 10,570
 

Chris24

XLDnaute Impliqué
Bonjour Sghaier Chafaa, Staple 1600

@ Staple1600 Je retiens cette formule car pourquoi faire compliqué quand on peut faire simple:D

Le monsieur dans sa question a mis des points comme séparateur décimale et des virgules dans le#3
la fonction du #3 ne prend en compte que la virgule

Je suggère une petite modification de ta formule

Code:
=RECHERCHE(9^9;--("0"&STXT(SUBSTITUE(A1;".";",");MIN(CHERCHE({0.1.2.3.4.5.6.7.8.9};A1&"0 123456789"));LIGNE($1:$100))))

Cdt
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour chris24

Point vu de point dans cette vue :D
1,67 AAA ---> 1,670
1,671 BBA ---> 1,671
1,67g CBA ---> 1,670
1,67 g ADA ---> 1,670
10,670ASA ---> 10,670
10,670m ALA ---> 10,670
10,57 / AA ---> 10,570
D'où mon point de vue formulistique vu dans le message #4 ;)

Merci pour la suggestion ;)

PS: Cette formule traînait dans un de mes posts* sur XLD
(ce qui illustre au passage la triste vie de la loupe en haut en gauche qui année après année est ignorée par les demandeurs et se désole sans broncher en voyant le lustre de son foyer se ternir tellement inusité il est :( )

*: (novembre 2014)
 

Statistiques des forums

Discussions
312 178
Messages
2 085 982
Membres
103 079
dernier inscrit
sle