Une Boucle

Résolu
Jessica-Normande Messages postés 24 Date d'inscription vendredi 6 février 2015 Statut Membre Dernière intervention 11 avril 2015 - Modifié par Whismeril le 6/02/2015 à 19:39
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 9 févr. 2015 à 13:13
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

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié par Whismeril le 6/02/2015 à 19:44
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 6/02/2015 à 20:05
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
0
Jessica-Normande Messages postés 24 Date d'inscription vendredi 6 février 2015 Statut Membre Dernière intervention 11 avril 2015
Modifié par Whismeril le 9/02/2015 à 09:49
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
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
9 févr. 2015 à 09:49
Bonjour, merci d'utiliser la coloration syntaxique. J'ai déjà modifié ton premier message....
0
Jessica-Normande Messages postés 24 Date d'inscription vendredi 6 février 2015 Statut Membre Dernière intervention 11 avril 2015
9 févr. 2015 à 10:12
Oups désolé :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/02/2015 à 10:35
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
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 févr. 2015 à 11:12
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).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 févr. 2015 à 11:42
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


0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 févr. 2015 à 13:13
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

0
Rejoignez-nous