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

VBA Discussion :

Pilotage de Firefox depuis VBA


Sujet :

VBA

  1. #1
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut Pilotage de Firefox depuis VBA
    Bonjour

    Je cherche un moyen de contrôler des actions sur Firefox, sachant que c'est une macro pour une entreprise qui a une stratégie utilisateur très serrée, et que je dois faire une compatibilité de formulaires excel avec IE 6/7/8 et Firefox

    Les problèmes avec IE8 sont corrigés (Excel lisait un cookie, or les cookies ont simplement changé de répertoire et de nom entre les versions 6 et 8 (ainsi que 7, mais je pense que ça doit être le même nom/repertoire que le 8, du coup, je pense qu'il est également corrigé de ce côté là... j'attends juste qu'on me fournisse un PC avec IE7 installé pour confirmer mes dires)

    Le problème est Firefox (3 au passage, en revanche je ne sais pas si c'est 3.0, 3.5 ou 3.6). Déjà il m'a fallu demander le déploiement d'une DLL pour accéder au cookies (ils ne sont pas stockés dans un fichier texte, mais dans une base de données sqlite), et quand j'ai demandé pour l'installation de "Mozilla ActivX Control", on m'a dit non.

    Donc je cherche un moyen de piloter un Firefox avec VBA, sans DLL (ou alors si DLL, pas activx à installer, mais une dll toute simple) et de préférence sans SendKey (qui est toujours une solution que j'envisage, vu que je ne trouve pas de solution autre)

    Si quelqu'un a une piste, je suis preneur.

  2. #2
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Solution numéro 2 envisagée : utiliser Mozilla activex control mais sans l'installer (à savoir, j'ai installé ça sur un poste, récupéré les fichiers installés, puis copié les fichiers sur un poste sur lequel je n'ai aucun droits d'installation)

    La question que je me pose, c'est est ce qu'il est possible de contrôler Firefox 3 avec ça ou pas ? non parce que la dernière news date de 2005, alors j'ai quand même un doute

    Et question numéro 2, étant donné que ce package contient un activex, est ce qu'il est possible de le charger dans excel sans l'enregistrer ? regsvr32 requiert les droits administrateurs. J'ai essayé en faisant comme ça

    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
    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
     
    Sub test()
     
        Dim test As String
        Dim lib As Long
        Dim FF As Object
        Dim FList
        Dim RealName As String
        Dim i As Integer
        Dim libs() As Long
     
        On Error Resume Next
     
        test = "truc"
     
        FList = Dir("C:\....\Mozilla_ActiveX_Control\*.dll")
     
        i = 0
     
        ' Charge l'ensemble des DLL du dossier
        While FList <> ""
     
            RealName = "C:\....\Mozilla_ActiveX_Control\" & FList
            lib = LoadLibrary(RealName)
     
            ' Si le chargement est complet, je stocke le handle pour pouvoir libérer la DLL plus tard
            If lib <> 0 Then
                i = i + 1
                ReDim Preserve libs(1 To i)
                libs(i) = lib
            End If
     
            FList = Dir()
        Wend
     
        Set FF = CreateObject("Mozilla.Application")
        ' FF = Nothing, message d'erreur : "Un composant ActiveX ne peut pas créer d'objet"
     
        If (i > 0) Then
            For i = 1 To i
                Call FreeLibrary(libs(i))
            Next i
        End If
    End Sub
    mais comme je l'indique dans la source, je ne peux pas créer de contrôle activex derrière

    EDIT : Pas mieux en mettant "mozcontrol.dll" dans la liste des références du projet VBA et en essayant d'utiliser l'objet "MozillaBrowser"

    EDIT 2 : Ca se voit peut être pas, mais je ne connais pas DU TOUT excel et VBA (je développe en .Net/SQL Server habituellement )

  3. #3
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    J'ai trouvé une solution bourrine, mais efficace...

    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
    Declare Function BlockInput Lib "USER32.dll" (ByVal fBlockIt As Long) As Long
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub attachFF(filePath As String, fileName As String)
     
        On Error GoTo EOS
     
        BlockInput True
     
        ' Série de SendKeys et de Sleep pour faire ce que j'ai à faire sur Firefox
     
    EOS:
     
        BlockInput False
     
    End Sub
    Le temps que les raccourcis claviers s'activent, pas de possibilité pour l'utilisateur d'utiliser le clavier ni la souris

  4. #4
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    J'ai trouvé une solution à la fois mieux et pire

    mieux parce que je peux contrôler Firefox comme je le veux, même changer une page web comme je pourrais le faire avec greasemonkey (sûrement même beaucoup plus de possibilités)

    mieux également, parce que ça ne requiert qu'une extension

    mais pire, parce que c'est tout en telnet. L'extension mozrepl permet de démarrer un serveur telnet sur le port 4242 qui permet d'accéder à Firefox

    Une fois connecté sur Firefox (attention, avec telnet windows, ça buggue complet, il vaut mieux utiliser putty ou kitty qui gèrent un protocole RAW (c'est pas un vrai serveur telnet, si on met protocole telnet, pu/kitty envoie des caractères lors de la connexion, et du coup, la première commande est invalide)) on peut par exemple faire "alert('test');" pour que firefox lance une alerte

    Mon seul problème va être de trouver comment faire du telnet avec un excel

  5. #5
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Je continue dans mes recherches

    mozrepl est bien installé, j'ai mis un peu de temps à comprendre comment il fonctionne...

    Déjà je n'avais pas compris comment fonctionnaient les contextes (d'ailleurs j'ai toujours pas complètement compris), j'ai un peu galéré à faire ce que j'avais à faire (à savoir naviguer en cliquant sur 3 pages, annuler un téléchargement et uploader un fichier)

    Mais là c'est bon, c'est fait, j'ai mon code pour envoyer mon fichier (au passage, mozrepl peut modifier un champ input de type file, ce qui représente un problème de sécurité, vu qu'un script correctement écrit pourrait envoyer des fichiers système en douce sur des serveurs pirates, mais passons)

    Donc, il ne me reste plus qu'à envoyer des commandes sur le port 4242 depuis excel sans utiliser le programme windows telnet (vu qu'il ne fonctionne pas avec mozrepl)

    Et là idée de génie (enfin surtout navigation sur des tonnes de sites web) : winsock...

    Est ce que quelqu'un a déjà utilisé winsock avec excel et aurait une piste pour le développement de ma solution d'upload compatible IE 6/7/8 + FF ?

  6. #6
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Pour info, j'ai abandonné l'idée mozrepl, c'est trop instable pour une mise en productions. Parfois quand on lance des commandes, la connexion s'arrête sans réelle raison.

    J'avais créé un script qui me permettait de faire ce que je voulais, qui cliquais sur les liens etc etc... et une fois sur 2, même en lançant les commandes une par une à la main, la connexion vers mozrepl se coupe brutalement. Pourtant mozrepl n'est pas planté puisque je peux toujours me connecter dessus...

    En gros, c'est pas assez stable pour une mise en production dans une boite où 90% des gens ne sont pas informaticiens, et une grosse partie "n'y connait que dalle, c'est pas leur métier, il faut que ça marche"

Discussions similaires

  1. [AC-2003] Pilotage OpenOffice Writer depuis VBA
    Par CanardZ dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/11/2009, 20h43
  2. Réponses: 0
    Dernier message: 13/11/2008, 23h47
  3. appel de dll depuis VBA
    Par darkman10 dans le forum Windows
    Réponses: 3
    Dernier message: 10/05/2006, 15h03
  4. envoyer un mail depuis VBA access
    Par romrai dans le forum Access
    Réponses: 10
    Dernier message: 06/03/2006, 13h51
  5. Transaction depuis VBA--
    Par Fritzoune dans le forum Access
    Réponses: 1
    Dernier message: 16/09/2005, 16h05

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