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 :

Alimenter des formulaires en vba /JQUERY


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut Alimenter des formulaires en vba /JQUERY
    Bonjour,
    Nous avons un site INTRANET en JQUERY qui sert à saisir des budgets.

    Je souhaite alimenter les formulaires à partir d'un fichier excel en vba.

    le soucis majeur c'est que le site utilise de l'AJAX JQUERY, pour lancer des requetes séparées qui vont alimenter le formulaire
    et n'a pas de bouton valider mais réagis aux "keypress" et aux événements (blur, change, focus)

    Donc je ne sais pas comment attendre la fin de la requete ajax
    le code suivant ne fonctionnant pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Do Until Not IEwindow.Busy And IEwindow.ReadyState = READYSTATE_COMPLETE
                        Sleep (300)    'wait 0.5 second
                        DoEvents
                    Loop

    et est ce que sendkeys est la seule méthode pour simuler l'appuie sur une touche ?

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    non il y a d'autres possibilités, voir mes contributions

    [Pilotage Internet Explorer] Comment attendre la mise à jour d'un élément d'une page web … (Ajax inside !)

    Y voir l'exemple de l'évènement Change d'un élément en déclenchant son OnChange
    Mise à jour de l'étape 2 ce jour dans le post #76 !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Merci MARC ce sont des discussions très enrichissantes !

    Pour le OnChange, je n'ai pas sur ma page de script associé à cet événement du coup cela ne fonctionne pas.
    Code HTML : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    <input class="form-text" id="exerciceFin" style="width: 70px;" type="text" maxlength="10">
    
    <script>
    var exerciceFin = new CalendarEightysix( 
    		"exerciceFin", {
    		  "startMonday": true
    		, "format": "%d/%m/%Y"
    		, "draggable": true
    		, "prefill": false
    		, "offsetX": -10
    		, "offsetY": +10
    		, "theme": "vista"
    });
    
    </script>
    [/quote]
    
    voici un extrait du fichier .js qui a l'air de contrôler cela
    [QUOTE]lastCheckedExercice = null;
            checkExercice = function (force) {
                var $ex = $('#exercice');
    			var $exFin = $('#exerciceFin');
                var v = $.trim($ex.val());
    			var souscripteur = $('#souscripteur').html();
    			var vFin = $.trim($exFin.val());
                err('exercice');
    			/*
                if (v == '' || (lastCheckedExercice == v && force !== true)) {
                    if (v == '') {
                        $('#actions').css({display: 'none'});
                    }
                    return;
                }*/
                if (v == '' || (lastCheckedExercice == v && force !== true) || vFin=='') {
                    if ( (v == '') || (vFin  == '') ) {
                        $('#actions').css({display: 'none'});
                    }
                    return;
                }			
                loading();
                lastCheckedExercice = v;
                var $ac = $('#actions');
                $ac.css({display: 'none'});
                $.ajax({
                    type: 'POST',
                    url: window.baseUrl + '/gererBudgets/ajaxExerciceContrat',
                    dataType: 'json',
                    //data: {contrat: contrat.id, exercice: v, exerciceFin : vFin},
    				data: {contrat: contrat.id, exercice: v, exerciceFin : vFin, souscripteur : souscripteur},
                    success: function (response) {
                        loaded();
                        if (response.success) {
                            $ex.val(response.value);
                            lastCheckedExercice = response.value;
                            $ex.blur();
                            contrat.criteres = response.criteres;
                            contrat.lignes = response.lignes;
                            $('#actions #buttons').css({display: response.exists ? 'block' : 'none'});
                            //$('#newCritere').css({display: response.lignes.length > 0 ? 'none' : 'table-row'});
    						$('#newCritere').css({display: response.lignes.length > 0 ? 'none' : 'block'});
                            $('#actions #criteria').css({display: 'block'});
                            err('duplicate');
                            $('#exercice2').val('');
    						$('#exercice2DtFin').val('');
                            if (response.lignes.length == 0) {
                                $('#btnDupAll').css({display: 'none'});
                                $('#dupButtons').addClass('noDupAll');
                            }
                            else {
                                $('#btnDupAll').css({display: 'block'});
                                $('#dupButtons').removeClass('noDupAll');
                            }
                            updateCriteres();
                            $ac.css({display: 'block'});
                        }
                        else {
                            err('exercice', response.error || 'Une erreur est survenue.');
                            $ac.css({display: 'none'});
                        }
                    },
                    error: function () {
                        loaded();
                        err('exercice', 'Une erreur est survenue.');
                        $ex.focus();
                    }
                });
            };
    
            $("#exercice").keypress(function (event) {
                var code = (event.keyCode ? event.keyCode : event.which);
                if (code == 13) {
                    // Entrée
                    checkExercice(true);
                    return false;
                }
                if (code < 32) {
                    // Contrôle
                    return true;
                }
    			return true;
                /*if (code < 48 || code > 57) {
                    // Pas chiffre
                    return false;
                }*/
            }).blur(checkExercice);
    
            $("#exerciceFin").keypress(function (event) {
                var code = (event.keyCode ? event.keyCode : event.which);
                if (code == 13) {
                    // Entrée
                    checkExercice(true);
                    return false;
                }
                if (code < 32) {
                    // Contrôle
                    return true;
                }
    			return true;
                /*if (code < 48 || code > 57) {
                    // Pas chiffre
                    return false;
                }*/
            }).blur(checkExercice);

    du coup je fais actuellement comme cela :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set exercicefIN = myONGLET.getElementById("exerciceFin")   
            exercicefIN.disabled = False
     
            exercicefIN.Value = Format(Intersect(Contrat.EntireRow, xlBook.Names("Budget_date_fin").RefersToRange).Value, "dd/mm/yyyy")
            exercicefIN.Focus
     
            ActiveIE IEwindow.LocationName & " - " & IEwindow.Name
     
            SendKeys "~", True
    avec l'utilisation d'API
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ActiveIE(subject As String)
    Dim hwnd As Long, Cemail As String
     
        Cemail = subject
     
     
      If Cemail <> "" Then hwnd = FindWindow(vbNullString, Cemail)
     
      If hwnd = 0 Then Exit Sub
      SetForegroundWindow hwnd
      ShowWindow hwnd, SW_SHOWMAXIMIZED
     
    End Sub


    J'avais par contre trouvé l'astuce du gif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub WaitJquery(myONGLET As Object)
        Do Until myONGLET.getElementById("budgetsLoading").Style.visibility = "hidden"
            Sleep (300)    'wait 0.5 second
            DoEvents
        Loop
    End Sub

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    As-tu vu le post #76 de mon second lien ?
    Sinon dans un document DOM d'IE il y a une collection des scripts associés à la page …
    Un script peut être lancé via ExecScript comme dans cette discussion.
    Sinon tu en connais certainement plus que moi sur le sujet et comme je ne peux accéder à ta page …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,

    A titre indicatif voici un exemple de ce que l'on peut faire avec seleniumbasic ( selenium pour vba).
    L'exemple consiste à cliquer sur une date dans un calendrier et à récupérer la date qui est renvoyée en Ajax dans le champ "Selected Dates". Voici la page :
    Nom : AjaxLoadingPanel.png
