Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1791 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA/HTML] SET de champ qui marche en F8 mais pas en F5

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA/HTML] SET de champ qui marche en F8 mais pas en F5

n°2307116
lalan28200
╭∩╮(◣_◢)╭∩╮
Posté le 30-10-2017 à 11:59:06  profilanswer
 

Bonjour tout le monde,

 

J'ai un petit probleme (Sinon je ne serais pas la), J'essaie de remplir un champ dans un formulaire HTML a partir d'un word, jusque la rien de complique.

 

J'ai presque fini la macro VBA mais je n'arrive pas a set le champ que je veux remplir quand j'execute ma macro avec F5, mais tout marche quand je fais un F8 pour la demarrer ...

 

Je vous joint la 1er partie ou ca bloque, avec un bout du code HTML de la page.

 
Code :
  1. Dim htmlSelectElem As HTMLInputElement
  2. Set htmlSelectElem = IEDoc.all("summary4" )
  3. If Not Left(cc.Range, 7) = "Cliquez" Then
  4.     IEDoc.all("summary4" ).Value = cc.Range
 
Code :
  1. <input name ="summary" id="summary4" style="WIDTH" 49.7em" type="text"></input>
 

Si je lance avec F5 la macro s’arrête sur le IEDoc.all("summary4" ).Value = cc.Range et htmlSelectElem reste a nothing en valeur, comme si le set passait a la trap =/
Si vous avez des idées etc, je suis a l’écoute.

 

Edit: normalement je fais un  htmlSelectElem.Value = cc.Range mais je voulais test directement avec le IEDoc.all("summary4" ).


Message édité par lalan28200 le 30-10-2017 à 13:10:36

---------------
Steam : lalan2820 / Pseudo LoL : lalan
mood
Publicité
Posté le 30-10-2017 à 11:59:06  profilanswer
 

n°2307127
lalan28200
╭∩╮(◣_◢)╭∩╮
Posté le 30-10-2017 à 17:08:26  profilanswer
 

Bon j'ai fais 1-2 test ..

Code :
  1. Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Option Compare Text:
  3. Sub WaitIE(IE As InternetExplorer)
  4.    'On boucle tant que la page n'est pas totalement chargée
  5.    Do Until IE.ReadyState = READYSTATE_COMPLETE
  6.       DoEvents
  7.    Loop
  8. End Sub
  9. Sub clickbutton(bouton As HTMLInputElement)
  10.     bouton.Click
  11. End Sub
  12. Sub test()
  13. Dim cc As ContentControl
  14. Dim IE As New InternetExplorerMedium
  15. Dim IEDoc As HTMLDocument
  16. Dim htmlSelectElem As HTMLGenericElement
  17. Dim htmlstring As String
  18. Dim InputGoogleBouton As HTMLInputElement
  19. Dim htmlTagCol As IHTMLElementCollection
  20. Dim htmlTagname As IHTMLElementCollection
  21. Dim NbrEntree As Integer
  22. Dim elem As Object
  23. Dim nom As String
  24. Dim chemin As String
  25. chemin = "D:\H590653\Desktop\TMP\"
  26. IE.Visible = True
  27. IE.Navigate "http://jtrac:8080/jtrac/app/"
  28. WaitIE IE
  29. Set IEDoc = IE.Document
  30. Set htmlTagCol = IEDoc.getElementsByTagName("a" )
  31.     For Each titre In htmlTagCol
  32.         If titre.sourceIndex = "53" Then
  33.             Set InputGoogleBouton = titre
  34.                 clickbutton InputGoogleBouton
  35.                 WaitIE IE
  36.             Exit For
  37.         End If
  38.     Next
  39. Set htmlSelectElem = IEDoc.all("summary" )
  40.     If htmlSelectElem Is Nothing Then Set htmlSelectElem = IEDoc.all("summary4" )
  41.     If htmlSelectElem Is Nothing Then Set htmlSelectElem = IEDoc.all(64)
  42.     If htmlSelectElem Is Nothing Then Set htmlSelectElem = IEDoc.getElementsByName("summary" )(0)
  43.                
  44.     If htmlSelectElem Is Nothing Then
  45.         MsgBox "error"
  46.         IE.Quit
  47.         Set IE = Nothing
  48.         Exit Sub
  49.     Else
  50.         htmlSelectElem.Value = "Test"
  51.     End If
  52.        
  53. IE.Quit
  54. Set IE = Nothing
  55. End Sub


Programme de test.

 

Si je fais un stop sur "Set htmlSelectElem = IEDoc.all("summary" )" et que je relance directement c'est ok, sinon ca plante sur "htmlSelectElem.Value = "Test""


Message édité par lalan28200 le 30-10-2017 à 17:08:54

---------------
Steam : lalan2820 / Pseudo LoL : lalan
n°2307128
lalan28200
╭∩╮(◣_◢)╭∩╮
Posté le 30-10-2017 à 17:17:34  profilanswer
 

Bon si je met un

Code :
  1. Sleep 100

avant le set c'est ok ... je comprend pas pourquoi, si quelqu'un a une explication je suis preneur.


---------------
Steam : lalan2820 / Pseudo LoL : lalan
n°2307156
Marc L
Posté le 31-10-2017 à 11:42:59  profilanswer
 

 
             Bonjour,
 
             c'est juste un problème d'observation du fonctionnement de la page Web, un souci de synchronisation !
             Il faut attendre la disponibilité de l'élément avant de l'appeler !        Via  IsObject  par exemple …
 

n°2307160
lalan28200
╭∩╮(◣_◢)╭∩╮
Posté le 31-10-2017 à 13:57:39  profilanswer
 

Merci beaucoup Marc L, je vais regarder ça.


---------------
Steam : lalan2820 / Pseudo LoL : lalan
n°2307165
Marc L
Posté le 31-10-2017 à 15:40:30  profilanswer
 

 
            Parfois il n'y a pas d'autre choix d'utiliser une temporisation …
            Ne pas oublier aussi la propriété  Busy  d'IE lors de la boucle d'attente du chargement initial de la page.
 
            Voici un exemple sur ce forum combinant tout ceci.
 
            Au passage dans ton code  Is Nothing  sur une variable objet est équivalent à  IsObject  …


Message édité par Marc L le 31-10-2017 à 15:44:19

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA/HTML] SET de champ qui marche en F8 mais pas en F5

 

Sujets relatifs
[VBA] Lecture fichier texte[VBA] formatage string
Pied de page HTML[VB /VBA /VBS] Remplir un formulaire HTML a partir d'un word
Besoin d'aide en VBA Excel Concatener + déplacement de donnéeVBA : adapter un userform à plusieurs feuilles
VBA copier une valeur d'un tableau acces vers un autre sous conditionVBA word supprimer lignes en doubles
Problème de chargement CSS dans HTML 
Plus de sujets relatifs à : [VBA/HTML] SET de champ qui marche en F8 mais pas en F5


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR