Pilotage logiciel intranet avec vba excel

Signaler
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008
-
cs_epaminondas
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008
-


Bonjour, Je pilote un logiciel intranet avec VBA Excel avec le code suivant :


Code :



 





' Formulaire








 





   

'Remplie les champs nécessaires...









    IE.DOCUMENT.All(
"NumExp"
).Value = CodeEctien





    IE.DOCUMENT.All(
"motDePasse"
).Value = Pass





    IE.DOCUMENT.All(
"envoyer"
).Click                                       
'clique sur le bouton...








 





   

Do


While
IE.ReadyState
4









    DoEvents





   



Loop









 




IE.navigate
"http://www.intranet-ecti.org/asp/Missions/menu.asp"


'new/new.asp"








 




IE.navigate http://www.intranet-ecti.org/asp/Missions/
New
/
new
.asp




 




-->If IE.DOCUMENT.All("MISS_ETR").value= "MISS_ETR " then IE.DOCUMENT.All("MISS_ETR").click
                              

'clique sur le bouton










 




  

Do


While
IE.ReadyState
4









   DoEvents





  


Loop









… et je plante! --> variable objet ou bloc with non défini… et voila le code source


Code :




 



        Mission France



       

Mission Hors de France


 



Quelqu'un peut-il m'aider ?Merci.




 



17 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
Const READYSTATE_INTERACTIVE = 3
Const READYSTATE_COMPLETE = 4
' Formulaire

'Remplie les champs nécessaires...
IE.DOCUMENT.All("NumExp").Value = CodeEctien
IE.DOCUMENT.All("motDePasse").Value = Pass
IE.DOCUMENT.All("envoyer").Click 'clique sur le bouton...

Do While IE.ReadyState <> READYSTATE_INTERACTIVE
DoEvents
Loop

Do While IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop

IE.navigate "http://www.intranet-ecti.org/asp/Missions/menu.asp" 'new/new.asp"

Do While IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop

With IE.DOCUMENT.All("MISS_ETR")
If .value= "MISS_ETR " then
.click 'clique sur le bouton
End If
End With



à voir:
http://www.vbfrance.com/codes/CLIQUER-SUR-LIEN-JAVASCRIPT-CONTROLE-INTERNET-EXPLORER-REMPLIR_46366.aspx
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Merci pour ta réponse Renfield.
Je suis sûr que c'est ça mais toujours le même message.
Je ne pense pas que ça vienne des références, puisque ça marche jusque là.
Es tu sûr que dans l'instruction With IE Document.All("MISS_ETR"), l'expression entre parenthèses est la bonne ?
Je reproduis, ci-dessous, le texte modifié pour que tu voies, si je n'ai pas fait de bêtises ...

[CODE]
Sub Convention()                                                                                             ' Accès au logiciel Convention


Dim numeroexpert As Long
Dim password As Variant
Dim IE As Object
Dim sLocalFilename As String
Const READYSTATE_INTERACTIVE = 3
Const READYSTATE_COMPLETE = 4


        'crée un objet internet Explorer
        Set IE = CreateObject("InternetExplorer.Application")
        'le masque
        IE.Visible = True


        'ouvre la page d'enregistrement de identification Ecti
        IE.navigate "http://www.intranet-ecti.org/asp/index.asp"
        'attends que la page soit ouverte
        Do While IE.readyState <> READYSTATE_INTERACTIVE
        DoEvents
        Loop
       
' Formulaire


    'rempli les champs nécessaires...
    IE.DOCUMENT.All("NumExp").Value = CodeEctien
    IE.DOCUMENT.All("motDePasse").Value = Pass
    IE.DOCUMENT.All("envoyer").Click                                                          'clique sur le bouton...
   
Do While IE.readyState <> READYSTATE_INTERACTIVE
   DoEvents
Loop


Do While IE.readyState <> READYSTATE_COMPLETE
   DoEvents
Loop

'IE.navigate "http://www.intranet-ecti.org/asp/Missions/menu.asp"               
IE.navigate "http://www.intranet-ecti.org/asp/Missions/New/new.asp"
 
  
With IE.DOCUMENT.All("MISS_ETR")
    If .Value = "MISS_ETR " Then
        .Click 'clique sur le bouton
    End If
End With
    Do While IE.readyState <> READYSTATE_COMPLETE
   DoEvents