Affichages : 727
Taille : 25,4 Ko
    La synchronisation consiste à attendre que le curseur de chargement de page disparaisse (comme toi un peu avec le test de visibilité du GIF )
    Voici le code :
    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
    Public Sub Test_Ajax()
      'J.P Aout 2016
      Dim by As New by, Assert As New Assert, Verify As New Verify, Waiter As New Waiter
      Dim driver As New WebDriver
      'driver.Start "firefox"
      driver.Start "internet explorer", _
      "http://demos.telerik.com/aspnet-ajax/ajaxloadingpanel/functionality/explicit-show-hide/"
      driver.Get "/defaultcs.aspx"
      ' on attend que la grille apparaisse timeout de 5 secondes max
      Dim container As WebElement
      Set container = driver.FindElement(by.Css(".demo-container"))  '
      While Waiter.Not(EstPresent(container), 10000): DoEvents: Debug.Print "wait grille": Wend
     ' on récupère le texte avant l'appel AJAX
      Dim noDatesTextElement As WebElement
      Set noDatesTextElement = driver.FindElementByXPath("//div[@class='RadAjaxPanel']/span")
      Dim TexteAvantAppelAjax As String
      ' texte présent dans le champ Selected Dates
      TexteAvantAppelAjax = noDatesTextElement.Text
      Debug.Print "Avant : " & TexteAvantAppelAjax
      ' on clique sur la date du 2 du mois en cours dans le calendrier
       driver.FindElement(by.linktext("2")).Click
      ' on attend la disparition du "loader" timeout de 7 secondes
      Dim loader As WebElement
      Set loader = driver.FindElement(by.Class("raDiv"))
       While Waiter.Not(EstPlusPresent(loader), 10000): DoEvents:  Debug.Print "wait fin loader": Wend
      ' texte présent dans le le champ rempli par ajax
      Dim TexteApresAppelAjax As String
      Dim selectedDatesTextElement As WebElement
      Set selectedDatesTextElement = driver.FindElement(by.XPath("//div[@class='RadAjaxPanel']/span"))
      ' on attend que le texte soit présent timeout de 5 secondes
      While Waiter.Not(EstVisible(selectedDatesTextElement), 5000): DoEvents:  Debug.Print "wait texte": Wend
      TexteApresAppelAjax = selectedDatesTextElement.Text
      Debug.Print "Après : " & TexteApresAppelAjax
      Application.Wait Now + TimeValue("0:00:10")
      driver.Quit
    End Sub
    Les fonctions appelées dans les wait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Function EstPresent(ele1 As WebElement)
    EstPresent = ele1.IsPresent
    End Function
    Private Function EstPlusPresent(ele1 As WebElement)
    EstPlusPresent = Not ele1.IsPresent
    End Function
    Private Function EstInVisible(ele1 As WebElement)
    EstInVisible = Not ele1.IsDisplayed
    End Function
    Private Function EstVisible(ele1 As WebElement)
    EstVisible = ele1.IsDisplayed
    End Function
    voici le résultat obtenu :
    Avant : No Selected Dates to display.
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    wait fin loader
    temps écoulé : 1,1
    Après : Tuesday, August 02, 2016
    Comme on peut le constater le while Wait.Not du "loader" n'est pas une boucle infernale et contient une tempo de 100ms.
    Cela fonctionne aussi avec Firefox (attention voir ici)

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    avec selenium on peut aussi attendre la fin d'activités Ajax jquery comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' on attend la fin d'activité Ajax
      While Waiter.Not(AttenteFinAjax(driver), 5000): DoEvents:  Debug.Print "wait fin ajax": Wend
    avec AttenteFinAjax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Function AttenteFinAjax(driver As WebDriver)
    AttenteFinAjax = driver.ExecuteScript("return jQuery.active == 0")
    End Function
    Attention cela ne fonctionne pas dans mon exemple précédent (pas jquery)

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    pour illustrer mon code précédent voici un exemple sur la page http://kyleschaeffer.com/development...-ajax-request/

    Nom : The_perfect_jquery_ajax_request.png
