IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Extraire une info d'une chaine de caractéres de longueur aléatoire


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 31
    Par défaut Extraire une info d'une chaine de caractéres de longueur aléatoire
    Bonjour à tous,

    Je bloque sur le problème suivant.

    Je stocke le code source d'une page web dans une variable. J'aimerais extraire le prix des articles contenus dans cette variable mais l'identifiant unique, qui me permettrait de le faire, est distant aléatoirement :

    Samsung<br>patatipatata...> 520 euro<
    panasonic<br>patatipatatapatatipatatapatatipatata...> 550 euro<

    Comment faire pour pointer ces chaines indépendamment de la longueur et en extraire le prix

    Je vous remercie par avance pour votre précieuse aide.

  2. #2
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    Ce bout de code devrait t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Chaine = "Samsung<br>patatipatata...> 520 euro<"
    Pos = InStr(Chaine, " euro<") - 1
    Chaine = Mid(Chaine, 1, Pos)
    Longueur = Len(Chaine)
    For x = Longueur To 1 Step -1
        If Mid(Chaine, x, 1) = ">" Then
            prix = Mid(Chaine, x + 2)
            Exit For
        End If
    Next

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Ou encore celui-ci avec un peu plus de détails pour le contenu de ladite page où il y aurait plusieurs lignes de texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Explicit
        Dim txt
        txt ="Samsung<br>patatipatata...> 520 euro<" & vbnewline & _
        "panasonic<br>patatipatatapatatipatatapatatipatata...> 550 euro<"
        MsgBox ChercherPrix(txt)
        Function ChercherPrix(strText)
            Dim I, Pos, Tb, tx1, tx2, tmpPos, Resultat
            Tb = Split(strText, vbNewLine)
            Pos = 0
            If Ubound(Tb) = 0 Then Exit Function
            For I = 0 To Ubound(Tb)
              tx1 = "" 
              tx2 = ""
              Pos = InStr(1, Tb(i), "euro<", vbTextCompare)
              tmpPos = 0
              If Pos > 0 Then
                  tx1 = Mid(Tb(i), Pos - 1, Pos + 2)
                  Do
                     tx2 = Mid(Tb(i), Pos - tmpPos, 1) + tx2
                     tmpPos = tmpPos + 1
                  Loop Until Mid(Tb(I), Pos - tmpPos, 1) = ">"
              End If
              Resultat = Resultat & Mid(tx2, 1, Len(tx2) - 1) + Mid(tx1, 1, Len(tx1) - 1) & vbNewLine
            Next
            ChercherPrix = Resultat
        End Function
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 31
    Par défaut Extraire une info d'une chaine de caractére de longueur aléatoire
    Merci à tous les deux pour votre aide et au temps passé pour les codes.

    Par contre, cela ne résout pas mon problème de base qui est en amont de la solution que vous m'avez proposée. Mais ne vous inquiétez pas...ça va me servir ! En effet, vous indiquez, tous deux, un texte en dur précis dans la variable txt ou chaine. Et ensuite vous faite l'extraction.

    Moi ce que je cherche, c'est d'alimenter automatiquement votre variable txt ou chaine. Pour l'instant, ma macro lit une pages web, fait entrer le code source entier dans une variable par parquet de 1024 caractéres.

    Je n'ai aucune idée de la syntaxe mais en fait l'idée serait la suivante

    votre variable chaine ou txt = mid(ma variable, Samsung*euro).
    et ensuite le reste de votre macro

    J'ai matérialiser le fait qu'entre l’identifiant unique de la marque et le mot euro la longueur du texte est inconnu et donc de longueur variable par un * comme je l'utilise souvent lorsque je fais une recherche sous excel.

    N'hésitez pas à m'indiquer si j'ai été claire comme du jus de chique !!

    Et encore merci par avance pour votre aide

  5. #5
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Re,

    Quand tu écris :
    ma macro lit une pages web, fait entrer le code source entier dans une variable par parquet de 1024 caractéres.
    Tu peux développer, stp ? Car tu parles bien d'une variable.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 31
    Par défaut Extraire une info d'une chaine de caractére de longueur aléatoire
    Oui exactement. J'ai essayé d'adapter le code ci-dessous. C'est plus efficace que de manipuler IE. Par contre dans le code ci-dessous, l'élément à chercher est unique et prévisible car toujours formater de la même façon.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Public Declare Function OuvreInternet Lib "wininet" _
        Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, _
        ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Public Declare Function fermeInternet Lib "wininet" _
        Alias "InternetCloseHandle" (ByVal hInet As Long) As Integer
    Public Declare Function Ouvrepage Lib "wininet" _
        Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, _
        ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, _
        ByVal dwContext As Long) As Long
    Public Declare Function code_page Lib "wininet" _
        Alias "InternetReadFile" (ByVal hFile As Long, ByVal sBuffer As String, _
        ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
     
    Function valo_Euronext(sicovam)
    'renvoie le cours selon Euronext, ou bien "" si échec
    Dim texte_code As String * 1024
    sicovam = Right("00" & sicovam, 5)
    page_à_lire = "http://www.bourse-de-paris.fr/servlet/market8.ValueResult?xls=ok&search=" & sicovam & "&lang=fr"
    encr:
    internet = 0
    'boucle jusqu'à trouver une connexion internet
    Do While internet = 0
    internet = OuvreInternet("toto", 1, vbNullString, vbNullString, 0)
    Application.Wait Now + 0.5 / 24 / 3600
    Loop
    URL = 0
    URL = Ouvrepage(internet, page_à_lire, vbNullString, _
        ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
    Application.Wait Now + 0.5 / 24 / 3600
     
    'lit le texte de la page
    code_page URL, texte_code, 1024, nb_caractères_lus
    txtlu = Left(texte_code, nb_caractères_lus)
     
    fermeInternet URL 'ferme la page
    fermeInternet internet 'ferme Internet
    'si la page n'est pas une page Euronext, recommencer
    If InStr(txtlu, "Code") = 0 Then GoTo encr
     
    valo_Euronext = ""
    'rechercher le numéro de sicovam, puis les tab
    If InStr(txtlu, sicovam) > 0 Then
    txtlu = Right(txtlu, Len(txtlu) - InStr(txtlu, sicovam) - 1)
    txtlu = Right(txtlu, Len(txtlu) - InStr(txtlu, Chr(9))) 'tab
    txtlu = Right(txtlu, Len(txtlu) - InStr(txtlu, Chr(9))) 'tab
    If txtlu <> "" Then txtlu = Left(txtlu, InStr(txtlu, Chr(9)) - 1)
    If IsNumeric(txtlu) Then valo_Euronext = 1 * txtlu
    End If
     
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/09/2012, 09h00
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo