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

Macros et VBA Excel Discussion :

Authentification par Proxy


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut Authentification par Proxy
    Bonjour,

    J'utilise une macro trouvée sur le site pour récupérer des données contenues dans une page sur le web.
    Mon seul problème est que nous utilisons une authentification par proxy pour y accéder.
    Donc, à chaque fois que j'exécute la macro, j'ai une fenêtre d'authentification qui s'ouvre.
    Comment mettre les données directement dans la macro pour automatiser cette récupération ?

    Merci d'avance,

    Michaël

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour,

    Après une petite recherche, ne trouverais-tu pas ton bonheur avec les fonctions InternetConnect et surtout InternetOpen de la librairie wininet.dll ? Vas voir de ce côté http://msdn.microsoft.com/en-us/libr...73(VS.85).aspx

    Sinon, cette pagehttp://msdn.microsoft.com/en-us/magazine/cc163837.aspxtraite des Proxy côté client. N'y trouverais-tu pas ton bonheur non plus ?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    Bonjour,

    N'étant pas encore (mais je l'espère un jour) un pro d'Excel, comment j'intègre cela dans une macro ?
    Il doit y avoir des déclarations à faire que je ne connais pas.

    Merci,

    Michaël

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
         ByVal hInternetSession As Long, ByVal sServerName As String, _
         ByVal nServerPort As Integer, ByVal sUsername As String, _
         ByVal sPassword As String, ByVal lService As Long, _
         ByVal lFlags As Long, ByVal lContext As Long) As Long
    Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
         ByVal sAgent As String, ByVal lAccessType As Long, _
         ByVal sProxyName As String, _
         ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    au début de ton code. Je ne sais plus où j'avais récupéré cela

    Pour ajouter la référence (si tu ne le fais pas manuellement via les "Outils"),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.VBProject.references.addfromfile "C:\WINDOWS\System32\wininet.dll"
    Pour cela, place ta référence wininet.dll téléchargée dans ce dossier.

    Et voilà, il ne te reste plus qu'à utiliser tes fonctions comme il le faut. Vas voir à l'adresse du 1er lien, l'utilisation de ces fonctions.

    EDIT : Mince, l'adresse tu premier lien donne la bibli en C++. Il faut la chercher en VBA mais c'est la même.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Voilà un exemple de téléchargement d'un fichier à partir d'une page http. Peu importe, cela te montre comment faire. Il ne te reste plus qu'à adapter. cela provient du Net et non de moi-même, je tiens à le préciser.

    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
    51
    52
    53
    54
    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
    Declare Function fermeInternet Lib "wininet" _
        Alias "InternetCloseHandle" (ByVal hInet As Long) As Integer
    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
    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
     
    Sub télécharge_http()
    Dim texte_code As String * 1024
     
    fich = InputBox("adresse Internet du fichier à télécharger ?", _
        "téléchargement HTTP", "http://tonadresse/tonfichier.wav")
     
    'recherche extension du fichier
    extn = ""
    txt = fich
    encor:
    extn = Right(txt, 1) & extn
    txt = Left(txt, Len(txt) - 1)
    If Left(extn, 1) <> "." Then GoTo encor
    If extn = ".fr" Or extn = ".com" Then extn = ".html"
     
    'connection au fichier à télécharger
    internet = OuvreInternet("toto", 1, vbNullString, vbNullString, 0) 'ouvre Internet
    URL = Ouvrepage(internet, fich, vbNullString, _
        ByVal 0&, &H80000000, ByVal 0&) 'ouvre la page Web
     
    'lecture du fichier par paquet de 1024 bytes
    txt = ""
    nb_caractères_lus = 1
    Do While nb_caractères_lus > 0
    code_page URL, texte_code, 1024, nb_caractères_lus
    txt = txt & Left(texte_code, nb_caractères_lus)
    Loop
     
    'ménage
    fermeInternet URL 'ferme la page
    fermeInternet internet 'ferme Internet
     
    'recopie dans un fichier
    Open "c:\rien" & extn For Output As #1
    Print #1, txt
    Close #1
     
    'ouverture du fichier téléchargé
    ThisWorkbook.FollowHyperlink "c:\rien" & extn, , True
     
    End Sub
    Les 3ème et 4ème paramètres de la fonction InternetOpenA (OuvreInternet) correspondent aux Proxy. En récapitulant, tu es donc maintenant capable de : ouvrir ta page http peu importe le Proxy par macro, télécharger un fichier, récupérer les données comme tu le faisais précédemment avec ton ancienne macro.

    Bonne chance pour la suite.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    J'ai un message

    "Impossible d'ajouter une référence au fichier spécifié" sur wininet.dll.

    Michaël

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bon, je viens de tester. Oublie l'ajout de référence. Utilise le dernier code que je viens de te donner en mettant Private en face de chaque Declare et cela fonctionne.

    EDIT : pour info, ici tu ouvres une page internet http avec Proxy et tu peux télécharger un fichier. Que souhaitais-tu faire à la base sur cette page ?

    Par exemple, si tu veux copier les 5000 premiers caractères et les mettres dans un fichier texte, tu as :
    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
    Private 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
    Private Declare Function fermeInternet Lib "wininet" _
         Alias "InternetCloseHandle" (ByVal hInet As Long) As Integer
    Private 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
    Private 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
     
    Sub lit_code_page_Web()
    Dim texte_code As String * 1024
     
    page_Web_à_lire = InputBox("URL de la page à lire ?", _
         "code de la page Internet", "http://boursorama.fr")
    internet = OuvreInternet("toto", 0, vbNullString, vbNullString, 0) 'ouvre Internet
    URL = Ouvrepage(internet, page_Web_à_lire, vbNullString, _
        0, &H400000 Or &H4000000 Or &H80000000, 0) 'ouvre la page Web
    'lecture du code de la page par paquet de 1024 caractères
    txt = ""
    nb_caractères_lus = 1
    Do While nb_caractères_lus > 0
    'lit 1024 caractères et les copie dans texte_code
    code_page URL, texte_code, 1024, nb_caractères_lus
    txt = txt & Left(texte_code, nb_caractères_lus)
    Loop
    fermeInternet URL 'ferme la page
    fermeInternet internet 'ferme Internet
     
    Msgbox txt
     
    'recopie dans un fichier texte
    Open "c:\rien.txt" For Output As #1
    Print #1, txt
    Close #1
    'ouverture du fichier téléchargé
    ThisWorkbook.FollowHyperlink "c:\rien.txt", , True
     
    End Sub
    Voilà, tu as un exemple avec lecture de la page puis recopie et tu en as un autre avec téléchargement d'un fichier. Je pense qu'avec cela, peu importe ce que tu cherchais à faire à la base, tu arriveras à tes fins avec un peu d'adaptation. Par contre, dans les 2 cas, il n'y a pas de Proxy, il suffit que tu l'ajoutes toi-même comme je te l'avais dit.

    Bonne chance pour la suite !

  8. #8
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    Merci pour toutes ces informations, je vais essayer de voir comment je peux les exploiter.

    Michaël

Discussions similaires

  1. Connexion ssh et authentification par passphrase
    Par samjung dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 29/12/2005, 20h21
  2. Envoyer un fichier sur un serveur FTP par proxy
    Par Tierisa dans le forum Access
    Réponses: 4
    Dernier message: 13/12/2005, 16h39
  3. Authentification par pam_smb
    Par botambaoaks dans le forum Réseau
    Réponses: 2
    Dernier message: 18/10/2005, 07h19
  4. [HTTP] authentification par méthode post
    Par G00x2 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/07/2005, 15h05
  5. [1.1] Authentification par formulaire
    Par kakek dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 09h37

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