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 :

Navigation Internet privée [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur étude
    Inscrit en
    Novembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur étude

    Informations forums :
    Inscription : Novembre 2016
    Messages : 50
    Par défaut Navigation Internet privée
    Bonjour et bonne année,

    l'un d'entre vous saurait-il, svp, comment on peut ouvrir (et piloter) Internet Explorer en mode Inprivate?
    Ouvrir IE en mode normal n'est pas difficile, mais en mode navigation privée... je sèche.

    Je vous remercie par avance.

    Yohann

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    de la même manière que manuellement, non ?!

    Soit par le commutateur dédié au lancement de l'exécutable (voir documentation),
    soit par la combinaison de touches après l'ouverture normale (indiquée dans un menu d'IE) …

    _________________________________________________________________________________________________________
    Je suis Paris, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur étude
    Inscrit en
    Novembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur étude

    Informations forums :
    Inscription : Novembre 2016
    Messages : 50
    Par défaut
    Merci de ta réponse.
    Ma question était tout sauf précise...

    Je voulais dire, lancer IE en mode inprivate à partir d'une macro Excel.

    Petite avancée: j'ai trouvé comment ouvrir une fenêtre de navigation privée, mais je n'arrive pas ensuite à la piloter.

    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
    Public Sub Tests()
     
    Dim Fichier As String
     
    Dim IE As Object
    Set IE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
    With IE
        .navigate "about:inprivate"
        .Visible = True
        .resizable = True
    End With
     
    Do Until IE.ReadyState = 4
        DoEvents
    Loop
     
    IE.navigate = "www.google.fr" 'c'est là que ça bugge
     
    End Sub
    Nom : Sans titre.png
