Extraire toute les chaine entre a et b

kelm_by Messages postés 296 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 21 novembre 2008 - 9 oct. 2007 à 16:20
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 10 oct. 2007 à 08:54
salut tous le monde,
j'essay d'extraire tout les mots entre a et b le probleme c'est que ca ne donne que le premier mots

a="xxlk"
b="jfrgm"
If InStr(str, b) > 0 Then

c1 = InStr(str, a)
ch1 = Mid(str, c1)

c2 = InStr(ch1, b)
ch2 = Left(ch1, c2)

If ch <> "" Then List2.AddItem a & ch & b
End If

merci d'avance

6 réponses

caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
9 oct. 2007 à 19:50
Le pb c'est que ne suis pas tout à fait sûr d'avoir compris ce que tu veux faire.
voilà ce que je te propose :

phrase = "05919 frtg 0753786378 368687578678 yuim 786786766"
    a = "frtg"
    b = "yuim"
    If InStr(phrase, b) > 0 Then
    ca = InStr(phrase, a)
    cb = InStr(phrase, b)
    ch1 = Mid(phrase, ca, (cb - ca))
    ch1 = ch1 & b
    MsgBox ch1
    'If ch1 <> "" Then List2.AddItem ch1 & b

La haine aveugle n'est pas sourde
0
kelm_by Messages postés 296 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 21 novembre 2008
9 oct. 2007 à 19:58
merci le probleme c'est que ce code ne prend que la premier chaine entre a at b exemple
str=azzzzzb tryrz axxxxxxxxb apppppppppc

me donne zzzzzz
ce que je veux avoire c'est zzzzzzzz   et xxxxxxxxxxxx et pppppppppp

merci encore  
0
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
9 oct. 2007 à 20:44
Ok, essaie ça :

Sub test1()
Dim ch() As String

    phrase = "05919 AxxxxxxB AyyyyyyyyyB AzzzzzzzzzB gfhgj"
    a = "A"
    b = "B"
    long_phrase = Len(phrase)
    long_a = Len(a)
    long_b = Len(b)
   
    i = 0
    ca = 0
    cb = 0
    Do Until InStr((cb + 1), phrase, a) = 0
        i = i + 1
        ReDim Preserve ch(1 To i)
        ca = InStr((cb + 1), phrase, a)
        cb = InStr(ca, phrase, b) + long_b
        ch(i) = Mid(phrase, ca, (cb - ca))
    Loop
   
    i_fin = i
    msg = "Il y a " & i_fin & " mots, les voici :" & Chr(10)
    For i = 1 To i_fin
        msg = msg & "mot" & i & " : " & ch(i) & Chr(10)
    Next i
    MsgBox msg
End Sub

La haine aveugle n'est pas sourde
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 oct. 2007 à 21:38
je n'ouvre chaine1 que pour laisser chaine intacte (en cas de besoin)...

Option Explicit



Private Sub Command2_Click()
 Dim chaine As String, chaine1 As String, msg As String, pos1 As Integer, pos2 As Integer
 chaine = "azzzzzb tryrz axxxxxxxxb apppppppppbacccc"
 chaine1 = chaine
 pos1 = InStr(chaine1, "a")
 pos2 = InStr(chaine1, "b")
 While pos1 > 0 And (pos2 > 0 And pos2 > pos1)
   msg = msg & Mid(chaine1, pos1 + 1, pos2 - 1 - pos1) & vbCrLf
   chaine1 = Trim(Mid(chaine1, pos2 + 1))
   pos1 = InStr(chaine1, "a")
   pos2 = InStr(chaine1, "b")
 Wend
 MsgBox msg
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kelm_by Messages postés 296 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 21 novembre 2008
9 oct. 2007 à 23:50
merci et voici mon code qui fait une boucle infinie pk svp

p1 = InStr(str, a)
p2 = InStr(str, b)


Do Until p1 = 0
ch1 = Mid(str, p1)
ch2 = Left(ch1, p2)
If ch2 <> "" Then List2.AddItem a & ch2 & b


str = Mid(str, p2)
p1 = InStr(str, a)
p2 = InStr(str, b)
Loop


merci d'avance  
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 oct. 2007 à 08:54
Pour plusieurs raisons...
Dont la principale est que tu détermines ton p2 par rapport à str et que tu utilises cette position dans ... une chaîne différente !!!

Au fait : change donc de nom pour ta chaine (Str est un mot réservé de Vb).

Voilà ...
0
Rejoignez-nous