Extraction de texte dans une chaine de caractère

Résolu
laurent92370 Messages postés 70 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 20 mars 2007 - 28 août 2005 à 06:03
laurent92370 Messages postés 70 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 20 mars 2007 - 28 août 2005 à 12:20
Bonjour,

Voici ma question : j'ai une chaine de caractères comme suit :


aa,bbb,cc,dddd


Cette chaine de caractère est stockée dans une variable.
Maintenant, cette variable doit être décomposée en 4 éléments stockés chacun dans une variable :

var1 doit contenir : aa
var2 doit contenur: bbb
var3 doit contenir : cc
var4 doit contenir : dddd

Je n'ai pas de soucis pour la var1 vu qu'elle aura toujours une longueur fixe. Par contre ça se corse pour les 3 autres car elles auront une longueur variable.

Je n'arrive pas à extraire les caractères. Je sais qu'il faut rechercher leur position et leur longueur en jouant avec la virgule (qui est mon séparateur de variable) mais c'est un peu trop complexe pour moi.

C'est pour cela que je fais de nouveau appel à vous. Pour info, c'est du VBA.

Merci beaucoup !!!

8 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 août 2005 à 11:56
en fait je l'avais fait pour 4 variables.

pour 3 variables il n'y a que 2 virgules, donc 2 tests suffisent:









Open ("c:\icschange.rep") For Input As #1

Do While Not EOF(1)

Line Input #1, lignelue

s = lignelue

j = 1

i = InStr(j, s, ",")

If i > 0 Then

var1 = Mid$(s, j, i - j)

MsgBox var1

j = i + 1

i = InStr(j, s, ",")

If i > 0 Then

var2 = Mid$(s, j, i - j)

MsgBox var2

j = i + 1

<strike>

i = InStr(j, s, ",")

If i > 0 Then

</strike><strike> var3 = Mid$(s, j, i - j)

MsgBox var3

j = i + 1

End If

</strike>

var3 = Mid$(s, j)

MsgBox var3



End If

End If
Close #1


Daniel
3
Mikaels35 Messages postés 146 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 17 novembre 2009 2
28 août 2005 à 07:37
Le plus simple, tu crées un tableau

Dim T() as String
TaChaine="aa,bbb,cc,dddd"

T=Split(TaChaine,",")

Et tu récupères tes valeurs
T(0) = aa (var1)
T(1)= bbb 'var2)
etc...
0
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
28 août 2005 à 07:37
Bonjour,
Tu peux peut-être te servir de ça:

Sub Test()

Dim i As Byte,TaVariable As String
TaVariable = ActiveCell.Text

If InStr(TaVariable, ",") > 0 Then

Tablo = Split(TaVariable, ",")

For i = 0 To UBound(Tablo)

MsgBox Tablo(i)

Next

End If

End Sub

A+
0
laurent92370 Messages postés 70 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 20 mars 2007 1
28 août 2005 à 07:47
Merci pour ces réponses. Cependant, en VBA Access, le mot cle split n'est pas reconnu. Donc je coince.

si vous avez une idée ...

Merci encore
0

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

Posez votre question
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
28 août 2005 à 08:16
Salut,

tu peux essayer ceci ça devrait tourner ...Option Explicit





Public Function Parse(sIn As String, sDel As String) As Variant



Dim i As Integer

Dim x As Integer

Dim s As Integer

Dim t As Integer



i 1: s 1: t = 1: x = 1

ReDim tArr(1 To x) As Variant



If InStr(1, sIn, sDel) <> 0 Then



Do

ReDim Preserve tArr(1 To x) As Variant

tArr(i) = Mid(sIn, t, InStr(s, sIn, sDel) - t)

t = InStr(s, sIn, sDel) + Len(sDel)

s = t

If tArr(i) <> "" Then i = i + 1

x = x + 1

Loop Until InStr(s, sIn, sDel) = 0



ReDim Preserve tArr(1 To x) As Variant

tArr(i) = Mid(sIn, t, Len(sIn) - t + 1)

Else

tArr(1) = sIn

End If



Parse = tArr

End Function



Private Sub Form_Load()

Dim A As Variant





A = Parse("hello To you", " ")



Dim i As Integer

Dim max As Integer

max = UBound(A)

For i = 1 To max

MsgBox A(i)

Next i



End

End Sub




++

Zlub

<hr size="2" width="100%">
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 août 2005 à 10:30
Dim s As String

Dim var1 As String

Dim var2 As String

Dim var3 As String

Dim var4 As String



Dim i As Integer

Dim j As Integer



s = "aa,bbb,cc,dddd"



j = 1

i = InStr(j, s, ",")

If i > 0 Then

var1 = Mid$(s, j, i - j)

j = i + 1

i = InStr(j, s, ",")

If i > 0 Then

var2 = Mid$(s, j, i - j)

j = i + 1

i = InStr(j, s, ",")

If i > 0 Then

var3 = Mid$(s, j, i - j)

j = i + 1

var4 = Mid$(s, j)

End If

End If

End If



MsgBox var1

MsgBox var2

MsgBox var3

MsgBox var4


Daniel
0
laurent92370 Messages postés 70 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 20 mars 2007 1
28 août 2005 à 11:46
Bonjour Daniel


Merci pour ce code. Je l'ai adapté à mon code, mais ça ne marche pas pour récupérer la derniere variable.


Les infos sont stockées dans un fichier txt dont les infos sont présentées comme suit :


toto,maison,albert
tata,elephant,monique


Le code est le suivant :


Close #1
Open ("c:\icschange.rep") For Input As #1
Do While Not EOF(1)
Line Input #1, lignelue
s = lignelue
j = 1
i = InStr(j, s, ",")
If i > 0 Then
var1 = Mid$(s, j, i - j)
MsgBox var1
j = i + 1
i = InStr(j, s, ",")
If i > 0 Then
var2 = Mid$(s, j, i - j)
MsgBox var2
j = i + 1
i = InStr(j, s, ",")
If i > 0 Then
var3 = Mid$(s, j, i - j)
MsgBox var3
j = i + 1
End If
End If
End If


Les 2premieres variables (toto, maison) sont bien affichées dans une msgbox mais pas la 3ème (albert) et le programme continue sur les autres lignes du fichiers sans affciher la 3ème variable.


J'ai oublié quoi dans le code ?
Merci
0
laurent92370 Messages postés 70 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 20 mars 2007 1
28 août 2005 à 12:20
Un grand merci à tout le monde et particulierement à daniel.
0
Rejoignez-nous