Loop

Merci

end sub
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
tu as mélangé certaines choses

après un .Navigate, on fait un boucle en attente de READYSTATE_COMPLETE :

Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

idem ici :

IE.navigate " [ Lien ]"

xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

With IE.DOCUMENT.All("MISS_ETR")

tu ne peux en effet pas jouer avec MISS_ETR de ton document, si tu n'a pas ce document : attend qu'il soit chargé.
le controle IE fonctionne de manière asynchrone.
il rend la main alors que la page n'est pas chargée. a toi d'attendre.

après un click sur un bouton, il faut attendre l'etat INTERACTIVE qui marque que le document réagit. ensuite, on attend e nouveau l'Etat COMPLETE

------------------------------------------

Sub Convention() ' Accès au logiciel Convention
Dim numeroexpert As Long
Dim password As Variant
Dim IE As Object
Dim sLocalFilename As String
Const READYSTATE_INTERACTIVE = 3
Const READYSTATE_COMPLETE = 4

'crée un objet internet Explorer
Set IE = CreateObject("InternetExplorer.Application")
'l'affiche
IE.Visible = True

'ouvre la page d'enregistrement de identification Ecti
IE.navigate " [ Lien ]"
'attends que la page soit ouverte
Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

' Formulaire

'rempli les champs nécessaires...
IE.DOCUMENT.All("NumExp").Value = CodeEctien
IE.DOCUMENT.All("motDePasse").Value = Pass
IE.DOCUMENT.All("envoyer").Click 'clique sur le bouton...

Do While IE.readyState <> READYSTATE_INTERACTIVE
DoEvents
Loop

Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

IE.navigate " [ Lien ]"


With IE.DOCUMENT.All("MISS_ETR")
If .Value = "MISS_ETR " Then
.Click 'clique sur le bouton
End If
End With

Do While IE.readyState <> READYSTATE_INTERACTIVE
DoEvents
Loop
Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

end sub
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Tu vas pouvoir écrire un manuel pour les nuls, si ça continue.


Voila le bout de code incriminé qui est le symétrique du haut :


[CODE]


IE.navigate "http://www.intranet-ecti.org/asp/Missions/New/new.asp"


Do While IE.readyState <> READYSTATE_INTERACTIVE
            DoEvents
        Loop


With IE.DOCUMENT.all("MISS_ETR")
   If .Value = "MISS_ETR " Then
    .Click                                                                       'clique sur le bouton
    End If
End With


Do While IE.readyState <> READYSTATE_INTERACTIVE
   DoEvents
Loop


Do While IE.readyState <> READYSTATE_COMPLETE
   DoEvents
Loop


End Sub

Merci pour ta patience
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
après un Navigate, on attend l'etat COMPLETE, avant de faire quoi que ce soit :

IE.navigate " [ Lien ]"

Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

With IE.DOCUMENT.all("MISS_ETR")
...
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Encore un tour de lasso Renfield,
toujours erreur 91
A +
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Bonjour Renfield,


ça marche et je suis passé au contrôle suivant. Décidément tout ça ne s'invente pas et j'aimerais bien trouver une base de données sur le sujet ...


Voilà mon code :





Sub Convention()                                                                                             ' Accès au logiciel Convention<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>











   
Dim maPageHtml As HTMLDocument













    Dim Helem As HTMLElementCollection













    Dim TypeDocument As String













    Dim Deleg As Object













    Dim HTMLDelegElement(100) As HTMLElementCollection













   














Dim IE As Object












Dim sLocalFilename As String












Const READYSTATE_INTERACTIVE = 3











Const READYSTATE_COMPLETE = 4









 








        'crée un objet internet Explorer











       
Set IE = CreateObject("InternetExplorer.Application")













       
'le masque











        IE.Visible = True









 








        'ouvre la page d'enregistrement de identification Ecti











       
IE.navigate "http://www.intranet-ecti.org/asp/index.asp"













       
'attends que la page soit ouverte











       
Do While IE.readyState <> READYSTATE_INTERACTIVE













       
DoEvents











        Loop











       












' Formulaire









 








    'rempli les champs nécessaires...











    IE.DOCUMENT.all("NumExp").Value = CodeEctien











    IE.DOCUMENT.all("motDePasse").Value = Pass











    IE.DOCUMENT.all("envoyer").Click                                                          'clique sur le bouton...











   













