Extraire la valeur numérique d'un texte

léti07

XLDnaute Nouveau
Bonjour le forum :) ,

Après plusieurs recherche sur le forum, je n'ai pas réussi à trouver une solution pour mon probleme.

Voila je m'explique, j'aurais besoin d'extraire la valeur numérique se trouvant dans le nom de mon fichier, à partir de vb. J'arrive à récupérer le nom de mon fichier, mais je m'y perd un peu dans l'extraction de la valeur numérique (entre Mid, Str,...)

Ex de nom de fichier :
NomF B1a
NomF B1b
NomFi B2a
NomFi B13a
....

J'aurai donc besoin d'avoir comme résultat

NomF B1a -------- =1
NomF B1b -------- = 1
NomFi B2a -------- = 2
NomFi B13a ------- = 13
....

Donc comment faire pour extraire à partir de la lettre "B" le chiffre se situant après ?

Merci d'avance pour vos réponses. :)

Si je ne suis pas assez claire n'hésitez à me poser des questions.

Léti
 

porcinet82

XLDnaute Barbatruc
Re : Extraire la valeur numérique d'un texte

Salut,

Avec une macro, en supposant que tes données sont en colonne A, avec résultat en colonne B (je suppose également qu'il y aura toujours 1 caractère à la fin du nom du fichier) :
Code:
Sub test()
Dim i As Integer
For i = 1 To Range("A65536").End(XlUp).Row
    Cells(i, 2).Value = Mid(Cells(i, 1).Value, InStr(1, Cells(i, 1).Value, "B") + 1, Len(Cells(i, 1).Value) - InStr(1, Cells(i, 1).Value, "B") - 1)
Next i
End Sub

@+
 

Tibo

XLDnaute Barbatruc
Re : Extraire la valeur numérique d'un texte

Bonjour leti, salut romain,

Pour le fun, une solution avec formule matricielle :

Avec le texte en colonne A

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

Formule matricielle à valider par CTRL + MAJ + ENTREE

à recopier vers le bas

Bon, c'est du vite fait, pas trop cherché à faire plus court...

@+

edit : salut abcd

Je suis parti sur le principe de la recherche d'une chaine numérique, quelle que soit sa position. A voir les exemples, on peut en effet supposer que les chaines ont toujours la même structure et là, plus besoin de s'embêter avec ma formule.

@+

Reédit : merci excalibur pour cette matricielle. Je la mets dans ma besace Excel pour l'étudier.

@+
 
Dernière édition:

léti07

XLDnaute Nouveau
Re : Extraire la valeur numérique d'un texte

Bonjour porcinet82,

Merci beaucoup pour ta réponse mais se n'est pas vraiment ce que je recherche.

En faite le but de cette extraction est de récupérer ce chiffre pour permettre l'envoie de données dans un autre classeur.
Donc ma variable chiffre est juste temporaire, je n'ai pas besoin de la stocker dans une autre colonne.
Et ma donnée de base pour l'extraction (NomC) n'est pas non plus dans une cellule.

Code:
NomC = ThisWorkbook.Name
Nat = Range("H47").Value
Niv = Range("J47").Value
nomf = Range("E44")

NumChaine (NomC) 'fonction qui me permettrai de resortir mon chiffre

'If Trl = "1" Then 'trl serait la valeur de mon chiffre
    'v1 = 6
    'v2 = 20
end if
 
Dernière édition:

léti07

XLDnaute Nouveau
Re : Extraire la valeur numérique d'un texte

Merci à tous pour vos solutions, mais je dois faire mon extraction avec du code et non par une formule.

J'allais oublier mon nom de fichier ne fini par forcément par une lettre, il peux aussi il y en avoir 2.
NomF B1a
NomF B1aa
 
Dernière édition:

excalibur

XLDnaute Impliqué
Re : Extraire la valeur numérique d'un texte

rebonjour salut l ami tibo pas de merite je l ai retrouve dans mes archives ca se trouve elle vient de toi par contre j y comprends rien
j ai cru comprendre que ca marche jusqu a la ligne 9 mais j ai continue a l etendre ca marche si tu pouvais m explique ce que fait le mot ligne la dedans vraiment nul en formule
 

Tibo

XLDnaute Barbatruc
Re : Extraire la valeur numérique d'un texte

re salut excalibur,

Je vais tenter une petite explication.

Pour gérer les chaines de plus de 9 caractères, il faut modifier la formule ainsi :

Code:
=1*STXT(A1;EQUIV(VRAI;ESTNUM(1*STXT(A1;[COLOR=red]LIGNE(INDIRECT([/COLOR]
[COLOR=red]"1:"&NBCAR(A1)));1)[/COLOR]);0);NB(1*STXT(A1;[COLOR=red]LIGNE(INDIRECT("1:"&NBCAR(A1)));1)[/COLOR]))

En décomposant la formule :

STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)