Affichages : 805
Taille : 64,2 Ko

    Le code consiste à envoyer un return sur le bouton "load the rss feed now !" (pour changer du clic classique) et à attendre la fin de la requête jquery ajax pour récupérer le texte affiché dans le panneau ajax-panel

    voici le code :
    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
    Public Sub Test_jquery_ajax_attente()
      'J.P Août 2016
      Dim by As New by, Assert As New Assert, Verify As New Verify, Waiter As New Waiter
      Dim driver As New WebDriver
      driver.Start "firefox", _
      "http://kyleschaeffer.com/"
      driver.Get "/development/the-perfect-jquery-ajax-request/"
      Dim bouton As WebElement
      Set bouton = driver.FindElement(by.ID("load-feed")) '
      While Waiter.Not(EstPresent(bouton), 10000): DoEvents: Debug.Print "wait bouton present": Wend
      Dim panneau_ajax As WebElement
      Set panneau_ajax = driver.FindElement(by.ID("ajax-panel")) '
      Debug.Print "Avant : "; panneau_ajax.Text
      ' on appuie sur le bouton load-feed
      bouton.SendKeys driver.Keys.Return
      t = Timer ' timer pour mesurer le temps de la requête ajax
      ' on attend la fin d'activité Ajax
      While Waiter.Not(AttenteFinAjax(driver), 5000): DoEvents: Wend
      Debug.Print "temps écoulé : " & Application.Round((Timer - t), 1)
      Debug.Print "Après : "; panneau_ajax.Text
      Application.Wait Now + TimeValue("0:00:10")
      driver.Quit
    End Sub
     
    Private Function AttenteFinAjax(driver As WebDriver)
    AttenteFinAjax = driver.ExecuteScript("return jQuery.active == 0")
    End Function
    et voici le résultat :
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Merci JP et Marc, pour vos informations.

    J'ai réussi à boucler mon code, l'attente avec le statut du gif animé, fonctionne très bien.
    J'ai du utiliser les sendkeys pour déclecher le code, ce qui fait que je ne peux utiliser mon pc que pour cette tache lorsque'il mouline mon fichier à cause du SetForegroundWindow
    du coup je vais tenter de trouver une solution avec vos indications.

    il faut que je déchiffre le code en javascript du fichier.js....

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonne nouvelle !

    Ajax en soit n'est pas bloquant avec de l'observation et un peu de jugeote,
    via une requête ou même en pilotant IE grâce à un repère comme un gif animé
    ou encore la mise à jour d'un élément …

    Au cas où, une autre astuce pour exécuter du JScript dans cette discussion
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    et voici la version du test de la fin d'activités de requête ajax jquery de la page http://kyleschaeffer.com/development...-ajax-request/ en utilisant l'object classique internetExplorer.Application.
    L'astuce consiste à "injecter" une fonction javascript qui lit la variable jquery.active et dans une boucle de test à écrire la valeur du test dans la barre de status d'internet explorer. Comme cela on peut lire la valeur de ce test à partir de VBA .
    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
    Public Sub Test_Ajax_jquery_ie()
    'J.P Août 2016
    ' On Error Resume Next
     'Déclaration des variables
    Dim IE As Object ' InternetExplorer
    Dim MaPage As Object
    'CHARGEMENT GENERAL
    Set IE = CreateObject("InternetExplorer.application")
       'Chargement d'une page Web
       IE.Visible = True
    IE.navigate "http://kyleschaeffer.com//development/the-perfect-jquery-ajax-request/"
    WaitIE IE
    Set MaPage = IE.Document
    Debug.Print "Avant : " & MaPage.getElementById("ajax-panel").outerText
    'on appuie sur le bouton en "injectant le click jquery javascript"
    MaPage.parentWindow.execScript (" $('#load-feed').click();")
    'MaPage.getElementById("load-feed").Click
     
    t = Timer ' timer pour mesurer le temps de la requête ajax
    MaPage.parentWindow.execScript ("var etatJquery = function(){return jQuery.active == 0 }")
      Do Until IE.statustext = "true"
                        Sleep (100)    'attend 0.1 seconde
                        DoEvents
      Debug.Print IE.statustext
    'on écrit l'état de jquery dans la  barre de status d'IE
    MaPage.parentWindow.execScript ("window.status=etatJquery()")
    Loop
    Debug.Print "temps écoulé : " & Application.Round((Timer - t), 1)
    Debug.Print "Après : " & MaPage.getElementById("ajax-panel").outerText
    End Sub
     
    'Procédure placée dans un module standard pour vérifier le chargement total de la page.
    Sub WaitIE(IE)
       'On boucle tant que la page n'est p'AS totalement chargée
       Do Until IE.ReadyState = 4
          DoEvents
       Loop
    End Sub
    et voici le résultat :
    Il est à noter que j'ai utilisé une commande jquery javascript pour simuler le click sur le bouton. A voir si on ne peut pas faire quelque chose de similaire pour simuler l'envoi de touches.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    En dehors de l'oubli de la déclaration de la procédure Sleep (remplacée par l'instruction Wait),
    ton code me génère une erreur pendant l'exécution sous IE9 sur la ligne précédente, la 21ème …

    Sinon la page est accessible à un débutant ayant suivi le tutoriel de Qwazerty
    en chauffant à peine une paire de neurones :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DemoIE1()
        With CreateObject("InternetExplorer.application")
                 .Navigate "http://kyleschaeffer.com/development/the-perfect-jquery-ajax-request/"
                 .Visible = True
           While .ReadyState < 4:  Wend
                 .Document.all("load-feed").Click
                  T! = Timer
            With .Document.all("ajax-panel")
                      While .outerText = "":  Wend
                Debug.Print .outerText; vbLf; vbLf; "Ajax exécuté en "; Format(Timer - T, "0.000s …")
            End With
                 .Quit
        End With
    End Sub
    « C'est simple ! » comme il dit le p'tit gars de chez Renault …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/08/2010, 23h07
  2. Edition des Form des Formulaires dans VBA
    Par GuixInDaMixx dans le forum IHM
    Réponses: 4
    Dernier message: 23/04/2008, 23h17
  3. Appeler des variables à partir d'un formulaire et VBA
    Par LeBihan dans le forum Modélisation
    Réponses: 2
    Dernier message: 19/03/2008, 20h25
  4. Réponses: 2
    Dernier message: 05/02/2007, 17h09
  5. [VBA] créer un executable des formulaires access
    Par benjapar dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/12/2006, 14h01

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