Une Boucle [Résolu]

Signaler
Messages postés
24
Date d'inscription
vendredi 6 février 2015
Statut
Membre
Dernière intervention
11 avril 2015
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Messieurs, Dames
Un grand merci de m'accepter parmi vous et j'espère contribuer à votre forum.
Complètement débutante dans la programmation, je souhaiterai avoir un petit coup de pouce sur la programmation suivante, en particulier sur une BOUCLE :
le code suivant me permet de récupérer des informations qui précédé une BALISE , dont le nombre est aléatoire dans mon texte.
Le soucis de mon code est que la Boucle reste figé sur la même BALISE au lieu d'enchaîner sur les balises suivantes et jusque à la dernière.
Par avance merci de votre aide <3

X = InStr(1, td, "BALISE")
While X > 0
a = Extract(Reserve, Label1.Caption, Label2.Caption, "", "")
Text6.Text = Extract(Reserve, Label6.Caption, Label7.Caption, "", "")
Text3.Text = a
Text4.Text = Extract(Reserve, a & Label2.Caption, Label4.Caption, "", "")
Text5.Text = Extract(Reserve, Label3.Caption, Label5.Caption, "", "")
If InStr(1, Text4.Text) > 0 Then
                    ICO = 1
                Else
                    ICO = 2
             End If

            ListView1.ListItems.Add , , Text4.Text, ICO, ICO
            ListView1.ListItems(ListView1.ListItems.Count).ListSubItems.Add , , Text5.Text
            ListView1.ListItems(ListView1.ListItems.Count).ListSubItems.Add , , "DISPONIBLE"
            Wend


EDIT: Ajout de la coloration syntaxique.

7 réponses

Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Bonsoir,

si tu débutes complètement la programmation, je te déconseille VB6.
Il a été abandonné par Microsoft il y a plus de 10 ans au profit des langages .Net.

Il y a des versions gratuites de l'environnement de développement (Visual studio Express 2008 à 2012 et Visual Studio Community pour 2013).
Community a plus de fonctions, mais il faut au moins Seven SP1.

Sinon pour ton problème (même en VB6), regarde du coté des Regex.


La modération m'amène à intervenir dans de nombreux posts, mais le seul langage que je maitrise est le C#, un peu de VB aussi. Pour vos codes pensez à la coloration. Réponse trouvée ->Question Résolue
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Bonour,
Dans le e code que tu montres :
1) on ne voit pas évoluer la variable X.
Il est dès lors normal que, si X > 0 au début, tu rentres dans une boucle sans fin ===>> ce n'est alors pas la boucle, qui est "figée", mais une boucle qui se répète à l'infini !
2) on ne voit pas non plus ce que fait (son code) la procédure Extract (je devine donc qu'elle contient des instructions copiées/collées d'un bout de code trouvé quelque-part ... mais lequel ?...)
Difficile, donc, de te répondre en connaissance de cause !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
24
Date d'inscription
vendredi 6 février 2015
Statut
Membre
Dernière intervention
11 avril 2015

Bonjour
Merci à tous de votre attention et de vos suggestions, finalement en parcourant le site j'ai trouvé une solution approprié à ma Boucle cependant je souhaiterais approfondir. le code suivant qui dans la fonctionnalité m'extrait en boucle tous les contenus "Début" "Fin" (qui sont multiples) d'un fichier et m'affiche tout en bloc alors que je souhaiterais un BEEP a chaque résultats


While S1 > 0
    S1 = InStr(S1, td, ("Début"), vbTextCompare)
    S2 = InStr(S1 + 1, td, ("fin"), vbTextCompare)
    
'Reponse negative si rien trouvé
If S1 > S1Precedent Then
       If S1 = 0 Or S2 = 0 Or IsNull(S1) Or IsNull(S2) Then
           Debug.Print "Aucune correspondance trouvée"
           Exit Sub
       Else
'recup url article
           S1 = S1 + Len("Début")
           bU = S2 - S1
           S2 = S2 + Len("Fin")
           foundstr1 = Mid(td, S1, bU)

    End If
Text2 = Text2 & " " & foundstr1 & vbCrLf
    End If
Wend
  End If


J'espère être clair dans mon explication et vous remercie d'avance
Messages postés
16040
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Bonjour, merci d'utiliser la coloration syntaxique. J'ai déjà modifié ton premier message....
Messages postés
24
Date d'inscription
vendredi 6 février 2015
Statut
Membre
Dernière intervention
11 avril 2015

Oups désolé :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Ajoute donc
Beep

juste avant d'incrémenter ta textbox !
Ceci étant dit : je ne vois pas pourquoi tu alimentes cette fois-ci une textbox au lieu (comme dans ton premier message) une listview ... voire une simple listbox (ce qui ne présente aucune difficulté, même pour un super débutant, à condition toutefois qu'il s'intéresse un tout petit peu à la signification de ce qu'il utilise, qu'il copie/colle).

Il y a un énorme fossé entre ces deux démarches :
- le développement, qui répond à une logique et permet de faire face à des situations différentes
- le psittacisme, qui ne peut que conduire à des échecs successifs, dès qu'on change un détail


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Non !
Et :
1) Le code que tu montres n'est pas complet. Tel quel, aucune sous-chaîne ne serait trouvée et la bloucle while ne serait jamais commencée. Il manque l'initialisation de S1.
2) Je te parlais plus haut de "psittacisme" ===>> est-ce (probable) ce qui te conduit à utiliser une variable S1Precedent qui ne varie pas ?
Moi, je veux bien essayer de t'aider, mais avec un effort minimum de ta part (un simple effort de logique).
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Allez ===>> regarde, teste, analyse et comprends ce que fait par exemple ceci :
Private Sub Command1_Click()
td = "cccccccccDébutchainefinkggjkhgjhgjhgjhgDébutchaine2finnhfffhgfhDébutddddfinxxxx"
reste = td
pos1 = InStr(reste, "Début")
pos2 = InStr(reste, "fin")
If pos1 = 0 Or pos2 = 0 Then MsgBox "rien trouvé": Exit Sub
Do While pos1 > 0
reste = Mid(reste, pos1 + Len("Début"))
pos2 = InStr(reste, "fin")
If pos2 = 0 Then Exit Sub
trouve = Left(reste, pos2 - 1)
Text2.Text = Text2.Text & trouve & vbCrLf: Beep
reste = Mid(reste, pos2 + Len("fin"))
pos1 = InStr(reste, "Début")
Loop
End Sub


Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Lorsque tu auras passé la première étape d'analyse et de compréhension, passe à la seconde ===>>ainsi, par exempole ===>>>
Private Sub Command1_Click()
Text2.Text = ""
td = "cccccccccDébutchainefinkggjkhgjhgjhgjhgDébutchaine2finnhfffhgfhDébutddddfinxxxx"
on_traite = Replace(td, "Début", "fin" & Chr(1))
toto = Split(on_traite, "fin")
For i = 0 To UBound(toto)
If Left(toto(i), 1) = Chr(1) Then
Text2.Text = Text2.Text & Mid(toto(i), 2) & vbCrLf: beep
End If
Next
End Sub

Comme tu le constates : on pourrait inventer mille et une solutions différentes. Elles ont un (et un seul) point commun ===>> la logique