Do While IE.readyState <> READYSTATE_INTERACTIVE













   DoEvents












<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??>
<st1:place>
Loop
</st1:place>














 









Do While IE.readyState <> READYSTATE_COMPLETE













   DoEvents












<st1:place>
Loop
</st1:place>














 









IE.navigate "http://www.intranet-ecti.org/asp/Missions/New/new.asp"











 









Set maPageHtml = IE.DOCUMENT












Do While IE.readyState <> READYSTATE_INTERACTIVE













            DoEvents













       

<st1:place>
Loop
</st1:place>
















       














Do While IE.readyState <> READYSTATE_COMPLETE













  
DoEvents










Loop











  













    ' getElementsByName("1") est le nom du bouton Radio











 
  'Item(1) correspond à la 2eme option dans la liste des boutons











  
Set Helem = maPageHtml.getElementsByName("TypeDocument").Item(1)













    Helem.setAttribute "checked", "True"













   














Set maPageHtml = IE.DOCUMENT












  

Set Helem = maPageHtml.getElementsByName("Deleg")
  --> Incompatibilité de type









                                       ' Choix d'une Délégation











For I = 0 To (HTMLDeleg.Length - 1)













     If HTMLDelegElement(I).innerText Like "FR82 >TARN ET GARONNE - FR82" Then













          HTMLDelegElement(I).Selected = True













     End If











Next










Stop








End Sub


