none
VBA et visual Basic 2005 Express RRS feed

  • Question

  •  

    Je souhaiterai récupérer des données sur un site WEB, les copier dans un tableau Excel et les traiter, tout ceci automatiquement.

    J'ai tenté de m'initier à VBA, mais j'ai l'impression que ce logiciel ne permet pas de traiter des applications externes.

    Si ceci est confirmé, Visual Basic 2005 Express me permettra-t-il de résoudre mon problème ?

    Merci pour votre aide à un débutant !

    mardi 24 octobre 2006 17:03

Réponses

  • Bonjour,

    En effet, c'est du code C# que je vous ai transcrit en VB.Net car je n'ai pas VB.Net sur ma machine. Il peut donc y avoir quelques erreurs ...

    Après quelques vérifications, cela donnerait :

    Public Shared Sub Main(ByVal args() As String)
    {
         Dim request As
    HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)
         Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
         Dim reader As New StreamReader(response.GetResponseStream())
         
    Console.WriteLine(reader.ReadToEnd())
         Console.ReadLine()
    }

    dimanche 29 octobre 2006 09:39
  •  

     

    Bonjour,

     

    Après de nouvelles tentatives le programme fonctionne enfin !!... merci pour ce support et votre patience...!!

     

    En fait je faisais une confusion entre les applications "Windows" et les applications "console".

     

    J'ai cependant une autre question :

    la liste des codes en format texte apparait dans la fenetre dos.

    Le fichier correspondant se trouce dans "c" sous la forme d'un exécutable.

     

    Ce que je cherche est un fichier texte manipulable...

    Pour ce faire je vois deux solutions  :

    1) le programme est modifié pour qu'il tourne sous windows et le résultat apparait sous forme dun fichier .txt sous windows à l'aide d'une instruction complémentaire

    2) le programme tourne sous" console" . Le fichier est éxécuté par une commande VB et le résultat est placé dans "C" sous forme .txt

     

    Qu'en pensez vous ?

     

     

     

    lundi 30 octobre 2006 09:33

Toutes les réponses

  • Bonsoir,

    Concernant VBA, je ne suis pas sur mais je pense que vous atteignez les limites.

    L'idéal serait plutôt d'implémenter une application .Net basée sur la classe HttpWebRequest pour les requêtes Http et sur VSTO pour la génération / manipulation de données Excel.

    Si vous ne possédez pas de licence Visual Studio, vous pouvez télécharger gratuitement Visual Studio Express

    mercredi 25 octobre 2006 19:35
  • Merci pour votre aide; j'ai téléchargé Visual Basic 2005, Express et tenté les codes suivants :

    System.Runtime.InteropServices.ComVisible(False)>Public Class Form1

    Dim myRequest As Net.FtpWebRequest=Net.ftpWebRequest.create(http://www.google.com)

    Dim my Response As Net.FtpWebResponse=myRequest.GetResponse()

     

    myResponse.close

     

    Après lancement du programme un message m'indique qu'ill manque une déclaration attendue ( code ??)

    l'instruction "myResponse" est soulignée...!

     

    Je rappelle que le but est de récupérer une page Web sous forme de page  mode Text afin d'exploiter le contenu de certaines données.

     

    jeudi 26 octobre 2006 12:31
  • Bonjour,

    Attention vous utilisez la classe FtpWebRequest au lieu de HttpWebRequest !

    Votre code devrait être le suivant :

    Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)
    Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    Dim receiveStream As Stream = response.GetResponseStream()
    'Lire ensuite le flux retourné dans l'objet receiveStream

    Voir l'exemple complet sur : http://msdn2.microsoft.com/fr-fr/library/system.net.httpwebrequest.getresponse.aspx

    jeudi 26 octobre 2006 13:19
  •  

    Bonjour

    Merci pour votre support.

    Ci dessous les codes complets du programme. Il semble qu'il n'y ait plus de bug. Cependant pour cela, j'ai du modifier certaines lignes en incluant Net.Http...... à la demande du débuggeur. Avez vous une explication sur cet ajout ?

    Mais l'exécution du programme pas à pas montre qu'il y a sans doute une instruction "pas claire" à la deuxième ligne... HttpWebRequest... Nothing ??

    Qu'en pensez vous ?,

    Merci par avance !

     

     

    Public Class Form1

    Dim WebRequest As Net.HttpWebRequest

    Dim HttpWebReq As Net.HttpWebRequest = _

    CType(WebRequest.Create("http://www.google.com"), Net.HttpWebRequest)

    Dim HttpWebResp As Net.HttpWebResponse = _

    CType(HttpWebReq.GetResponse(), Net.HttpWebResponse)

    ' Insert code that uses the response object.

    Class Test

    Public Shared Sub Main()

    Try

    ' Create an instance of StreamReader to read from a file.

    Dim sr As IO.StreamReader = New IO.StreamReader("TestFile.txt")

    Dim line As String

    ' Read and display the lines from the file until the end

    ' of the file is reached.

    Do

    line = sr.ReadLine()

    Console.WriteLine(Line)

    Loop Until line Is Nothing

    sr.Close()

    Catch E As Exception

    ' Let the user know what went wrong.

    Console.WriteLine("The file could not be read:")

    Console.WriteLine(E.Message)

    End Try

    End Sub

    End Class

    End Class

     

     

     

     

     

     

     

     

    vendredi 27 octobre 2006 06:33
  • Bonjour,

    Le fait que vous deviez rajouter "Net" devant les classes "HttpWebRequest", "HttpWebResponse" ... s'explique par le fait que le namespace complet est System.Net.HttpWebRequest.
    Par défaut, chaque fichier de classe contient l'instruction "Import System" permettant de ne pas avoir à répéter "System" pour chaque objet. Dans votre cas, il faut donc rajouter l'instruction "Import System.Net" afin de ne pas avoir à rajouter "Net" devant chaque objet.

    Ensuite, le bug dont vous parler vient du fait que vous avez rajouter une déclaration d'un membre nommé "WebRequest" alors que "WebRequest" est un objet du namespace "System.Net" permettant d'instancier l'objet "HttpWebRequest".

    Votre code devrait donc être :

    Import System
    Import System.Net

    Public Class Form1

    [...]

    Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)
    Dim response As HttpWebResponse = CType(HttpWebReq.GetResponse(), HttpWebResponse)
    Dim receiveStream As Stream = response.GetResponseStream()

    [...]

    End Class

    vendredi 27 octobre 2006 09:03
  • Bonsoir,

     

    Cette fois ci , après quelques ajustements, le programme ne semble plus contenir de bug.. cependant j'ai l'impression que le connexion à Google ne s'effectue pas ( je suis pourtant connecté par ADSL au réseau en permanence),...et je ne trouve pas trace sur la console  du document Texte (testlist.text) qui devrait à mon sens reproduire la page d'accueil de Google en mode Text..

    Avez vous une suggestion ?

     

    Ci dessous le programme com^plet, version console :

    Imports System

    Imports System.Net

    Imports System.Text

    Imports System.IO

    Module Module1

     

    Public Class Form1

    Public Shared Sub Main(ByVal args() As String)

    Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)

    Dim Response As HttpWebResponse = CType(request.GetResponse, HttpWebResponse)

     

     

    ' Insert code that uses the response object.

    End Sub

    Public Shared Sub Main()

    Try

    ' Create an instance of StreamReader to read from a file.

    Dim sr As IO.StreamReader = New IO.StreamReader("TestFile.txt")

    Dim line As String

    ' Read and display the lines from the file until the end

    ' of the file is reached.

    Do

    line = sr.ReadLine()

    Console.WriteLine(line)

    Loop Until line Is Nothing

    sr.Close()

    Catch E As Exception

    ' Let the user know what went wrong.

    Console.WriteLine("The file could not be read:")

    Console.WriteLine(E.Message)

    End Try

    End Sub

    End Class

    Sub Main()

    End Sub

    End Module

    vendredi 27 octobre 2006 16:53
  •  

    Bonsoir,

     

    En fait je trouve un document texte avec les informations ci dessous ??!!

     

    bin\Debug\ConsoleApplication1.exe
    bin\Debug\ConsoleApplication1.pdb
    bin\Debug\ConsoleApplication1.xml
    obj\Debug\ResolveAssemblyReference.cache
    obj\Debug\ConsoleApplication1.Resources.resources
    obj\Debug\ConsoleApplication1.vbproj.GenerateResource.Cache
    obj\Debug\ConsoleApplication1.exe
    obj\Debug\ConsoleApplication1.xml
    obj\Debug\ConsoleApplication1.pdb

    vendredi 27 octobre 2006 17:03
  • Bonsoir,

    Voici le code que j'utilise et qui fonctionne :

    static void Main(string[] args)
    {
         Dim request As
    HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)
         Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
         Dim reader As StreamReader = new StreamReader(response.GetResponseStream())
         
    Console.WriteLine(reader.ReadToEnd())
         Console.ReadLine()
    }

    vendredi 27 octobre 2006 19:05
  • Bonjour,

     

    Je pense que les codes ci-dessus ne sont pas des codes Visual Basic...!

    J'ai remplacé Static par Dim, suite à la suggestion du débuggeur, et j'ai la liste de code ci-dessous qui fait apparaitre 4 erreurs :

     1) Fin d'instruction attendue (static remplacée par Dim)

    2) Type attendu (new...)

    3) Streamreader est un type et ne peut pas être utilisé en tant qu'expression

    4) le nom reader n'est pas déclaré

     

     

    Imports System

    Imports System.Net

    Imports System.Text

    Imports System.IO

    Public Class Form1

    Dim void Main(string[]args)

    ' Specify the URL to receive the request.

    Public Shared Sub Main(ByVal args() As String)

    Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)

     

     

     

    Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)

    Dim reader as StreamReader=new

    StreamReader(response.GetResponseStream())

    Console.WriteLine(reader.readToEnd)

    Console.ReadLine()

    End Sub

    End Class

     

     

    samedi 28 octobre 2006 09:49
  • Bonjour,

    En effet, c'est du code C# que je vous ai transcrit en VB.Net car je n'ai pas VB.Net sur ma machine. Il peut donc y avoir quelques erreurs ...

    Après quelques vérifications, cela donnerait :

    Public Shared Sub Main(ByVal args() As String)
    {
         Dim request As
    HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)
         Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
         Dim reader As New StreamReader(response.GetResponseStream())
         
    Console.WriteLine(reader.ReadToEnd())
         Console.ReadLine()
    }

    dimanche 29 octobre 2006 09:39
  • Bonjour et merci pour votre réactivité y/c le dimanche...!

    J'ai donc testé les codes ci-dessous mais il semble que la connexion ne se fasse pas sur Google; j'ai pourtant vérifié qu'en  cliquant sur le lien (avec touche Ctrl) l'accès se faisait bien...

    En d'autres termes je ne reçois pas la page google en mode texte comme espéré...!

     Avez vous une suggestion  une suggestion ?

    En vous remerciant pour votre patience !

     

    Imports System

    Imports System.net

    Imports System.IO

    Public Class Form1

    Public Shared Sub Main(ByVal args() As String)

    Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)

    Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)

    Dim reader As New StreamReader(response.GetResponseStream())

    Console.WriteLine(reader.ReadToEnd())

    Console.ReadLine()

     

     

    End Sub

    End Class

     

     

     

    dimanche 29 octobre 2006 10:22
  • Bonjour,

    Quel est exactement le message d'erreur remonté par le Framework .Net ?

    Ne seriez-vous pas derrière un proxy nécessitant une authentification ? SI tel est le cas, alors ajouté la ligne de code suivante :

    1. Si votre compte windows est autorisé à aller sur internet :
           request.Credentials = CredentialCache.DefaultCredentials
    2. Si votre compte windows n'est pas autorisé à aller sur internet, il est nécessaire de préciser le compte à utiliser :
           request.Credentials = new NetworkCredential("login", "password", "domain")

    Sinon, là j'avoue ne plus avoir beaucoup de solution ... ;)

    dimanche 29 octobre 2006 11:15
  •  

     

    Durant l'exécution du preogramme, je lis le message : génération réussi

     

    Puis dans "C",  je trouve le fichier texte suivant :

     

    obj\Debug\ResolveAssemblyReference.cache
    obj\Debug\WindowsApplication1.Resources.resources
    bin\Debug\Nouvel essai suite mail MSDN du 29 10 2006.exe
    bin\Debug\Nouvel essai suite mail MSDN du 29 10 2006.pdb
    bin\Debug\Nouvel essai suite mail MSDN du 29 10 2006.xml
    obj\Debug\Nouvel essai suite mail MSDN du 29 10 2006.vbproj.GenerateResource.Cache
    obj\Debug\Nouvel essai suite mail MSDN du 29 10 2006.exe
    obj\Debug\Nouvel essai suite mail MSDN du 29 10 2006.xml
    obj\Debug\Nouvel essai suite mail MSDN du 29 10 2006.pdb

     

    Pour info j'ai ajouté la ligne request.Credentials et je travaille avec un boitier Alice box

    Une idée ?

     

     

     

     

    dimanche 29 octobre 2006 14:00
  •  

     

    Bonjour,

     

    Après de nouvelles tentatives le programme fonctionne enfin !!... merci pour ce support et votre patience...!!

     

    En fait je faisais une confusion entre les applications "Windows" et les applications "console".

     

    J'ai cependant une autre question :

    la liste des codes en format texte apparait dans la fenetre dos.

    Le fichier correspondant se trouce dans "c" sous la forme d'un exécutable.

     

    Ce que je cherche est un fichier texte manipulable...

    Pour ce faire je vois deux solutions  :

    1) le programme est modifié pour qu'il tourne sous windows et le résultat apparait sous forme dun fichier .txt sous windows à l'aide d'une instruction complémentaire

    2) le programme tourne sous" console" . Le fichier est éxécuté par une commande VB et le résultat est placé dans "C" sous forme .txt

     

    Qu'en pensez vous ?

     

     

     

    lundi 30 octobre 2006 09:33
  • Bonjour,

    Que ce soit en mode Console ou Winform, il n'y a aucun souci à produire un fichier texte contenant le résultat de la requête Http.

    Une application Winform sera plutôt orientée pour une utilisation par un utilisateur final alors qu'une application Console sera plutôt orientée pour une utilisation de type Batch, Tâches planifiées ...

    lundi 30 octobre 2006 10:59