Extraire toute les chaine entre a et b

Signaler
Messages postés
296
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
21 novembre 2008
-
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
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

Messages postés
69
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
14 décembre 2007

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
Messages postés
296
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
21 novembre 2008

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  
Messages postés
69
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
14 décembre 2007

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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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
Messages postés
296
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
21 novembre 2008

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  
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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à ...