Et voici le code source

 <tr>
 <td class="cellBold">Délégation </td>
 <td><select name="Deleg">
   <option value="">Choisissez une délégation</option>
   <option value=""></option>
   <option value=FR01 >AIN - FR01 </option><option value=FR02 >AISNE - FR02 </option><option value=FR03 >ALLIER - FR03 </option><option value=FR04 >ALPES DE HAUTE-PROVENCE - FR04 </option><option value=FR06 >ALPES MARITIMES - FR06 </option><option value=FR07 >ARDÈCHE - FR07 </option><option value=FR08 >ARDENNES - FR08 </option><option value=FR09 >ARIÈGE - FR09 </option><option value=FR10 >AUBE - FR10 </option><option value=FR11 >AUDE - FR11 </option><option value=FR12 >AVEYRON - FR12 </option><option value=FR67 >BAS-RHIN - FR67 </option><option value=FR13 >BOUCHES DU RHÔNE - FR13 </option><option value=FR14 >CALVADOS - FR14 </option><option value=FR15 >CANTAL - FR15 </option><option value=FR16 >CHARENTE - FR16 </option><option value=FR17 >CHARENTE MARITIME - FR17 </option><option value=FR18 >CHER - FR18 </option><option value=FR19 >CORRÈZE - FR19 </option><option value=FR20A>CORSE DU SUD - FR20A</option><option value=FR21 >CÔTE D'OR - FR21 </option><option value=FR22 >CÔTES D'ARMOR - FR22 </option><option value=FR23 >CREUSE - FR23 </option><option value=FR79 >DEUX-SÈVRES - FR79 </option><option value=F107 >DOM/TOM - F107 </option><option value=FR24 >DORDOGNE - FR24 </option><option value=FR25 >DOUBS - FR25 </option><option value=FR26 >DRÔME - FR26 </option><option value=FR91 >ESSONNE - FR91 </option><option value=FR27 >EURE - FR27 </option><option value=FR28 >EURE ET LOIR - FR28 </option><option value=FR29 >FINISTÈRE - FR29 </option><option value=FR30 >GARD - FR30 </option><option value=FR32 >GERS - FR32 </option><option value=FR33 >GIRONDE - FR33 </option><option value=FR20B>HAUTE CORSE - FR20B</option><option value=FR43 >HAUTE LOIRE - FR43 </option><option value=FR31 >HAUTE-GARONNE - FR31 </option><option value=FR52 >HAUTE-MARNE - FR52 </option><option value=FR05 >HAUTES-ALPES - FR05 </option><option value=FR70 >HAUTE-SAÔNE - FR70 </option><option value=FR74 >HAUTE-SAVOIE - FR74 </option><option value=FR65 >HAUTES-PYRÉNÉES - FR65 </option><option value=FR87 >HAUTE-VIENNE - FR87 </option><option value=FR68 >HAUT-RHIN - FR68 </option><option value=FR92 >HAUTS DE SEINE - FR92 </option><option value=FR34 >HÉRAULT - FR34 </option><option value=FR35 >ILLE ET VILAINE - FR35 </option><option value=FR36 >INDRE - FR36 </option><option value=FR37 >INDRE ET LOIRE - FR37 </option><option value=FR38 >ISÈRE - FR38 </option><option value=FR39 >JURA - FR39 </option><option value=FR40 >LANDES - FR40 </option><option value=FR41 >LOIR ET CHER - FR41 </option><option value=FR42 >LOIRE - FR42 </option><option value=FR44 >LOIRE ATLANTIQUE - FR44 </option><option value=FR45 >LOIRET - FR45 </option><option value=FR46 >LOT - FR46 </option><option value=FR47 >LOT ET GARONNE - FR47 </option><option value=FR48 >LOZÈRE - FR48 </option><option value=FR49 >MAINE ET LOIRE - FR49 </option><option value=FR50 >MANCHE - FR50 </option><option value=FR51 >MARNE - FR51 </option><option value=FR53 >MAYENNE - FR53 </option><option value=FR54 >MEURTHE ET MOSELLE - FR54 </option><option value=FR55 >MEUSE - FR55 </option><option value=FR56 >MORBIHAN - FR56 </option><option value=FR57 >MOSELLE - FR57 </option><option value=FR58 >NIÈVRE - FR58 </option><option value=FR59A>NORD (SAUF ARRT DUNKERQUE) - FR59A</option><option value=FR60 >OISE - FR60 </option><option value=FR61 >ORNE - FR61 </option><option value=FR75 >PARIS - FR75 </option><option value=FR62A>PAS DE CALAIS - ARTOIS - FR62A</option><option value=FR62B>PAS DE CALAIS LITTORAL + DUNKERQUE - FR62B</option><option value=FR63 >PUY DE DÔME - FR63 </option><option value=FR64 >PYRÉNÉES ATLANTIQUES - FR64 </option><option value=FR66 >PYRÉNÉES ORIENTALES - FR66 </option><option value=FR69 >RHÔNE - FR69 </option><option value=FR71 >SAÔNE ET LOIRE - FR71 </option><option value=FR72 >SARTHE - FR72 </option><option value=FR73 >SAVOIE - FR73 </option><option value=FR77 >SEINE ET MARNE - FR77 </option><option value=FR76B>SEINE MARITIME (LE HAVRE) - FR76B</option><option value=FR76A>SEINE MARITIME (ROUEN) - FR76A</option><option value=FR93 >SEINE SAINT-DENIS - FR93 </option><option value=FR80 >SOMME - FR80 </option><option value=FR81 >TARN - FR81 </option><option value=FR82 >TARN ET GARONNE - FR82 </option><option value=FR90 >TERRITOIRE DE BELFORT - FR90 </option><option value=FR94 >VAL DE MARNE - FR94 </option><option value=FR95 >VAL D'OISE - FR95 </option><option value=FR83 >VAR - FR83 </option><option value=FR84 >VAUCLUSE - FR84 </option><option value=FR85 >VENDÉE - FR85 </option><option value=FR86 >VIENNE - FR86 </option><option value=FR88 >VOSGES - FR88 </option><option value=FR89 >YONNE - FR89 </option><option value=FR78 >YVELINES - FR78 </option></select>
 </td>
 <td class="cellBold" align="right">OU entrez son code </td>
 <td></td>

Est-ce que tu peux m'aider à franchir ce nouveau cap ?
Merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
"j'aimerais bien trouver une base de données sur le sujet"

commence par lire les réponses que l'on te soumet...

je vois dans ton code

IE.navigate "http://www.intranet-ecti.org/asp/index.asp"

'attends que la page soit ouverte
Do While IE.readyState <> READYSTATE_INTERACTIVE
DoEvents
Loop

mon dernier message te disait pourtant :

après un Navigate, on attend l'etat COMPLETE, avant de faire quoi que ce soit :
IE.navigate " [ Lien ]"

Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop

le READYSTATE_INTERACTIVE, c'est uniquement lorsque tu appelles un Click, un Submit ....
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
ta boucle :

For Each Deleg In IE.Document.getElementsByName("Deleg")(0).getElementsByTagName("Option")
If InStr(1, Deleg.innerText, "FR82", vbTextCompare) Then
Deleg.Selected = True
Exit For
End If
Next Deleg
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

