FAQ Office 2010
FAQ Office 2010Consultez toutes les FAQ
Nombre d'auteurs : 2, nombre de questions : 114, dernière mise à jour : 15 juin 2021
- Comment remplir une zone de texte dans un contrôle WebBrowser ?
- Comment savoir si une page Web contient un formulaire donné ?
- Comment savoir si une page Web contient au moins un formulaire ?
- Comment connaître le nombre de formulaires présents dans une page Web ?
- Comment lister le nom des formulaires présents dans une page Web ?
- Comment attendre la fin de chargement d'une page dans un contrôle WebBrowser?
- Comment modifier l'adresse du contrôle WebBrowser ?
- Comment connaître l'adresse de la page actuelle d'un contrôle WebBrowser ?
- Comment connaître le titre de la page actuelle d'un contrôle WebBrowser ?
- Comment revenir à la page précédente dans un contrôle WebBrowser ?
- Comment revenir à la page suivante dans un contrôle WebBrowser ?
- Comment rafraîchir la page actuelle d'un contrôle WebBrowser ?
- Comment connaître l'état d'un contrôle WebBrowser ?
- Comment récupérer le code HTML d'un WebBrowser ?
- Comment récupérer le code HTML du Body dans un WebBrowser ?
- Comment savoir si un lien existe dans une page web ?
- Comment naviguer vers un lien ?
- Comment savoir si un lien possède une url donnée dans une page web ?
- Est-il possible d'afficher un PDF dans un formulaire ?
- Comment afficher une table dans un WebBrowser ?
- Comment empêcher la navigation vers une page inexistante ?
Pour remplir une zone de texte dans une page Web, utilisez la syntaxe .All(NomElement).Value.
Exemple de code HTML :
<html>
<head>
<title>Page d'essai</title>
</head>
<body>
<form name
=
"frmEssai"
>
<input type
=
"text"
name
=
"txtZone1"
/>
</form>
</body>
</html>
Exemple de code VBA :
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
oWeb.Document.All
(
"txtZone1"
).Value
=
"Essai"
Vous pouvez utiliser la fonction suivante :
Function
ExistFormulaire
(
strNom As
String
, oWeb As
WebBrowser) As
Boolean
On
Error
GoTo
err
Dim
o As
Object
Set
o =
oWeb.Document.Forms
(
CStr
(
strNom))
ExistFormulaire =
(
o.Name
=
strNom)
err
:
End
Function
L'appel à CStr permet de corriger un bug qui apparaît parfois et empêche l'accès à l'item concerné.
Exemple d'utilisation :
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
If
ExistFormulaire
(
"frmEsshai"
, oWeb) Then
MsgBox
"Le formulaire exishte"
Else
MsgBox
"Le formulaire n'existe pas"
End
If
Pour savoir si la page Web chargée dans un contrôle WebBrowser contient au moins un formulaire, effectuez un test sur la propriété Length de la collection Forms.
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
If
oWeb.Document.Forms.length
=
0
Then
Debug.Print
"La page ne contient pas de formulaires"
Else
Debug.Print
"La page contient au moins un formulaire"
End
If
Pour connaître le nombre de formulaires d'une page Web chargée dans un contrôle WebBrowser, utilisez la propriété Length de la collection Forms.
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
MsgBox
oWeb.Document.Forms.length
Pour lister les formulaires d'une page Web chargée dans un contrôle WebBrowser, parcourez la collection Forms à l'aide d'une boucle For Each.
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
Dim
oForm As
Object
For
Each
oForm In
oWeb.Document.Forms
Debug.Print
oForm.Name
Next
oForm
Pour attendre la fin de chargement de la page, une des possibilités consiste à tester, dans une boucle, le contenu de la propriété ReadyState du contrôle.
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
MsgBox
oWeb.Document.title
Pour modifier l'adresse du contrôle WebBrowser dans un formulaire, vous pouvez utiliser la syntaxe suivante :
Me.MonWebBrowser.Object.Navigate
"http://www.developpez.net"
Pour connaître l'adresse de la page actuelle d'un contrôle WebBrowser dans un formulaire, vous pouvez utiliser la syntaxe suivante :
Debug.Print
Me.MonWebBrowser.Object.LocationUrl
Pour connaître le titre de la page actuelle d'un contrôle WebBrowser dans un formulaire, vous pouvez utiliser la syntaxe suivante :
Debug.Print
Me.MonWebBrowser.Object.Title
Pour revenir en arrière dans un contrôle WebBrowser, utilisez la méthode GoBack comme ci-dessous :
Me.MonWebBrowser.Object.GoBack
Si aucune page précédente n'est disponible, l'erreur -2147467259 sera levée.
Pour aller en avant dans un contrôle WebBrowser, utilisez la méthode GoForward comme ci-dessous :
Me.MonWebBrowser.Object.GoForward
Si aucune page suivante n'est disponible, l'erreur -2147467259 sera levée.
Pour rafraîchir la page actuelle d'un contrôle WebBrowser, utilisez la méthode Refresh comme ci-dessous :
Me.MonWebBrowser.Object.Refresh
Interrogez la prioriété ReadyState pour connaître l'état de votre contrôle WebBrowser.
Voici les deux constantes les plus fréquemment utilisées.
- READYSTATE_COMPLETE = 4 : chargement terminé
- READYSTATE_LOADING = 1 : chargement en cours
Utilisez la méthode ci-dessous pour récupérer le code HTML de la page actuelle du WebBrowser :
Debug.Print
Me.MonWebBrowser.Object.Document.documentElement.outerHtml
Utilisez la méthode ci-dessous pour récupérer le code HTML du corps de la page actuelle du WebBrowser :
Debug.Print
Me.MonWebBrowser.Object.Document.Body.InnerHtml
Utilisez OuterHtml en remplacement de InnerHtml si vous souhaitez obtenir les attributs de la balise body.
La fonction suivante retourne True si le lien contenant le texte spécifié a été trouvé.
Exemple de code HTML :
<html>
<head>
<title>Page d'essai</title>
</head>
<body>
<form name
=
"frmEssai"
>
<input type
=
"text"
name
=
"txtZone1"
/>
</form>
<a href
=
"essai2.html"
>
Continuer</a>
</body>
</html>
Fonction de recherche :
Function
ExistLien
(
strText As
String
, oWeb As
WebBrowser) As
Boolean
Dim
oLink As
Object
For
Each
oLink In
oWeb.Document.links
If
oLink.outertext
=
strText Then
ExistLien =
True
Exit
For
End
If
Next
oLink
End
Function
Exemple d'utilisation dans un formulaire :
Private
Sub
Command1_Click
(
)
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
If
ExistLien
(
"Continuer"
, oWeb) Then
MsgBox
"Le lien a été trouvé"
End
If
End
Sub
La fonction suivante retourne l'url d'un lien contenant le texte passé en paramètre. L'utilisation de cette valeur de retour avec la méthode Navigate de l'objet WebBrowser permet de suivre ce lien.
Exemple de code HTML :
<html>
<head>
<title>Page d'essai</title>
</head>
<body>
<form name
=
"frmEssai"
>
<input type
=
"text"
name
=
"txtZone1"
/>
</form>
<a href
=
"essai2.html"
>
Continuer</a>
</body>
</html>
Fonction de recherche :
Function
GetUrl
(
strText As
String
, oWeb As
WebBrowser) As
String
On
Error
GoTo
err
Dim
oLink As
Object
For
Each
oLink In
oWeb.Document.links
If
oLink.outertext
=
strText Then
GetUrl =
oLink.href
Exit
For
End
If
Next
oLink
err
:
End
Function
Exemple d'utilisation dans un formulaire :
Private
Sub
Command1_Click
(
)
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
Dim
strUrl As
String
strUrl =
GetUrl
(
"Continuer"
, oWeb)
If
strUrl <>
""
Then
oWeb.Navigate
strUrl
Else
MsgBox
"Le lien n'a pas été trouvé"
End
If
End
Sub
La fonction suivante retourne True si l'url passée en paramètre a été trouvée dans un lien de la page.
Exemple de code HTML :
<html>
<head>
<title>Page d'essai</title>
</head>
<body>
<form name
=
"frmEssai"
>
<input type
=
"text"
name
=
"txtZone1"
/>
</form>
<a href
=
"essai2.html"
>
Continuer</a>
</body>
</html>
Fonction de recherche :
Function
ExistLien
(
strUrl As
String
, oWeb As
WebBrowser) As
Boolean
On
Error
GoTo
err
Dim
oLink As
Object
For
Each
oLink In
oWeb.Document.links
If
InStr
(
1
, oLink.href
, strUrl) >
0
Then
ExistLien =
True
Exit
For
End
If
Next
oLink
err
:
End
Function
Exemple d'utilisation dans un formulaire :
Private
Sub
Command1_Click
(
)
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\essai.html"
While
oWeb.ReadyState
<>
READYSTATE_COMPLETE
DoEvents
Wend
If
ExistLien
(
"essai2.html"
, oWeb) Then
MsgBox
"Le lien a été trouvé"
End
If
End
Sub
Oui. Pour cela, la solution la plus simple consiste à utiliser un contrôle WebBrowser. Le navigateur se charge alors d'utiliser l'application adéquate (en l'occurence un lecteur PDF) sous forme d'Add-In.
Private
Sub
Command2_Click
(
)
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Navigate
"c:\journal.pdf"
End
Sub
Un contrôle WebBrowser peut afficher n'importe quel code HTML valide défini dans sa propriété Body.InnerHtml. L'exemple suivant présente le contenu de la table Customers :
Function
Query2Html
(
strQuery As
String
) As
String
Dim
strRtn As
String
Dim
oDb As
DAO.Database
Dim
oRst As
DAO.Recordset
Dim
oFld As
DAO.Field
Set
oDb =
CurrentDb
Set
oRst =
oDb.OpenRecordset
(
strQuery)
'Ecriture de l'entête
strRtn =
"<table><tr>"
For
Each
oFld In
oRst.Fields
strRtn =
strRtn &
"<th>"
&
oFld.Name
&
"</th>"
Next
oFld
strRtn =
strRtn &
"</tr>"
'Ecriture des différentes lignes
While
Not
oRst.EOF
strRtn =
strRtn &
"<tr>"
For
Each
oFld In
oRst.Fields
strRtn =
strRtn &
"<td>"
&
oFld.Value
&
"</td>"
Next
oFld
strRtn =
strRtn &
"</tr>"
oRst.MoveNext
Wend
strRtn =
strRtn &
"</table>"
Query2Html =
strRtn
End
Function
Private
Sub
btnAfficher_Click
(
)
Dim
oWeb As
WebBrowser
Set
oWeb =
Me.MyOWeb.Object
oWeb.Document.body.innerhtml
=
Query2Html
(
"customers"
)
End
Sub
Lorsque le WebBrowser rencontre une erreur, son évènement NavigateError est déclenché. En fixant le paramètre Cance à True, la navigation est interrompue.
Private
Sub
MyOWeb_NavigateError
(
ByVal
pDisp As
Object, _
URL As
Variant
, _
TargetFrameName As
Variant
, _
StatusCode As
Variant
, _
Cancel As
Boolean
)
MsgBox
"La page n'est pas accessible, navigation annulée"
Cancel =
True
End
Sub