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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    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
    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
    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

  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
    Billets dans le blog
    8
    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

  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
    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
    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

  7. #7
    Expert confirmé
    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
    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

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