ya ka d'mander.


Evidemment ça marche.
En définitive, je cherche et tu trouves. J'ai l'impression d'être un gros nul mais mon programme avance. Alors, tant que tu veux bien m'aider ...
Merci et à +
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Bonjour Renfield,

me re voilà.
J'ai pas mal avancé mais je bute sur un cas qui fait un peu déjà vu mais sans "name"
</tr><tr><?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>










 <td colspan="8" align="center">










  







 </td





 






 





Public Sub ExpertResearch()                                         ' Accès au programme Experts





   
Dim maPageHtml As HTMLDocument










    Dim Helem As HTMLElementCollection










    Dim TypeDocument As String










    Dim Deleg As Object










    Dim HTMLDelegElement(100) As HTMLElementCollection










   











Dim IE As Object









Dim sLocalFilename As String









Const READYSTATE_INTERACTIVE = 3







Const READYSTATE_COMPLETE = 4




 







    
   'crée un objet internet Explorer






       
Set IE = CreateObject("InternetExplorer.Application")










       
'le masque






        IE.Visible = True





 







        ' Ouvre la page d'enregistrement de identification Ecti






       
IE.navigate "http://www.intranet-ecti.org/asp/Experts/ExpertsActifs/selectionGenerale/filtre.asp"









        ' Attends que la page soit ouverte






       
Do While IE.readyState <> READYSTATE_INTERACTIVE










        DoEvents










       

<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??>
<st1:place>
Loop
</st1:place>












 









        Do While IE.readyState <> READYSTATE_COMPLETE










       
DoEvents






        Loop





 





' Formulaire




 







    ' Remplit les champs nécessaires...






    IE.DOCUMENT.all("AnNai").Value = "1940"






    IE.DOCUMENT.all("M10").Value = "COMPTABLE"






    IE.DOCUMENT.all("M11").Value = "GESTION"






    IE.DOCUMENT.all("M12").Value = "AUDIT"






   
IE.DOCUMENT.all("Dep1").Value = "75"










    IE.DOCUMENT.all("Dep2").Value = "77"










    IE.DOCUMENT.all("Dep3").Value = "78"










    IE.DOCUMENT.all("Dep4").Value = "91"










    IE.DOCUMENT.all("Dep5").Value = "92"










    IE.DOCUMENT.all("Dep6").Value = "93"










    IE.DOCUMENT.all("Dep7").Value = "94"










    IE.DOCUMENT.all("Dep8").Value = "95"










    IE.DOCUMENT.all("image").Click









 








Do While IE.readyState <> READYSTATE_INTERACTIVE










   DoEvents









<st1:place>
Loop
</st1:place>












 








Do While IE.readyState <> READYSTATE_COMPLETE










  
DoEvents




Loop




 





End Sub

Merci pour tes propositions.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
fais plutot un submit de ton formulaire.
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Effectivement,
mais j'ai une petite difficulté à mettre en pratique.
Voilà ce que j'ai fait :






1.                    


Dim



IESubmit

As

HTMLFormElement<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>









2.


            Dim htmlDoc As object






3.                     



                 



 







4.                    



5.     
6.     Do While IE.readyState <> READYSTATE_INTERACTIVE

7.                  DoEvents

8.       Loop

9.
10.     Do While IE.readyState <> READYSTATE_COMPLETE

 
 11.                 DoEvents

12.       Loop








13.     Set

IESubmit = htmlDoc.forms(0)



   

14 .
                       



IESubmit.submit










Qu'est-ce qui ne va pas ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
tu as un message d'erreur quelconque ?
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

variable non définie sur IESubmit
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Je me suis trompé.
J'ai fait un CTRL + Pause et le curseur se bloque sur la première boucle "REAYSTATE-INTERACTIVE
Messages postés
26
Date d'inscription
vendredi 8 décembre 2000
Statut
Membre
Dernière intervention
9 août 2008

Je crois avoir progressé.
En fait, quand je suis sur la page web, et après avoir renseigné le formulaire, il me suffit de faire "entrée" et la page suivante s'affiche. Je crois comprendre qu'il faudrait, dans le programme vba, simuler ce retour charriot.
Comment ?
Je cherche en mettant dans form(0) un code ASCII
Si tu as quelques lumières...
A +