La fonction mid() me lache

noz666 Messages postés 26 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 21 février 2007 - 5 janv. 2007 à 12:22
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 5 janv. 2007 à 15:30
Bonjour ci joint une partie du code de mon llgiciel :
'cherche les liens en fonction de la console
console = Combo1.Text
source = Inet1.OpenURL("http://www.jeuxvideo.com/articles/listes/tests-" & console & "-noms.htm")
nb1 = InStr(1, source, "redacteur")
tmp = Len(source)
source = Mid(source, nb1, tmp - nb1)
'donne le nombre de résultat
tmp = UBound(Split(source, Titre))
Label3.Caption = tmp
nb = 1
For i = 1 To tmp
    nb1 = InStr(nb, source, Titre)
    nb2 = InStr(nb1, source, "")
    nb2 = nb    jeu(i) Mid(source, nb1, nb2 - nb1)> erreir a cete ligne
Next i
'===========================================
Voila alors je comprends pas pk y me met une erreur de procédure a cette fonction alors que c'est bien comme ça qu'on fait un mid

Meric de m'aider

10 réponses

le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
5 janv. 2007 à 12:39
tmp = Len( source ) <- on imagine 30 comme longueur
apres tu fais une boucle , qui fait quoi à ton avis ?
(car là tu ne traites pas mot par mot ta chaine de caractere)

For i = 1 To 30 
    nb1 = InStr(nb, source , Titre)
    nb2 = InStr(nb1, source, "")
    nb2 = nb    jeu(i) Mid( source , nb1, nb2 - nb1) > erreir a cete ligne
Next i
je ne comprends vraiment pas le sens de ta boucle,si tu nous l'expliques ligne par ligne, j'pense que tu comprendras ton erreur 
0
noz666 Messages postés 26 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 21 février 2007
5 janv. 2007 à 12:53
he bien enfette j'essaye de cherche un jeu dans une page web contenant plein de jeux donc par exemple quand je tape  "splinter cell" j'aimerai avoir tous la list des splinter cell qui est stocker dans l'array jeu
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 janv. 2007 à 13:08
nb = 1
For i = 1 To tmp
    nb1 = InStr(nb, source, Titre)
    nb2 = InStr(nb1, source, "")   <---- Inutile, nb2 est écrasé à la ligne suivante
    nb2 = nb    jeu(i) Mid(source, nb1, nb2 - nb1)  <--- nb2nb, nb1 devra théoriquement etre > nb, donc nb2-nb1 = négatif ==> erreur
Next i

Enjoy

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 janv. 2007 à 13:10
normalement tu dois trouver ton erreur avec ça, elle est très simple

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0

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

Posez votre question
noz666 Messages postés 26 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 21 février 2007
5 janv. 2007 à 13:16
Merci j'avais just a inverser nb2 et nb
0
noz666 Messages postés 26 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 21 février 2007
5 janv. 2007 à 13:21
he bien non apparement ça suffit pas
runtime error:

nb2 = 1
For i = 1 To tmp
    nb1 = InStr(nb2, source, Titre)
    nb2 = InStr(nb1, source, "")
    jeu(i) = Mid(source, nb1, nb2 - nb1)
Next i
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 janv. 2007 à 13:26
utilises Instr plutot que Split :

Private Sub Form_Load()
Dim sSource As String
Dim nCount As Long
Dim xsGames() As String
Dim i As Long
    sSource = Inet1.OpenURL("http://www.jeuxvideo.com/articles/listes/tests-" & Combo1.Text & "-noms.htm")
   
    nCount = ExtractGames(sSource, "splinter cell", xsGames)
   
    For i = 0 To nCount - 1
        Debug.Print i, xsGames(i)
    Next i
   
    Unload Me
End Sub


Public Function ExtractGames(ByRef vsHTMLSrc As String, ByRef vsTitle As String, ByRef vxsGames() As String) As Long
Dim i As Long
Dim nCount As Long
Dim xsGames As String
Dim nStart As Long
Dim nEnd As Long


    Erase vxsGames


    i = InStr(vsHTMLSrc, "<table border=""0"" cellpadding=""0"" cellspacing=""1"" summary="""">")
    If i Then
        i = InStr(i + 1, vsHTMLSrc, vsTitle, vbTextCompare)
        Do While i
            nStart = InStrRev(vsHTMLSrc, ">", i) + 1
            nEnd = InStr(i, vsHTMLSrc, "<")
           
            ReDim Preserve vxsGames(ExtractGames)
            vxsGames(ExtractGames) = Mid$(vsHTMLSrc, nStart, nEnd - nStart)
            ExtractGames = ExtractGames + 1
           
            i = InStr(i + 1, vsHTMLSrc, vsTitle, vbTextCompare)
        Loop
    End If
End Function

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 janv. 2007 à 13:31
noz666, pour ton code, attention à gerer le cas où nb1 et/ou nb2 = 0

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
noz666 Messages postés 26 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 21 février 2007
5 janv. 2007 à 14:19
renfield c'est toi qui a fait ça ??? peux tu m'expliquer comment ça marche stp ça a l'air intérressant mais je connais pour tout les fonctions
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 janv. 2007 à 15:30
euh....
oui, c'est moi qui te l'ai codé

tu donne a la fonction le code HTML de la page, le titre que tu cherches ("Cell" trouveras Splinter Cell...)
et tu donne un tableau de String

en sortie de la fonction, tu récupère le nombre de jeux trouvés, et ton tableau sera remplis.
là, le résultat est simplement écrit dans la fenetre de Debug.

On n'utilise là grosso modo que Instr, qui permet de rechercher du texte dans une String.
vbTextCompare est là pour que la casse ne soit pas prise en compte ( "SPLINTER" ou "SpliNter", même combat)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Rejoignez-nous