Faire une boucle ? [Résolu]

marty14400 22 Messages postés lundi 19 août 2013Date d'inscription 15 mars 2015 Dernière intervention - 13 sept. 2013 à 22:54 - Dernière réponse : marty14400 22 Messages postés lundi 19 août 2013Date d'inscription 15 mars 2015 Dernière intervention
- 18 sept. 2013 à 23:34
bonsoir,
je souhaiterai extraire d'une source html certain contenus et signalés dans des balises bien précise.Mon code actuel me convient tout a fait mais ne me récupère que la balise en début de page alors qu'il en existe plusieurs ayant le meme nom alors que je veux toute les récupere dans un textbox
dois je faire une boucle ? et comment s'y prendre ?

voici mon code
str1 = "<li class=""item"">"
str2 = "</li>"

s1 = InStr(st + 1, Text16, str1, vbTextCompare)
s2 = InStr(s1 + 1, Text16, str2, vbTextCompare)
If s1 = 0 Or s2 = 0 Or IsNull(s1) Or IsNull(s2) Then
foundstr = Text16

Else
s = s1 + Len(str1)
l = s2 - s
foundstr = Mid(Text16, s, l)

End If
Text16 = foundstr

Par avance merci
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
jordane45 21206 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 27 mai 2018 Dernière intervention - Modifié par jordane45 le 15/09/2013 à 01:02
1
Merci
Bonsoir,

Je me suis dit que vous souhaiteriez peut-être continuer sur le programme que vous avez débutez plutôt que de vous essayer aux expressions régulières (même si je pense que c'est un peu plus "puissant"..).

Bref, en reprenant votre code et en le modifiant un peu, voici ce que ça peut donner :

str1 = "<li class=""item"">"
str2 = "</li>"
s1 = 1
'On boucle tant qu'on trouve des valeurs (S1)
While s1 > 0
    s1 = InStr(s1, Text16, str1, vbTextCompare)
    s2 = InStr(s1 + 1, Text16, str2, vbTextCompare)
    'Si s1 est égale au s1 précédent.. c'est fini !
    If s1 > S1Precedent Then
       If s1 = 0 Or s2 = 0 Or IsNull(s1) Or IsNull(s2) Then
           Debug.Print "Aucune correspondance trouvée"
       Else
           S1Precedent = s1
           s1 = s1 + Len(str1)
           l = s2 - s1
           s2 = s2 + Len(str2)
           foundstr = Mid(Text16, s1, l)
      End If
    'On place le texte trouvé dans une nouvelle variable pour ne pas
    ' Modifier celle que l'on utilise pour le traitement...
    Text17 = Text17 & " " & foundstr
    End If
Wend
Debug.Print Text17
End Sub


Cordialement,
Jordane

Merci jordane45 1

codes-sources a aidé 80 internautes ce mois-ci

marty14400 22 Messages postés lundi 19 août 2013Date d'inscription 15 mars 2015 Dernière intervention - 18 sept. 2013 à 21:45
Merci Jordane :)
Commenter la réponse de jordane45
Meilleure réponse
1
Merci
Bonjour,
Comme jordane45, je me suis dit qu'un bout de code serait le bienvenu. Toutefois, j'ai pris quelques libertés avec le code original. Mais il est évident qu'une boucle est nécessaire pour extraire tous les contenus

On suppose :
1) que tu veux extraire le texte compris entre ces 2 balises.
2) que ces 2 balises existent conjointement.
3) que si ni l'une ni l'autre n'existent, alors tu prends le
texte entier.

    Dim débRech1        As Long
    Dim débRech2        As Long
    Dim s1              As Long
    Dim s2              As Long  	
    
    Dim Balise1         As String 
    Dim Balise2         As String
      
    Dim strpos          As long
    Dim strlen          As Long
 
    Dim nbFound         As Long    
    Dim foundstr()      As String   
   
    Balise1 = "<li class=""item"">" 
    Balise2 = "</li>" 

    Redim founstr(0 to 0)

    débRech1 = 1
    débRech2 = débRech1 + Len(Balise1)

    On démarre la boucle
    Do
       s1 = Instr(débRech1, Text16, Balise1, vbTextCompare)
   
       A ce stade si s1 = 0 c'est que la 1ère balise n'esxiste pas,
       et compte tenu de la supposition no 2,
       ce n'est pas la peine de rechercher la 2ème balise.

       If s1 = 0 then 
         
          En vertu de la supposition no 3, on prend le texte entier  
           
          nbFound = nbFound + 1        
          Redim Preserve foundstr(0 to nbFound)
          foundstr(nbFound) = Text16
         
          La on sort de la boucle 
          Exit Do        
       End if

       s2 = InStr(débRech2, Text16, Balise2, vbTextCompare) 

       strpos = s1 + Len(Balise1)
       strlen = s2 - s1 - Len(Balise1)       

       nbFound = nbFound + 1        
       Redim Preserve foundstr(0 to nbFound)
       foundstr(nbFound) = Mid$(Text16, strpos, strlen) 

       On déplace le début de la recherche suivante
      
       débRech1 = s2 + Len(Balise2)    
       débRech2 = débRech1 + Len(Balise1)

        On boucle sur la recherche suivante
    Loop