Affichages : 1249
Taille : 14,5 Ko

    Quelqu'un aurait-il une idée, svp?

    Merci par avance.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur étude
    Inscrit en
    Novembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur étude

    Informations forums :
    Inscription : Novembre 2016
    Messages : 50
    Par défaut
    Finalement, la fenêtre ouverte n'est pas vraiment InPrivate...

    La fenêtre qu'on obtient lors de l'ouverture par macro n'est pas complètement la même que celle qu'on ouvre manuellement (il manque le logo InPrivate bleu près du nom de l'onglet).

    fenêtre ouverte par macro
    Nom : Sans titre.png
Affichages : 1267
Taille : 66,6 Ko

    fenêtre ouverte manuellement
    Nom : Sans titre 2.png
Affichages : 1191
Taille : 58,7 Ko

    J'ai trouvé un bout de code sur Internet qui permet de récupérer la fenêtre privée ouverte par macro et de la rediriger... mais apparemment, on sort du mode InPrivate car l'historique se trouve alimenté.

    Voilà le code:
    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
    Public Sub Tests()
     
    Dim Fichier As String
     
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .navigate "about:InPrivate"
        .Visible = True
        .resizable = True
    End With
     
    Do Until IE.ReadyState = 4
        DoEvents
    Loop
     
    Set oShellApp = CreateObject("shell.Application")
    Set oShellAppWindows = oShellApp.Windows
    With oShellApp
        For Each oWin In oShellAppWindows
            If LCase(TypeName(oWin.document)) = "htmldocument" Then
                If oWin.LocationURL Like "about:InPrivate" Then
                    With oWin
                        .navigate "google.fr" 'par exemple
                    End With
                End If
            End If
        Next
    End With
     
    End Sub
    Je ne vois pas comment m'en sortir...
    Images attachées Images attachées  

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par yoyof Voir le message
    Je ne vois pas comment m'en sortir...
    Et pourtant dès le post #2 :

    Citation Envoyé par Marc-L Voir le message
    par le commutateur dédié au lancement de l'exécutable (voir documentation)
    Déjà lancer l'application de cette manière, la seule valable et n'apparaissant pas ni dans le code du post #3
    ni dans celui du post #4 totalement idiot, dans le sens où dans une première partie le pilotage est lancé classiquement
    puis dans la seconde est cherchée cette application pourtant déjà pilotée dans la première !
    Si vraiment tu as trouvé le code ainsi, oublie l'auteur de cette cagade, c'est du très mauvais copier / coller ‼

    C'est dommage car en lançant l'application avec le commutateur adéquat
    (as-tu au moins effectué la recherche à la portée de tout débutant ?!)
    puis en utilisant la détection de l'application via la deuxième partie du post #5 cela fonctionne bien !

    J'attends donc ta prochaine ébauche de code, à minima le résultat de ta recherche …

    _________________________________________________________________________________________________________
    Copier / Coller n'est pas coder !

  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 une solution parmis d'autre
    Bonjour
    salut marc voila un truc qui n'a pas été traiter sauf défaut de mémoire de ma part

    code
    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
    40
    41
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Sub test()
    IeNavigateprivée "https://www.google.fr/"
    End Sub
     
    Public Function IeNavigateprivée(URL)
    ' necessite d'activer la reference "microsoft shell  controls et automation" sinon tu fait une recherche pour le faire en late binding
        Dim objShell As Shell, IE As Object
     Set IE = CreateObject("internetexplorer.application")
        With IE: .navigate "about:Blank": .Visible = True: .resizable = True: End With
        Do Until IE.ReadyState = 4 Or IE.busy: DoEvents: Loop
     
        Application.Wait (Now + TimeValue("0:00:01")) ' pour les PCS un peu mous du bulbe
        'principe:
        ' action sur la touche  ,  code ascii de la touche  ,   0=la fenetre active  ,   le sens: 0=appuyé ou  &h2=lacher  ,   0 tout le temps)
        ' l'avantage de cette methode par raport a sendkeys c'est que l'on est sur de taper sur la bonne fenetre avec le 2d argument(0=fenetre active)
        keybd_event 17, 0, 0, 0    ' le keycode 17 correspont a la touche ctrl
        keybd_event 16, 0, 0, 0    ' le code 16 correspond a  la touche maj
        keybd_event "80", 0, 0, 0    ' le code 80 correspond la touche "p"
     
        'on relache les touche avec argument "&H2" & 2 eme argument important!!!!!!! de toujours relacher les touche avec l'apis
        keybd_event 17, 0, &H2, 0
        keybd_event 16, 0, &H2, 0
        keybd_event "80", 0, &H2, 0
     
        Application.Wait (Now + TimeValue("0:00:01")) ' pour les PCS un peu mous du bulbe
     
        ' alors voila on a taper les touche ctrl+maj+"p" une autre fenetre IE s'est ouverte inprivate
        'il nous faut donc la retrouver donc pointer cette nouvelle instance de IE de facon a lui donner la bonne url
     
     
        Set objShell = New Shell
        For Each obj In objShell.Windows
            If TypeName(obj.document) = "HTMLDocument" Then
                Set objIE = obj
                'des que l'on a trouvé la fentre avec about:InPrivate" c'est la bonne alors on change la location
                If objIE.LocationURL = "about:InPrivate" Then objIE.document.Location = URL   'c'est là que ça bugge plus!!!!!
            End If
        Next
    IE.Quit 'on peut fermer la premiere fenetre IE que l'on a lancer en premier
    End Function
    voila

    edit:
    on pourrais meme envisager de manipuler la foction comme object "IE" afin de manipuler par la suite le document dans la 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Sub test()
    Set IE = IeNavigateprivée("https://www.google.fr/")
    Do Until IE.ReadyState = 4 Or IE.busy: DoEvents: Loop
     'code pour traiter ou manipuler le document   
    '...
    '...
    End Sub
     
    Public Function IeNavigateprivée(URL) As Object
    ' necessite d'activer la reference "microsoft shell  controls et automation" sinon tu fait une recherche pour le faire en late binding
        Dim objShell As Shell, IE As Object
     Set IE = CreateObject("internetexplorer.application")
        With IE: .navigate "about:Blank": .Visible = True: .resizable = True: End With
        Do Until IE.ReadyState = 4 Or IE.busy: DoEvents: Loop
     
        Application.Wait (Now + TimeValue("0:00:01")) ' pour les PCS un peu mous du bulbe
        'principe:
        ' action sur la touche  ,  code ascii de la touche  ,   0=la fenetre active  ,   le sens: 0=appuyé ou  &h2=lacher  ,   0 tout le temps)
        ' l'avantage de cette methode par raport a sendkeys c'est que l'on est sur de taper sur la bonne fenetre avec le 2d argument(0=fenetre active)
        keybd_event 17, 0, 0, 0    ' le keycode 17 correspont a la touche ctrl
        keybd_event 16, 0, 0, 0    ' le code 16 correspond a  la touche maj
        keybd_event "80", 0, 0, 0    ' le code 80 correspond la touche "p"
     
        'on relache les touche avec argument "&H2" & 2 eme argument important!!!!!!! de toujours relacher les touche avec l'apis
        keybd_event 17, 0, &H2, 0
        keybd_event 16, 0, &H2, 0
        keybd_event "80", 0, &H2, 0
     
        Application.Wait (Now + TimeValue("0:00:01")) ' pour les PCS un peu mous du bulbe
     
        ' alors voila on a taper les touche ctrl+maj+"p" une autre fenetre IE s'est ouverte inprivate
        'il nous faut donc la retrouver donc pointer cette nouvelle instance de IE de facon a lui donner la bonne url
     
     
        Set objShell = New Shell
        For Each obj In objShell.Windows
            If TypeName(obj.document) = "HTMLDocument" Then
                Set objIE = obj
                'des que l'on a trouvé la fentre avec about:InPrivate" c'est la bonne alors on change la location
                If objIE.LocationURL = "about:InPrivate" Then objIE.document.Location = URL   'c'est là que ça bugge plus!!!
            End If
        Next
    IE.Quit 'on peut fermer la premiere fenetre IE que l'on a lancer en premier
    Set IeNavigateprivée = objIE
    End Function
    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
    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 suis-je bete solution N°2
    on peut très bien lancer l'application ieexplorer.exe avec wscript.shell
    et récupérer l'instance comme dans la précédente version

    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
    Sub test()
        Set IE = IeNavigateprivée2("https://www.google.fr/")
        Do Until IE.ReadyState = 4 Or IE.busy: DoEvents: Loop
    'ici reste du code pour manipuler le document
    'with IE.document:........:end with
    ' a la fin comme si c'etait une instance lancer avec la librairie
    'IE.quit
    End Sub
     
    '!!!!!! necessite d'activer la reference "microsoft shell  controls et automation" sinon tu fait une recherche pour le faire en late binding
    Function IeNavigateprivée2(URL)
        Dim objShell As Shell
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.Run ("iexplore -private")
        Set objShell = New Shell
        Application.Wait (Now + TimeValue("0:00:02"))
        Do
            For Each obj In objShell.Windows
                If TypeName(obj.document) = "HTMLDocument" Then
                    Debug.Print TypeName(obj.document)
                    Set objIE = obj
                    'des que l'on a trouvé la fentre avec about:InPrivate" c'est la bonne alors on change la location
                    If objIE.LocationURL = "about:InPrivate" Then objIE.document.Location = URL   'c'est là que ça bugge plus!!!
                End If
            Next
        Loop While objIE Is Nothing
        Set IeNavigateprivée2 = objIE
    End Function
    edit pour finir c'est la dernière afin de ne pas avoir a activer la référence
    remplacer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objShell = New Shell
    par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objShell = CreateObject("Shell.Application")
    bien sur redimer les variable en object et plus le nom object de la librairie


    ensuite encore une fois si le PC est un peu mou du bulbe ou le debit est lent (cela arrive ) :ajouter avant le traitement du document un do/loop sur le bon locationURL afin de bien recupérer le document correspondant a l'url et no le document de la page "about:InPrivate"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
        URL = "https://www.google.fr/"
        Set IE = IeNavigateprivée2(URL)
        Do Until IE.ReadyState = 4 Or IE.busy: DoEvents: Loop
        Do: DoEvents: Loop Until IE.Locationurl = URL
        'ici reste du code pour manipuler le document
        'with IE.document:........:end with
        ' a la fin comme si c'etait une instance lancer avec la librairie
        'ie.quit
        MsgBox IE.document.body.innerText
    End Sub
    et la fonction en late binding
    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
     
    Function IeNavigateprivée2(URL)
        Dim objShell As Object, WshShell As Object
        Set objShell = CreateObject("Shell.Application")
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.Run ("iexplore -private")
        Application.Wait (Now + TimeValue("0:00:02"))
        Do
            For Each obj In objShell.Windows
                If TypeName(obj.document) = "HTMLDocument" Then
                    Debug.Print TypeName(obj.document)
                    Set objIE = obj
                    'des que l'on a trouvé la fentre avec about:InPrivate" c'est la bonne alors on change la location
                    If objIE.Locationurl = "about:InPrivate" Then objIE.document.Location = URL   'c'est là que ça bugge plus!!!
                End If
            Next
        Loop While objIE Is Nothing
        Set IeNavigateprivée2 = objIE
    End Function
    voila cette fois ci c'est fini
    Nom : Capture.JPG
Affichages : 1247
Taille : 252,6 Ko
    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

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Le post #6 je passe et je l'oublie !

    De mon côté il faut moins de vingt lignes de code pour piloter IE en mode privé
    et effectivement cela ressemble au post #7 mais avec le Shell du VBA et une auto-détection sans pause,
    juste avec deux doigts de logique …

  9. #9
    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 oui je supose que les pauses peuvent se gérer tout naturellement dans le do/loop dela variable "objie"
    j'ai fait ca vite fait pour montrer le principe
    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

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Oui, vraiment vite fait car t'as compliqué la chose, un seul If étant nécessaire …

  11. #11
    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
    oui en testant le locationName mais cette partie est issue de ma fonction cherche fenêtre qui fonctionne avec les fenêtre Windows aussi c'est pour cela que je teste si le type(html) puis le locationurl dans ce cadre la on peu le supprimer effectivement mais perso je préfère garder mes codes intègres je les réutilises a foison

    je n'ai pas vu ta version je suis intéressé pour la gestion sans pause
    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

  12. #12
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    En attendant des nouvelles du demandeur, c'est simple :
    si le Shell VBA est bon entrer dans une boucle Do Loop sans condition
    dans laquelle chaque objet Window est scanné et une fois le bon trouvé,
    après le traitement et sa fermeture si nécessaire, sortir de la boucle Do Loop


  13. #13
    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
    Bon j'ai pas très bien compris mais je me suis débrouillé
    j'embêtait a chercher la syntaxe pour le shell nom programme avec l'argument private + l'url en fait il n'y a pas de guillemet c'est tout simple
    parti de la c'est simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub test3()
        Set objShell = CreateObject("Shell.Application")
        URL = "https://www.google.fr/"
        Shell "C:\Program Files (x86)\Internet Explorer\iexplore.exe  -private " & URL, vbNormalFocus
        Do
            For Each obj In objShell.Windows
                Set IE = obj: If IE.Locationurl = URL Then  Exit For
            Next
        Loop Until IE.Locationurl = URL
            Do: DoEvents: Loop Until IE.readyState = 4
        MsgBox IE.document.body.innerText
    End Sub
    puré j'ai cherché partout impossible de trouver un exemple similaire

    je chercherais maintenant la syntaxe shell %programme files%........histoire de quand même choisir automatiquement celui qui sera plus adapté a la version d'Excel (32/34)

    je ne la retrouve plus cette syntaxe

    tu a cela sous la main ???
    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

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Je ne comprends pas ce que tu évoques …
    Et tu peux tester le résultat du Shell avant de boucler …

    J'extrais directement la commande d'IE depuis la base de registres.
    Je préfère d'abord trouver la version privée d'IE avant de naviguer …

  15. #15
    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
    Je ne comprends pas ce que tu évoques …
    ??????????

    Et tu peux tester le résultat du Shell avant de boucler …
    tu veux dire quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ret=shell("programme.......")
    if ret=true


    J'extrais directement la commande d'IE depuis la base de registres.
    la je ne comprends pas
    tu veux dire comme on le fait pour trouver le chemin de l'exe dans la cle path dans hklm
    si c'est ca !!non car il te donne la 64byte et pour excel2007 32 ca le fait pas après si on veux manipuler le document avec les librairie car elles, elles sont en 32/64 byte selon la version d'office


    Je préfère d'abord trouver la version privée d'IE avant de naviguer

    donc tu pense que l'URL dans la commande c'est pas bon ????
    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

  16. #16
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Si l'URL dans la commande c'est correct mais pas avec la méthode de bourrin du post #5 via une boucle For Each
    Du reste mes explications des posts #5 & 12 suivent cette méthode de bourrin trouvée par le demandeur
    mais inutile car pas besoin d'une boucle For Each dans le cas d'une ouverture au sein de la même procédure !

    For Each
    c'est utile quand tu cherches quelque chose déjà ouvert avant l'exécution de la procédure
    mais inutile au sein même de cette procédure car forcément tu sais où cela se trouve !
    Exemple : quand tu ouvres un nouveau classeur, où se trouve-t-il donc au sein de la collection des classeurs ?
    Ici c'est le même cas de figure, juste avec un peu de jugeote, en réchauffant à peine une paire de neurones !

    En utilisant For Each, imagine qu'IE est déjà ouvert en mode normal avec la même URL,
    ton code du post #13 s'arrêtera sur l'ancien en mode normal au lieu du nouveau en mode privé ‼
    D'où ma remarque du post #14 : « Je préfère d'abord trouver la version privée d'IE avant de naviguer » …

    En ouvrant directement IE en mode privé sur la page désirée, pas besoin d'une boucle For Each car
    il suffit juste de pointer directement sur le nouvel élément ! Et là c'est avec moins de lignes de code …

    Bon maintenant sans nouvelle du demandeur je suppose comme t'as débarqué comme un cheveu sur la soupe
    - en fait plutôt comme un crouton de pain tombant dans le bol de soupe en éclaboussant bien autour ! -
    il se contente de ton intervention …     En ayant au moins effectué un tri !

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur étude
    Inscrit en
    Novembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur étude

    Informations forums :
    Inscription : Novembre 2016
    Messages : 50
    Par défaut
    Bonjour à tous et merci de vos divers échanges.

    Moi aussi de mon côté j'avais tenté une version utilisant des Sendkeys pour simuler ctrl+maj+p mais c'est clair que ce n'est pas idéal.
    Du coup, j'ai creusé un peu et je suis parti sur la solution ci-dessous, assez proche du post 7, avec effectivement un balayage de toutes les fenêtres (je suis pas assez calé pour faire autrement pour le moment).

    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
    Sub macro()
     
    Dim IE As Object
    Dim manavig
    manavig = Shell("C:\Program Files\Internet Explorer\iexplore.exe -private")
     
    Application.Wait (Now + TimeValue("0:00:03"))
     
    Dim oShellApp, oShellAppWindows, oWin
    Set oShellApp = CreateObject("shell.Application")
    Set oShellAppWindows = oShellApp.Windows
     
    For Each oWin In oShellAppWindows
        If LCase(TypeName(oWin.document)) = "htmldocument" Then
            If oWin.LocationURL Like "about:InPrivate" Then
                With oWin
                    .navigate "http://google.fr" 'par exemple
                End With
                Set IE = oWin
                GoTo jump
            End If
        End If
    Next
     
    jump:
    'etc.
    End Sub
    Bon, en fait, c'est pas si compliqué quand on réfléchit un peu:

    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
    Sub macro()
     
    Dim IE As Object
    Dim manavig
    manavig = Shell("C:\Program Files\Internet Explorer\iexplore.exe -private")
     
    Application.Wait (Now + TimeValue("0:00:03"))
     
    Dim oShellApp, oShellAppWindows
    Set oShellApp = CreateObject("shell.Application")
    Set oShellAppWindows = oShellApp.Windows
    Set IE = oShellAppWindows.Item(oShellAppWindows.Count - 1)
    IE.navigate "http://google.fr"
     
    End Sub
    Merci à vous deux.

    Yohann

  18. #18
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Une pause de 3s semblant suffisante pour la plupart des machines …
    Sauf que sur une machine lente si une autre application ralentit le système (classique comme l'anti-virus)
    cette pause pourrait s'avérer insuffisante …     Et comme une pause est inutile en suivant le post #12 !

    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
    Private Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds&)
     
    Sub DemoIEinPrivateBourrin()
              Dim IE$, oWin As Object, oWSh As Object
              IE = CreateObject("WScript.Shell").RegRead("HKCR\Applications\iexplore.exe\shell\open\command\")
        If Shell(Replace(IE, "%1", "-private"), vbNormalFocus) Then
                           Set oWSh = CreateObject("Shell.Application").Windows
            Do
              For Each oWin In oWSh
                    If oWin.LocationURL = "about:InPrivate" Then
                       oWin.navigate "https://www.google.fr/"
                       While oWin.Busy Or oWin.ReadyState < 4:  Wend
                       Sleep 1999
                       oWin.Quit
                       Exit Do
                    End If
              Next
            Loop
                   Set oWin = Nothing:  Set oWSh = Nothing
        End If
    End Sub
    La méthode Sleep de Windows sert juste à temporiser l'affichage avant la fermeture d'IE en mode privé …


    Maintenant la méthode en utilisant juste deux neurones,
    un pour l'observation et un pour le bon sens :
    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
    Private Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds&)
     
    Sub DemoIEinPrivate()
            IE$ = CreateObject("WScript.Shell").RegRead("HKCR\Applications\iexplore.exe\shell\open\command\")
        With CreateObject("Shell.Application").Windows
                      C& = .Count
            If Shell(Replace(IE, "%1", "-private https://www.google.fr/"), vbNormalFocus) Then
                      While .Count = C:  Wend
                With .Item(CLng(C))
                      While .Busy Or .ReadyState < 4:  Wend
                      Sleep 1999
                     .Quit
                End With
            End If
        End With
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …



    Edit : yoyof ton code du post #17 (posté pendant la rédaction du mien) sera top sans la pause …
              Et libérer les variables objet avant la fin de la procédure !

  19. #19
    Membre averti
    Homme Profil pro
    Ingénieur étude
    Inscrit en
    Novembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur étude

    Informations forums :
    Inscription : Novembre 2016
    Messages : 50
    Par défaut
    Nos posts se sont croisés.

    Effectivement, j'ai testé la solution 2 du post 18 et ça fonctionne.

    Merci beaucoup.

    Yohann

  20. #20
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    J'ai édité le post #18 à ton attention …

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. enregister navigation internet
    Par llusca dans le forum Internet
    Réponses: 2
    Dernier message: 21/09/2009, 16h35
  2. Navigation internet programmer.
    Par F.Saad dans le forum C#
    Réponses: 5
    Dernier message: 20/09/2009, 01h02
  3. logiciel de rapport de navigation internet
    Par remyv87 dans le forum Sécurité
    Réponses: 19
    Dernier message: 16/05/2007, 12h22
  4. Automates de navigation Internet
    Par Scritch852 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 30/03/2007, 14h09

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