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 :

Fermet tous les onglets IE ouverts depuis mon code VBA


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Fermet tous les onglets IE ouverts depuis mon code VBA
    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

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 130
    Points : 9 962
    Points
    9 962
    Billets dans le blog
    5
    Par défaut
    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

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    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

  4. #4
    Invité
    Invité(e)
    Par défaut Houps dsl ci-joint mon bout de code...qui peut me faire la suite ou une correction....
    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.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    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
    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
    voila comment on ouvre plusieur ongets dans IE le dernier c'est ton post marrant non?
    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
    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
    voila
    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

  7. #7
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    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

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Bonjour kiki29

    oui mais ne fait pas la distinction entre les instances de l'application ouvertes par vba et les autres

    cela dit en cas de plantage ca peut être une alternative afin de débloqué la situation

    ca me donne un e idée

    si je l'intégrais a ma fonction dans une gestion d'erreur non?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Salut

    Bon j'ai presque tout compris...sauf !

    Que la fonction getinstance_ie plante

    en fait dans : If TypeName(obj.document) = "HTMLDocument" Then......je dois mettre le nom de mon site ?

    car quoi que je mette ça plante

    erreur d'exécution
    la méthode"Document' de l'objet 'IWebBrower2' a échoué
    et ça me ramene sur cette ligne

    as tu la solution ?

    merci

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

    Citation Envoyé par kiki29 Voir le message
    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
    Super efficace mais ca ferme tout...vraiment tout....dommage, je voulais fermer qu'une seule cession....

    merci

    Christophe
    Dernière modification par AlainTech ; 26/07/2015 à 12h24. Motif: Fusion de 3 messages

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    non les seules chose que tu dois adapter c'est les urls
    teste mes codes dans fichier vierge et dis ou ca plante la condition if tu la laisse comme elle est

    peut que tu l'a téléchargé avant que je fasse la petite correction
    reprend tout dans un fic... vierge et teste

  11. #11
    Invité
    Invité(e)
    Par défaut re...
    je sais pq cela ne marche pas, en fait j'ai plusieurs fenetres IE ouvertes et donc la fonction ne trouve pas la bonne et donc erreur....

    Alors as tu une solution....je suis compliqué...lol
    Dernière modification par AlainTech ; 26/07/2015 à 12h25. Motif: Suppression de la citation inutile

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re

    tu dis n'importe quoi!!! la fonction parcours toutes les fenêtres IE même celle qui n'ont pas été ouvertes par vba

    si ca le fait pas c'est que tu a un autre soucis

    regarde cette capture d'écran a droite tu a l'éditeur vbe avec la macro qui utilise le même code que la fonction
    a gauche tu a une fenêtre IE avec 3 urls ouvertes et une autre fenêtre avec Outlook

    j'ai lancer la sub et regarde en bas dans la fenêtre d'exécution il y a bien les 4 urls donc le code a bien trouver toutes les fenêtres IE et toutes les pages web ont été trouvées
    Nom : Capture.JPG
Affichages : 1762
Taille : 251,3 Ko

  13. #13
    Invité
    Invité(e)
    Par défaut re
    Bonjour Patrick

    maintenant cela plante à la ligne instance_EI.Quit.

    erreur d'exécution 91
    variable objet ou variable de bloc With non définie
    effectivement j'ai mis la fenetre d"exécution et tout y est...
    Dernière modification par AlainTech ; 26/07/2015 à 12h26.

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    je vais analyser le soucis chez moi aussi quand j'en ferme 1 ca va mais si je ferme toutes les onglet d'une même fenêtre ca plante c'est pas normal
    laisse moi du temps OK

  15. #15
    Invité
    Invité(e)
    Par défaut
    Pas de souci Patrick, c'est sympa de t"en occuper...

    Christophe

  16. #16
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Attention pour les suppressions, il faut souvent commencer par le bas de la collection
    Et donc les boucles For each ne sont pas utilisables, il faut faire une boucle for x = Y to 0 Step -1
    Je pense que le souci vient de la.

    Sinon autre solution, tu crées une collection d'instance IE, comme ça arrivé à la fin de ton code, tu fermes les instances contenues dans la collection en question.

    D'ailleurs comment fais tu par la suite pour manipuler les différentes fenêtres ? Comment les pointes tu sans avoir une variable qui leur fait référence ?
    ++
    Qwaz

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Bonjour qwazerty
    j'ai esayé la boucle a l'envers et ca fonctionne pas
    c'est assez bizarre quand on navigate 2 ca ouvre une instance a chaque fois mais dans la même fenêtre
    et quand je veut fermer tout c'a en ferme un et les instances ont disparues et donc le bug se crée sur le 2 eme tour de boucle
    c'est assez bizarre comme comportement
    je vais chercher si il n'y a pas moyen de fermer le document et non pas l'instance dans le quel il est

  18. #18
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Visiblement pas de solution "simple", du moins en gardant ta façon de faire.

    Surement une solution ici, tu as de la lecture en perspective

    http://www.ozgrid.com/forum/showthread.php?t=179317


    Sinon un truc du genre et comme ça tu sais ce qu'il y a à fermer à la fin..

    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
    Sub PremierIE()
    'Déclaration des variables
    'Dim IEs As New InternetExplorer
    Dim IE(2) As InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim Start As Single, Delay As Integer
     
     
    If Delay = 0 Then Delay = 2
        Set IE(0) = New InternetExplorer
        Set IE(1) = New InternetExplorer
        Set IE(2) = New InternetExplorer
     
     
       'Affichage de la fenêtre IE
        IE(0).Visible = True
        IE(1).Visible = True
       'IEs.Visible = True
     
       'Chargement d'une page web Google
        IE(0).Navigate "www.google.fr" ', 1
        IE(1).Navigate "www.developpez.net" ', 1

    ++
    Qwaz

Discussions similaires

  1. Réponses: 13
    Dernier message: 17/07/2021, 16h16
  2. Impression de tous les onglets ouverts
    Par Ju1.0 dans le forum Firefox
    Réponses: 0
    Dernier message: 10/06/2011, 16h19
  3. Fermeture d'une fenêtre avec tous les onglets ouverts
    Par Invité dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/11/2008, 08h44
  4. [JTabbedPane] Rafraichir tous les onglets
    Par Peezy dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 28/11/2006, 17h11
  5. [VBA Excel] supprimer tous les onglets sauf un
    Par drinkmilk dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/11/2005, 18h11

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