cette partie de la formule va décomposer la chaine de caractères en une matrice de n éléments (n étant le nombre de caractères de la chaine de A1)

Ensuite, on multiplie chaque élément de cette matrice par 1. Si c'est du texte, ça va retourner #VALEUR!, si c'est un chiffre texte, ça va retourner sa valeur numérique, le tout, toujours sous forme de matrice.

Avec ESTNUM, on teste si chacun des éléments de la matrice est numérique ou pas. Ca retourne alors une matrice composée de VRAI et de FAUX

Avec EQUIV, on recherche le premier VRAI qui correspond à l'emplacement de la 1ère valeur numérique.

Reste ensuite à savoir combien de chiffres sont présents dans la matrice. C'est ce que fait la fonction NB :

NB(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))

Sinon, LIGNE($1:$9) permet de générer une matrice de nombres qui va de 1 à 9

LIGNE(INDIRECT("1:"&NBCAR(A1))) permet de générer une matrice qui va de 1 à ... le nombre de caractères de la chaine contenue en A1.

Une petite astuce pour comprendre un peu le fonctionnement des formules matricielles : sélectionner dans la barre de formule la partie de la formule qu'on veut étudier, puis faire F9. La matrice apparaît alors dans la barre de formule.

Bon, je ne sais pas si j'ai été bien clair sur le coup

@+

Précision importante quand même : cette formule fonctionne à condition qu'il n'y ait qu'une seule chaine numérique continue dans la chaine complète.

@+
 
Dernière édition:

excalibur

XLDnaute Impliqué
Re : Extraire la valeur numérique d'un texte

re tibo merci de m avoir accorde du temps pour l explication je pense avoir a peu pres compris pas sur !!! j ai mis dans mes archives je ferais des essais
je pense avoir trouve une methode beaucoup simple pour resoudre mes grosses lacunes avec les formules si probleme envoye un message au sieur TIBO je gagnerais beaucoup de temps (lol) passe une bonne soiree a+
 

porcinet82

XLDnaute Barbatruc
Re : Extraire la valeur numérique d'un texte

Salut,

Dites dont, les gars, ca vous dérange pas de squatter le fil Léti pour vos petites histoires de formules que vous êtes les seuls à comprendre ???!!! :p

Bon, voici une fonction qui cherche tous les caractères dans une chaine et que tu pourras appeler dans ton code :
Code:
Function NumChaine(NomC As String)
Dim k As Integer, Chaine_num As Integer
For k = 1 To Len(NomC)
    If IsNumeric(Mid(NomC, k, 1)) Then
        Chaine_num = Chaine_num & Mid(NomC, k, 1)
    End If
Next k
NumChaine = result
End Function

@+
 

porcinet82

XLDnaute Barbatruc
Re : Extraire la valeur numérique d'un texte

Salut,

Pour utiliser la fonction, tu copies/colles le code dans un module (alt+f11, puis Insertion/Module).
Ensuite, sur ta feuille, tu l'utilises comme n'importe quelle fonction, c'est a dire en mettant dans une cellule par exemple =NumChaine(A1)

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 354
Membres
103 824
dernier inscrit
frederic.marien@proximus.