Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 09h45   #1
Invité de passage
 
Homme
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 0
Points : 0
Par défaut Extraction d'une sous chaine de caractere VBA

Bonjour,

j'ai comme exercice d'extraire des sous-chaines de caractères qui se situent exactement après la même sous-chaine fixe.
Voici un exemple : Dans la chaine suivante :

##RES##paul##Copozef##RES##coco##pppezriuezrkjpp##RES##papa##

je dois extraire exactement les sous chaines suivante : paul, coco, papa
Ces 3 termes se situent exactement après la meme constante : ##RES##, et exactement avant ##.
J'ai fait le code suivant :

Code :
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
34
35
36
Sub ExtractDatas() 
 
Dim lettre As String 
 
Data = "" 
d = 0 
 
ThisWorkbook.Worksheets("datas").Range("B1:B100").Select 
Selection.Clear 
 
GoRef1 = InStr(1, ThisWorkbook.Worksheets("datas").Range("A1").Value, "##RES#") 
 
 
 
'1er check : commence du begin de la chaine 
 
For i = GoRef1 To Len(ThisWorkbook.Worksheets("datas").Range("A1")) Step 7 + Len(Data) 
 
    Data = "" 
 
    If Mid(ThisWorkbook.Worksheets("datas").Range("A1"), i, 1) <> "#" Then 
 
        Do While Mid(ThisWorkbook.Worksheets("datas").Range("A1"), i, 1) <> "#" 
            Data = Data & Mid(ThisWorkbook.Worksheets("datas").Range("A1"), i, 1) 
            i = i + 1 
        Loop 
 
    End If 
 
    d = d + 1 
 
    ThisWorkbook.Worksheets("datas").Range("b" & d).Value = Data 
 
Next i 
 
End Sub
Le probleme est que ce code ne fonctionne pas correctement car il n'extrait pas que les 3 mots qui se trouvent après la sous-chaine constante, mais d'autres sous-chaines fausses (voici l'output : paul, ef, coco, riuezrkjpp, papa).

Pouvez vous me guider svp pour que le code n'affiche plus que les bons termes?

Merci beaucoup
the-malco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h18   #2
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Bonjour,

Je n'ai pas regardé ton code mais je crois que tu pourrais résoudre ton problème beaucoup plus simplement avec la fonction 'split()'...jettes-y un oeil!
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h32   #3
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Essaie :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub test()
    Dim Texte As String, Tableau
    Texte = "##RES##paul##Copozef##RES##coco##pppezriuezrkjpp##RES##papa##"
    Texte = Application.Substitute(Texte, "##RES##", "!")
    Texte = Application.Substitute(Texte, "##", "#")
    Tableau = Split(Texte, "#")
    For Each Item In Tableau
        Var = InStr(1, Item, "!")
        Data = Mid(Item, Var + 1, 9 ^ 9)
        d = d + 1
        ThisWorkbook.Worksheets("datas").Range("b" & d).Value = Data
    Next Item
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 22h02   #4
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 668
Points : 7 668
Bonjour à tous,

Pas besoin de Replace (ou Substitute) pour faire un Split.
Exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
Sub test()
  Dim a1() As String
  Dim i As Integer
  Dim strSubstring As String
  Dim strTexte As String
  strTexte = "##RES##paul##Copozef##RES##coco##pppezriuezrkjpp##RES##papa##"
  a1 = Split(strTexte, "##RES##")
  For i = 1 To UBound(a1())
    strSubstring = Split(a1(i), "##")(0)
  Next i
End Sub
Il ne reste plus qu'à gérer ce qu'on fait de strSubstring à chaque boucle.
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 09h47   #5
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Pour AlainTech :

Merci pour celle là ! Depuis que j'utilise Split, je n'ai toujours mis qu'un seul caractère comme séparateur Je me coucherai moins bête ce soir !
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h04.


 
 
 
 
Partenaires

Hébergement Web