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 :

hwnd d'un msgbox Internet Explorer géré à partir d'Excel


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut hwnd d'un msgbox Internet Explorer géré à partir d'Excel
    Bonsoir,
    Je suis entrain de réaliser un code qui permettra de remplir un formulaire sur le net à partir de données issues d'une feuille excel. je suis arrivé à renseigner différents champs de la page web.
    Différentes routines de validation des données saisies sur la page web existent (écrites en js). si les données sont correctes, j'arrive à télécharger (ouvrir) un fichier pdf par macro vba.
    ci joint cette partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
        Do
            hwnd = FindWindow(vbNullString, "Téléchargement de fichiers")
            PauseTimer 1   'wait 1 seconde
            k = k + 1
        Loop While hwnd = 0
             SendKeys "%v"   'ouvre le fichier récupéré
            PauseTimer 1
            IE.Quit            'quitter IE
        End If
    ...
    Mon problème réside dans le fait que je n'arrive pas à récupérer le hwnd d'une msgbox d'erreurs lorsque les données saisies ne sont pas valides. (pour arrêter le code au cas de la présence d'erreurs de données).
    Ce msgbox à pour intitulé: Message de la page Web. avec une indication sur les champs invalides et un boutton OK
    peut être je suis à côté de la plaque du fait que je suis novice dans les API
    ou que je cherche à compliquer les choses.
    J'espère une aide.
    Merci

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    J'ai fais quelques recherches il y a quelque temps sur la prise de controle d'IE via VBA pour répondre a une autre question.
    Durant les recherche je suis tombé sur ça
    Je n'ai pas trop le temps de gratter dedans, mais il y a une foultitude d'info, donc peut être que la gestion des msgbox est abordée.
    Si j'étais toi je regarderais du coté des HtmlElementError... tu as surement possibilité d'intercepter l'erreur avant même qu'elle ne s'affiche a l'écran.
    avec juste un petit coup d'oeil y'a déjà ca qui sent bon
    Citation Envoyé par HtmlElementErrorHandle
    Lorsque vous créez un délégué HtmlElementErrorEventHandler, vous identifiez la méthode qui gérera l'événement. Pour associer l'événement au gestionnaire d'événements, ajoutez une instance du délégué à l'événement. Le gestionnaire d'événements est appelé chaque fois qu'un événement se produit, sauf si vous supprimez le délégué. Pour plus d'informations sur les délégués de gestionnaires d'événements, consultez Événements et délégués.
    Bon courage
    A++
    Qwaz

  3. #3
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Merci pour ta réponse. en fait, j'ai pu trouver le handle de cet msgbox récalcitrant et le fermer, mais seulement si IE est lancé manuellement et non à partir de mon code.
    Par contre, dans le cas de mon code, il reste bloqué tant qu'on ne ferme pas ledit msgbox. un message survient alors après une dizaine de secondes.
    Microsoft Office Excel attend la fin de l'exécution d'une action OLE d'une autre application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IE.Document.all("btnEnvoyer").Click 'ici blocage du code vba au cas ou la routine de validation des données envoi le fameux msgbox
    hwnd_err= FindWindow(vbNullString, "Message de la page Web")
    reste à 0 (normal puisque la ligne ci-dessus n'est exécuté qu'après fermeture manuelle du msgbox)

    Pour l'interception d'erreur, je ne pense pas qu'il y est erreur au niveau de IE (c'est un msgbox, banal ou non, lancé à partir d'une routine js de contrôle de validité des données) ou bien je me trompe.

    Enfin, j'ai essayé de récupérer les variables de validation issues du code source de la page; même sort. Le code vba est bloqué tant que le msgbox reste ouverte).
    Merci

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    après plusieurs tests et tâtonnements, le msgbox d'IE bloque la continuation de la macro excel ici (au cas où les données ne sont pas valides au vue des routines internes de la page web)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IE.Document.all("btnEnvoyer").Click 
    '--->ici blocage du code vba au cas ou la routine de validation des données envoi le fameux msgbox
    'suite du code
    si les données sont valides, le msgbox n'est pas envoyé et le code continu normalement.
    J'ai essayé de faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IE.Document.all("btnEnvoyer").Select
    sendkeys "{ENTER}{ENTER}"
    'suite du code
    j'avoue que c'est pas cartésien. ceci fonctionne aléatoirement alors que je cherche un fonctionnement catégorique.
    j'ai laissé tomber ces essais.

    Je pense laisser la main à l'utilisateur de fermer ce msgbox mais je désire connaître (dans mon code) si un msgbox a été envoyé par la page ou non.

    une précision. si IE a été lancé manuellement. j'ai pu trouver le handle de ce mesgbox à l'aide d'une macro test.
    Merci

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je fais un délestage de ce sujet vu qu'aucune réponse qui pourrait m'aider n'a été proposée

    juste une chose, le select de cette ligne n'est pas valable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IE.Document.all("btnEnvoyer").Select
    sendkeys "{ENTER}{ENTER}"
    'suite du code
    j'avais un on error resume next
    ceci fonctionne aléatoirement alors que je cherche un fonctionnement catégorique.
    fonctionnait quand le bouton avait le focus

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Juste une question, à tout hasard, n'étant pas du tout spécialiste de ce genre de problème : la référence "Microsoft Internet Controls" est bien cochée ?

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Merci,
    Le problème ne vient pas de là. tout fonctionne; le formulaire se remplit, les données sont envoyés; le fichier est téléchargé (à l'aide du handle du dailog box de téléchargement que j'arrive à trouver son handle) et IE se ferme.
    le hic, quand les données sont invalides. un msgbox "bloquant" est envoyé par la page IE. je n'arrive pas à avoir la main sur le handle de ce msgbox.

    par contre; si j'ouvre IE manuellement, je rentre des données invalides ùmanuellement. le msgbox s'affiche donc. j'ai fais une macro test qui me donne le handle de ce msgbox.

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Points : 89
    Points
    89
    Par défaut
    2010-2019 même problème
    je pilote, via mon application Access, un autre logiciel, je saisie les infos nécessaires dans Access, je les envois, tout va bien, jusqu’où le logiciel m'affiche une fenêtre confirmation (surement une msgBox (logiciel en delphi)), alors là tout s’arrête, je ne peut pas récupérer le Hwnd de cette fenêtre, donc rien a faire, jusqu’à clique manuel sur Oui ou sur Non

    Par contre si je travail manuellement sur ce logiciel, ensuite quand cette fenêtre Confirmation s'affiche, je vais sur mon projet Access, et depuis la fenêtre Visual Basic, je peut récupérer son Handle et ceux des boutons Oui et Non, et cliquer là où je veut

    J'ai essayer de contourner ça, avec plusieurs méthodes en vain
    J'ai fait des recherches, et j'ai trouver qu'il est impossible d’exécuter un code lorsque une msgbox est affichée, mais pourquoi ça fonctionne lorsque la saisie et manuelle, en plus le code que j'execute appartient a une autre application, pas a celle qui a générer la msgbox

Discussions similaires

  1. [XL-2010] Pilotage Internet explorer contenant javascript depuis excel
    Par anthony14123 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/12/2013, 15h08
  2. Réponses: 0
    Dernier message: 07/05/2010, 11h35
  3. Réponses: 9
    Dernier message: 21/07/2009, 10h57
  4. Internet Explorer - Cliquer sur les "MsgBox"
    Par apprenti_VBA dans le forum Général VBA
    Réponses: 2
    Dernier message: 20/05/2009, 17h07
  5. Réponses: 6
    Dernier message: 04/09/2008, 19h17

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