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
....
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
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.
bonjour le fil une matricielle a etendre a valider ctrl maj entree
=1*STXT(A1;EQUIV(VRAI;ESTNUM(1*STXT(A1;LIGNE($1:$9);1));0);NB(1*STXT(A1;LIGNE($1:$9);1)))
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
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
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.
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+
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 ???!!!
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
j'ai le même problème et ton code parait le solution que je cherche , mais comme je suis débutante en vba dites comment insérer ce code dans ma feuille
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)