j'ai crée une routine qui m'ouvre des onglets dans IE
maintenant je souhaite suite à cette ouverture, tout fermer à la fois si possible
Qui à la solution ?
Merci
Christophe
j'ai crée une routine qui m'ouvre des onglets dans IE
maintenant je souhaite suite à cette ouverture, tout fermer à la fois si possible
Qui à la solution ?
Merci
Christophe
Bonjour,
sans voir comment tu effectues l'ouverture, et notamment les objets instanciés ... c'est comme nous demander de chercher une clé en expliquant simplement que tu as verrouillé "une porte" ... sans nous montrer le trousseau
montre nous ton code
Bonjour
si tu a ouvert IE avec X onglets par vba
normalement la variable Object instancié pour le document utilise "close"
pour l'object IE(internet explorer) c'est ".quit"
si tu n'est plus dans la sub et que tes variables ont été dimée dans la sub
il te faut re récupérer les instance
pour cela tu trouvera dans les contributions ma fonction getIE qui retrouve toutes les instance de IE et tout les pages ouvertes
avec cela tu adapte une variable object et tu utilise les deux fonctions (".close",".quit")
cela dit je te conseille si tu dois instancier des object( IE,IE.document) et que tu reste pas dans la sub ou fonction dim les en public en haut de module
tu pourra les manipuler dans n'importe quelle sub ou fonction
Voila au plaisir
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
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 Sub PremierIE() 'Déclaration des variables Dim IE As New InternetExplorer Dim Start As Single, Delay As Integer If Delay = 0 Then Delay = 2 Set IE = New InternetExplorer IE.Visible = True 'Chargement d'une page web Google IE.Navigate "Page Web 1",1 IE.Navigate "Page Web 2", 1 IE.Navigate "Page Web 3", 1 IE.Navigate "Page Web 4" 'Affichage de la fenêtre IE IE.Visible = True 'Attendre que la page soit prète While IE.readyState <> READYSTATE_COMPLETE DoEvents Wend 'Timer (Wait ralenti les autres appli) Start = Timer + Delay ' pour 2 secondes While Timer < Start DoEvents Wend IE.Quit IE.Visible = False End Sub
Dernière modification par Jean-Philippe André ; 04/07/2015 à 12h59.
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
re
oulala!!!
tu quitte IE après tu veut le rendre visible !!!!!??????????
le .navigate2 tu connais ?????????
bon allez exemple
j'ai bombarder le code de commentaires
le late binding tu connais ????
bonne lecture
voila comment on ouvre plusieur ongets dans IE le dernier c'est ton post marrant non?
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 Sub test() '********************************************************************************************* Dim IE As Object ' on instancie IE comme un object et non comme l'application internet Set IE = CreateObject("InternetExplorer.Application") ' maintenant on créé l'object internetexplorer ' pourquoi comme ca? ' parce que comme ca on a pas de références a activer c'est ce qu'on appelle du late binding ( en Français déclaration tardive) '******************************************************************************************************************************* IE.Visible = True '******************************************************************************************************* 'le premier onglet on utilisera le .navigate '1er Onglet IE.Navigate ("https://www.google.fr/?gws_rd=ssl") 'on attend que la page soit chargé et que ie ai travaillé au cas ou il y a des script sur la page web le ""busy!!"" tres souvent négligé en vba pourtant important Wait IE ' j'ai volontairement séparer le code d'attente dans une autre sub pour reduire le nombre de ligne de code '******************************************************************************************************* '******************************************************************************************************* 'pour le 2 eme et plus on utilisera le .navigate2 suivi de 2048 séparer par une virgule '2eme Onglet IE.Navigate2 ("https://login.live.com/?wa=wsignin1.0&rpsnv=12&ct=1436041690&rver=6.4.6456.0&wp=MBI_SSL_SHARED&wreply=https%3a%2f%2fdub112.mail.live.com%2fm%2f%3ffl%3d635716384901866965%2c%252fm%252f&lc=1036&id=64855&mspco=1&pcexp=false"), 2048 Wait IE ' idem '******************************************************************************************************* 'idem au 2 '3 eme onglet IE.Navigate2 ("http://www.msn.com/fr-fr/actualite"), 2048 Wait IE 'IE.Visible = True '******************************************************************************************************* 'idem au 2 et 3 etc......... '4 eme onglet IE.Navigate2 ("http://www.developpez.net/forums/d1530660/logiciels/microsoft-office/excel/macros-vba-excel/fermet-onglets-ie-ouverts-code-vba/#post8309164"), 2048 Wait IE 'etc.........etc........ End Sub Sub Wait(IE) 'cette sub d'attente sert pour tout les onglet Do: DoEvents: Loop While IE.readystate <> 4 Or IE.busy End Sub
EDIT
grâce a toi je viens de découvrir quelque chose !!!!!
quand tu ouvre X onglet dans IE par vba tu ouvre X instances de l'application mais dans la même fenêtre
j'ai donc repris ma fonction getobjects que l'on trouve dans les contributions je l'ai meme renommé
elle s'appelle maintenant "GetInsTance_IE"
donc si tu veux fermer IE !!!!
il va te falloir fermer chaque instance !!!!!
voici un exemple qui te montre comment je ferme un onglet parmi les autres
j'ai utilisé une url précédemment ouvertes dans IE avec la 1 ère sub
voila
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 Sub ferme_un_onglet() Dim instance_IE As Object Set instance_IE = GetInsTance_IE("http://www.msn.com/fr-fr/actualite") 'maintenant que l'on a retrouver notre instance de IE on la ferme instance_IE.Quit End Sub Function GetInsTance_IE(url) As Object Dim objShell As Object, obj As Object Set objShell = CreateObject("Shell.Application") For Each obj In objShell.Windows If TypeName(obj.document) = "HTMLDocument" Then 'ici on va tester une des urls que l'on a utilisé dans la premiere sub au cas ou il y ai plusieurs instance de IE ouvert par vba ou non ' comme ca on est sur de fermer la bonne !!!!! If obj.LocationURL = url Then Set GetInsTance_IE= obj: Exit For End If Next obj End Function
maintenant tu sais comment ouvrir plusieurs onglets et comment fermer l'un d'entre eux
pour fermer complètement il va te falloir adapter une boucle sur toutes les urls et les passer a la moulinettes de ma fonction
j'ai tout dis![]()
mes fichiers dans les contributions:
mail avec CDO en vba et mail avec CDO en vbs dans un HTA
survol des bouton dans userform
prendre un cliché d'un range
si ton problème est résolu n'oublie pas de pointer :: ça peut servir aux autres
et n'oublie pas de voter
Salut, une manière peu élégante et brutale de tout fermer : via un kill.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Option Explicit Private Sub KillIE() Dim RetVal As Long RetVal = Shell("Taskkill /im iexplore.exe /f", 0) End Sub
Partager