Voili. Voilu. Voilou
Cordialement
mJuJu

Merci mJuJu 1

codes-sources a aidé 80 internautes ce mois-ci

marty14400 22 Messages postés lundi 19 août 2013Date d'inscription 15 mars 2015 Dernière intervention - 18 sept. 2013 à 21:46
merci a toi :)
Commenter la réponse de mJuJu
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 16/09/2013 à 13:42
1
Merci
Bonjour,
Moi, je m'en tiens non au code tenté, mais à ce qui a été exprimé : à savoir :
"certain contenus et signalés dans des balises bien précise"
et ma réponse est alors celle-ci :
str1 = "<li class=""item"">"
  str2 = "</li>"
  Text1.Text = ""
  Open "d:essai.html" For Input As #1
   strtext = Input(LOF(1), #1)
  Close #1
  Do While strtext Like "*" & str1 & "*" & str2 & "*"
    pos1 = InStr(strtext, str1) + Len(str1) + 2
    pos2 = InStr(strtext, str2)
    pos3 = pos2 + Len(str2)
    Text1.SelText = Mid(strtext, pos1, pos2 - pos1 - 2) & vbCrLf
    strtext = Mid(strtext, pos3 + 2)
   Loop

la propriété multiline de la textbox devant bien évidemment être mise à True
________________________
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'interviendrai que si nécessité de la compléter.

Merci ucfoutu 1

codes-sources a aidé 80 internautes ce mois-ci

marty14400 22 Messages postés lundi 19 août 2013Date d'inscription 15 mars 2015 Dernière intervention - 18 sept. 2013 à 21:46
et re merci encore
Commenter la réponse de ucfoutu
jordane45 21206 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 27 mai 2018 Dernière intervention - 14 sept. 2013 à 00:25
0
Merci
Bonjour.
Vous pouvez essayer ça :
http://support.microsoft.com/kb/818802/fr
Commenter la réponse de jordane45
marty14400 22 Messages postés lundi 19 août 2013Date d'inscription 15 mars 2015 Dernière intervention - 18 sept. 2013 à 21:44
0
Merci
Bonsoir

Merci à tous pour votre aide, grâce a vous j'ai bien avancé sur ma programmation et tout fonctionne a merveille.
J'arrive donc a extraire le contenus de ma page html, a en personnaliser le contenus via des tag ID puis l'afficher sur un webrowser control a default d'une listview que je ne maîtrise pas du tout.

Toutefois je rencontre un petit soucis comment attribuer a un bouton nommé "précédent" et "suivant" la fonction de passer de page en page ?
A savoir qu'au moment de l'extraction du code html je détermine le nombre de page a visualiser grâce a une url présente se terminant par : ?p=2"> pour page2 ?p=3"> page 3 etc ...

Merci à vous
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 sept. 2013 à 22:12
cette nouvelle question n'a plus rien à voir avec celle objet de la présente discussion (extraire d'une source html certain contenus et signalés dans des balises bien précise)
Si la difficulté objet de CETTE discussion a été résolue >>> tag Résolu +++>>> autre discussion.
Merci de te conformer à cette discipline.
marty14400 22 Messages postés lundi 19 août 2013Date d'inscription 15 mars 2015 Dernière intervention - 18 sept. 2013 à 23:34
tres bien merci
Commenter la réponse de marty14400

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.