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 :

Valider une popup de confirmation page html [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut Valider une popup de confirmation page html
    Je souhaite savoir comment valider une fenetre popup de validation qui s'ouvre suite à une macro qui clic sur un bouton dans une page html?
    Le code se bloque aprés le click et attend que je valide le "ok" de la popup avant de reprendre l'execution du code!!

    Merci pous vos réponses.

  2. #2
    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
    Peut être avec un Sans garantie

  3. #3
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut Valider une popup de confirmation page html
    Merci, mais dans ce cas il ne prend pas la commande sendkey ...
    C'est un peu comme si ru as un msgbox "bonjour". Tant que tu ne cliques pas sur "ok" le code est en pause.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub test
    msgbox"essai"
    sendkey "[~]"
    end sub
    Donc mon probleme est est le même mais sur une fenetre IE de confirmation
    "ok" ou "annuler" ==> le code reste donc bloqué.

  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
    Essaies donc d'introduire cette routine utilisant les API (exemple non testé faute d'avoir le lien du site et le code utilisé)
    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
    Option Explicit
    '---------------------------------------------------------
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function FindWindowEX Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Public Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
     
    Public Const BT_CLICK = &HF5
     
    Sub CliquePopUp(ByVal TitrePopup As String)
    Dim hwnd_PopUp As Long, hwnd_Ok As Long
    Dim k As Integer
     
    Do
        hwnd_PopUp = FindWindow(vbNullString, TitrePopup)      'ici
        k = k + 1
    Loop While hwnd_PopUp = 0 And k <= 10000
    '----------------------------------------------------------------
    If hwnd_PopUp <> 0 Then
        hwnd_Ok = FindWindowEX(hwnd_PopUp, 0&, "Button", "&OK")    'ou simplement "OK" (caption du bouton)
        Putfocus hwnd_Ok
        SendMessage hwnd_Ok, BT_CLICK, 0&, 0&
    End If
    End Sub
     
    'Pour tester (adapte la caption de ton popup)
    Sub test()
    CliquePopUp "Le titre de ton popup"
    End Sub

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    oui cela serait bien d'avoir le site ... et de savoir comment tu ouvre ta première page internet ( code ?)

  6. #6
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut
    Mon projet est sur un site intranet de mon boulot, mais je viens de trouver un exemple equivalent mais accessible pour un test:
    http://www.ca-anjou-maine.fr/
    ensuite tu vas dans "acceder à mes comptes" (bouton orange en haut)
    et tu tombes sur la page pour rentrer ses infos perso.

    Ne rentres rien dans les cases et tu valide avec "Confirmer" et donc tu as la popup qui s'ouvre!!

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set ElementCol = appIE.Document.getElementsByTagName("INPUT")
     
    For Each btnInput In ElementCol
    If btnInput.Value = "Confirmer" Then
    btnInput.Click' ouveture de la popup Exit For
    End If
    Next btnInput
    le code ce bloque à cet endroit et donc même avec une action sendkey, je n'arrive pas à valider le "OK" de la popup!!

    D'avance merci pour tes recherches!

  7. #7
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut
    Je suis toujours bloqué au même endroits!! Et donc voici un code qui montre parfaitement mon problème:

    La popup s'ouvre et le code reste en cours d'execution. moi je souhaite poursuivre en validant par vba celle-ci. J'accepte toute les réponses!!

    Pour qu'il fonctionne il faut être connecté au forum!!

    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
    Sub Deconnexion()
     
    Dim appIE As Object
    Dim sURL As String
    Dim Element As Object
    Dim btnInput As Object
    Dim ElementCol As Object
    Dim link As Object
     
    Application.ScreenUpdating = False
     
    Set appIE = CreateObject("InternetExplorer.Application")
     
    sURL = "http://www.developpez.net/forums/search.php?searchid=7509374"
     
    With appIE
        .Navigate sURL
        .Visible = True
    End With
     
                Do While appIE.Busy: DoEvents: Loop
                Do While appIE.ReadyState <> 4: DoEvents: Loop
     
    Set ElementCol = appIE.Document.getElementsByTagName("a")
    appIE.Visible = True
     
    Application.wait Now + TimeValue("00:00:04") 'ligne poue l'essai!!
     
    For Each link In ElementCol
        If link.innerHTML = "Déconnexion" Then
        link.Click      'Application.SendKeys ("~")
            Exit For
        End If
    Next link
     
                Do While appIE.Busy: DoEvents: Loop
                Do While appIE.ReadyState <> 4: DoEvents: Loop
     
    Application.ScreenUpdating = True
     
    End Sub
    Sinon il y a t il un moyende stopper la macro apres la commande:


  8. #8
    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
    je vois maintenant, j'avais un problème similaire (avec un bouton de validation sur un site) que je n'avais pas pu résoudre (ci-joint discussion)
    A l'apparition du popup, tout reste bloqué même le code vba.
    Mais j'avais trouvé un bricolage qui marchait (sans garantie à 100%) mais j'avoue que ce n'est pas cartésien et je n'ai pas poussé la recherche jusqu'à la limite.
    La manipulation est de donner le focus au bouton de validation et d'envoyer 2 fois la touche Entrée au lieu du clique sur le bouton (J'avais dans la popup le bouton OK par défaut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sendkeys "{ENTER}{ENTER}"
    Pour mon cas:
    Si le popup apparait, on avait un Enter sur le bouton de validation et le 2ème sur le OK du popup
    Si le poup n'apparait pas, on avait un Enter sur le bouton de validation et le 2ème dans le vide

  9. #9
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut re
    Merci pour cette réponse, mais dans mon cas le bricolage va être difficile à mettre en place car il faut que je place le curseur de la souris sur le bon bouton et lancer la procédure sendkey. Je vais faire un essai quand même.

    Sinon l'évenement qui se produit entraîne l'execution du code (1mn30) avant le message "....une action ole en cours". Il y a-t-il une façon de connaitre le ce type d'évenement afin de faire fabriquer une erreur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    on error ole goto suite:
    afin d'empêcher se verrouillage ?

  10. #10
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut popup
    J'ai mis en place la méthode sendkey mais effectivement c'est un peu barbare
    et ne garantie pas le 100% dans une boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Set ElementCol = navigateur.Document.getElementsByTagName("a")
        navigateur.Visible = True
        For Each link In ElementCol
        If link.innerHTML = "Valider" Then
        link.Focus: SendKeys "{ENTER}{ENTER}"
        SendKeys "{NUMLOCK}", True' remet la touche numlock du clavier active 
        Do While navigateur.Busy
        loop
        Exit For
        End If
        Next link
    Si il y a d'autres solutions qui garantissent une méthode plus fiable??

    Je prends toutes les solutions.....

  11. #11
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Points : 104
    Points
    104
    Par défaut re
    Il me semble qu'apres plusieurs essais sur quelques boucles sa fonctionne mais
    si je passe en mode industriel c'est un plantage total...
    La gestion du temps et du click simulé deviens trés difficile...


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

Discussions similaires

  1. rediriger un lien d'une popup vers la page precedente
    Par jonnyboy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/09/2007, 16h59
  2. Maintenir la relation avec une popup, sur plusieurs pages
    Par Ricou13 dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 15/03/2007, 17h52
  3. Réponses: 2
    Dernier message: 22/09/2006, 12h27
  4. [HTML] Rafraichir uniquement une partie d'un page html
    Par andlio dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/03/2006, 15h40
  5. Aide avec une popup et la page parente
    Par iomega dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 08/12/2005, 15h21

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