Bonjour,
J'aimerais savoir comment extraire une chaine de caractères composée de 10 chiffres puis d'une lettre puis d'un chiffre d'un autre chaine.
Par exemple, si j'ai :
draft_0123456789x1_c1.pdf
J'aimerais obtenir :
0123456789x1
Merci :
Bonjour,
J'aimerais savoir comment extraire une chaine de caractères composée de 10 chiffres puis d'une lettre puis d'un chiffre d'un autre chaine.
Par exemple, si j'ai :
draft_0123456789x1_c1.pdf
J'aimerais obtenir :
0123456789x1
Merci :
Tu vérifies
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 LeMot = "draft_0123456789x1_c1.pdf" Var1 = Mid(LeMot, 7,Len(LeMot)-13)
Edit
Vérifié, Ok... si tes mots ont toujours "draf_" au début et "_c1.pdf" à la fin
J'ai oublié de préciser que cette chaine que je veux extraire n'est pas forcément toujours placée au même endroit dans la liste des noms de fichiers que j'ai à traiter...
Bonjour,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 LeMot = "draft_0123456789x1_c1.pdf" Var1 = Mid(LeMot, InStr(LeMot, "_") + 1, InStrRev(LeMot, "_") - 1)
arf, cette chaine n'est pas forcément entourée d'underscores
Si tu nous dis pas tout...![]()
Tu peux nous expliquer ? Parce que là, je suis un peu perdu, tu vois...J'ai oublié de préciser que cette chaine que je veux extraire n'est pas forcément toujours placée au même endroit dans la liste des noms de fichiers que j'ai à traiter...![]()
A+
Voilà le genre de noms de fichiers que je peux avoir :
fn5_00000172c1_051216_900_1800.doc
draft_00000072l1_c1.pdf
fn_51 00000238c1 xxxxxx_umts.xls
Donc voilà !
Il faut que ça me ressorte :
00000172c1
00000072l1
00000238c1
Désolé de ne pas avoir été clair du premier coup !
Je vais être plus prudent ce coup-ci :
Les chaînes à récupérer ont-elles toujours la même longueur ?
Sont-elles toujours précédées d'un underscore ?
Sont-elles toujours extraites d'un nom de fichier ? (Ce nom a-t-il toujours une extension ?)
Voilà !![]()
A+
Oui, 10 chiffres + 1 caractère alphabétique + 1 chiffreEnvoyé par ouskel'n'or
NonEnvoyé par ouskel'n'or
OuiEnvoyé par ouskel'n'or
Merci !
Alors t'as un big problème... Parce que
si tu as un chiffre avant la chaîne à récupérer (l'un de tes exemples)
que ce chiffre peut être un zéro,
qu'il n'y a pas de balise (_) avant la chaîne,
que la longueur de ce qui précède cette chaîne peut être variable...
Je ne vois pas comment tu peux t'en tirer...
Mais ne vas pas te foutre à l'eau tout de suite, peut-être quelqu'un aura-t-il une idée...
Bonne chance![]()
Je continuerai à suivre, des fois que...
A+
Il n'y a pas moyen de faire une recherche avec un masque du type ##########?#
Le # remplaçant un chiffre
Le ? remplaçant une lettre
Re,
Est ce que la chaine que tu veux récupérer commence toujours par cinq zéro ?
Je viens d'avoir une idée mais c'est lourd...
Tu dis si ça te convient (!!!)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Sub MidLemot() LeMot = "draft_0123456789x1_c1.pdf" For i = Len(LeMot) To 1 Step -1 MotàlEnvert = MotàlEnvert + Mid(LeMot, i, 1) Next For i = 1 To Len(MotàlEnvert) ok = Mid(MotàlEnvert, i, 1) Like "[0-9]" If ok Then j = j + 1 result = Mid(MotàlEnvert, i, 1) + result 'j'en profite pour remettre à l'endroit If Len(result) = 10 Then Exit For Else result = "" j = 0 End If Next MsgBox result ' là j'ai "0123456789" 'reste à ajouter x1 result = result + Mid(LeMot, InStr(LeMot, result) + 10, 2) MsgBox result End Sub
A+
Edit
Pourquoi traiter à l'envers (je vois venir la question grosse comme une maison) Parce qu'ainsi, je suis sûr que la première succession de 10 chiffres commence bien après une lettre.
Bon, avec instr, je n'ai pas trouvé. Si quelqu'un a une idée...
Tu as essayé ce que je t'ai mis ?
A+
Alors là ! S'il n'y a aucun détail en commun dans tes chaines de caractères, je ne vois pas de solution.Envoyé par yaya54
tiens une petite fonction avec Like...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Function ExtraitChaine(st As String) As String Dim stMsq As String Dim i As Integer 'index 1° caractéres Dim lgM As Integer 'longueur du masque Dim stTest As String 'chaine à tester '00000172c1 stMsq = "########?#" lgM = Len(stMsq) For i = 1 To Len(st) - lgM + 1 stText = Mid(st, i, lgM) 'Debug.Print stText If stText Like stMsq Then 'Trouvé ExtraitChaine = stText Exit Function End If Next Debug.Print "Introuvable //" End Function ' POUR TESTER LA FONCTION Sub MonTest() MsgBox "fn5_00000172c1_051216_900_1800.doc " & vbCrLf & _ ExtraitChaine("fn5_00000172c1_051216_900_1800.doc ") MsgBox "draft_00000072l1_c1.pdf" & vbCrLf & _ ExtraitChaine("draft_00000072l1_c1.pdf") MsgBox "fn_51 00000238c1 xxxxxx_umts.xls" & vbCrLf & _ ExtraitChaine("fn_51 00000238c1 xxxxxx_umts.xls") End Sub![]()
salut
quel qont les points communs a toute les chaines? si tu n'a pas une idée de comment les retrouvé... sa va etre balaise quand meme
Curieux, nous ne devons pas utiliser les mêmes bases :Envoyé par yaya54
sont trois exemples de chaines consistuées de 8 chiffres + 1 caractère alphabétique + 1 chiffre.00000172c1
00000072l1
00000238c1
Cette fonction devrait répondre à tes besoins :
Le masque passé en argument permet de définir le format des données à extraire. Utilise 0 (ou tout autre chiffre) pour définir un chiffre et a (ou tout autre lettre) pour définir une donnée alphanonnumérique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Public Function GetSequence(Expression As String, Optional Masque = "00000000a0") As String Dim IndexE As Long Dim IndexM As Long Dim LettreE As String Dim LettreM As String IndexM = 1 For IndexE = 1 To Len(Expression) LettreE = Mid(Expression, IndexE, 1) LettreM = Mid(Masque, IndexM, 1) If (IsNumeric(LettreE) = IsNumeric(LettreM)) Then GetSequence = GetSequence & LettreE IndexM = IndexM + 1 If IndexM > Len(Masque) Then Exit Function Else GetSequence = vbNullString IndexM = 1 End If Next GetSequence = vbNullString End Function
Cette fonction reste du bricolage...
Partager