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

Excel Discussion :

Fenêtre d'avertissement lors de l'ouverture de IE via VBA [XL-2010]


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Fenêtre d'avertissement lors de l'ouverture de IE via VBA
    Bonjour à tous,

    J'utilise un fichier excel faisant appel à un site internet pour faire de la traduction.
    Le code fonctionne cependant une fenêtre d'avertissement dont je me passerais bien s'affiche soit en premier plan, soi en arrière plan avec le message suivant :
    "Voulez vous visualiser uniquement le contenu de la page web dont le contenu est sécurisé?". Cette fenêtre s'affiche a chaque fois que je veux accéder à internet, pourriez vous m'indiquer comment contourner le problème ?
    Je veux le faire via VBA svp, le fichier excel sera partagé avec d'autre personnes qui l'utiliserons aussi.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Function transalte_using_vba(ByRef str As String, ByRef inputstring As String, ByRef outputstring As String) As String
        ' Tools Refrence Select Microsoft internet Control
        Dim IE As Object, i As Long
        'Dim inputstring As String, outputstring As String,
        Dim text_to_convert As String, result_data As String, CLEAN_DATA
        Set IE = CreateObject("InternetExplorer.application")
     
       text_to_convert = str
        'open website
        IE.Visible = False
        'https://translate.google.com/?hl=fr#en/fr/lopa
        IE.navigate "https://translate.google.com/?hl=" & outputstring & "#" & inputstring & "/" & outputstring & "/" & text_to_convert
        If WaitIE(IE, 6) Then                         'Petit bout de code que j'ai trouvé sur un forum pour automatiser la réponse a la fenêtre, voir fct plus bas
           SendKeys ("{TAB}") 'tab
     
            SendKeys ("{ENTER}") 'enter
    End If
        Do Until IE.readyState = 4
            DoEvents
        Loop
        Application.Wait (Now + TimeValue("0:00:3"))
     
      '  Do Until IE.ReadyState = 4
     '       DoEvents
    ' Loop
        CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<")
        For j = LBound(CLEAN_DATA) To UBound(CLEAN_DATA)
            result_data = result_data & Right(CLEAN_DATA(j), Len(CLEAN_DATA(j)) - InStr(CLEAN_DATA(j), ">"))
        Next
        IE.Quit
        transalte_using_vba = result_data
     
        End Function
     
    Public Function WaitIE(oIE As InternetExplorer, Optional pTimeOut As Long = 0) As Boolean
         Dim lTimer As Double
         lTimer = Timer
      Do
        DoEvents
       If oIE.readyState = READYSTATE_COMPLETE And Not oIE.Busy Then Exit Do
       If pTimeOut > 0 And Timer - lTimer > pTimeOut Then
           WaitIE = True
           Exit Do
       End If
    Loop
    End Function

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Ce n'est pas un problème VBA Excel mais un problème lié à ton navigateur et doit être géré comme tel.
    C'est-à-dire que, en fonction de ton navigateur, il faut trouver quel objet ou quelle propriété déclenche cette fenêtre pour changer sa valeur.
    Tu peux essayer de fouiller dans l'éditeur d'objets pour essayer de trouver celui qui correspond à celui que tu cherche dans ceux de IE.
    N'ayant jamais piloté un navigateur via VBA, je ne peux pas t'en dire plus.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse Menhir !
    Finalement j'ai trouver une autre solution ... un peu barbare mais ça marche !
    Voila 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
    32
    33
    34
    35
     Function transalte_using_vba(ByRef str As String, ByRef inputstring As String, ByRef outputstring As String) As String
    ' Tools Refrence Select Microsoft internet Control
        Dim IE As Object, i As Long
        Dim start
        'Dim inputstring As String, outputstring As String,
        Dim text_to_convert As String, result_data As String, CLEAN_DATA
     
        Set IE = CreateObject("InternetExplorer.application")
     
        text_to_convert = str
        'open website
     
        IE.Visible = True ' je suis obligé d'affiche IE pour avoir la fenetre d'avertissement par la suite
        IE.Visible = False
        'https://translate.google.com/?hl=fr#en/fr/lopa
        IE.navigate "https://translate.google.com/?hl=" & outputstring & "#" & inputstring & "/" & outputstring & "/" & text_to_convert
    start = Timer
        Do Until (IE.readyState = 4 Or Timer > start + 5) ' tant que la fenetre d'avertissement n’apparaît pas on appui sur tab et entré
            DoEvents
            SendKeys ("{TAB}") 'tab
            SendKeys ("{ENTER}") 'enter
        Loop
        Application.Wait (Now + TimeValue("0:00:3"))
     
      '  Do Until IE.ReadyState = 4
     '       DoEvents
    ' Loop
        CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<")
        For j = LBound(CLEAN_DATA) To UBound(CLEAN_DATA)
            result_data = result_data & Right(CLEAN_DATA(j), Len(CLEAN_DATA(j)) - InStr(CLEAN_DATA(j), ">"))
        Next
        IE.Quit
        transalte_using_vba = result_data
     
        End Function

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Sauf horreur de ma part, l'affichage du message d'IE peut être éliminé en jouant avec les paramètres de sécurité dans les options d'IE. Tu peux mettre cette adresse-là dans tes "sites de confiance" pour commencer. (Encore que d'avoir confiance en Google, c'est presque une hérésie.) Si ce n'est pas assez, tu dois aller voir dans les autres paramètres de sécurité. Il me semble qu'il en ait un spécifique pour l'affichage, ou non, des éléments non sécurisés. Pour ce que j'en pense, il faut vraiment restreindre la "Journée portes ouvertes" aux seuls sites en qui on a vraiment confiance.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse ClementMarcotte,
    Le problème c'est que le fichier excel sera par la suite partagé avec d'autre personnes ... Et je ne veux pas leur demander de jouer avec leur paramètre de sécurité dans les options d'IE ...

  6. #6
    Futur Membre du Club
    Profil pro
    Déveoppeur vba Excel/Access
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Déveoppeur vba Excel/Access
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    il me semble que cette fenêtre propose également une case à cocher pour que le message n'apparaisse pas aux prochaines visites...
    Ca pour peut être une piste alternative, en demandant à l'utilisateur de cocher cette case ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Salut Eelectron,
    Malheureusement non ... pas de case à cocher sur la fenêtre.
    J'ai trouver une autre solution moins bourine (pas de SendKey), qui ferme la fenêtre automatiquement dès qu'elle est repérée avec des l'Api Windows
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     Function transalte_using_vba(ByRef str As String, ByRef inputstring As String, ByRef outputstring As String) As String
    ' Tools Refrence Select Microsoft internet Control
        Dim IE As InternetExplorer, i As Long
        Dim start
     
        'Dim inputstring As String, outputstring As String,
        Dim text_to_convert As String, result_data As String, CLEAN_DATA
      Set IE = CreateObject("InternetExplorer.Application")
     
        text_to_convert = str
        'open website
     
        'IE.Visible = True
        IE.Visible = False
        'https://translate.google.com/?hl=fr#en/fr/lopa
        IE.navigate ("https://translate.google.com/?hl=" & outputstring & "#" & inputstring & "/" & outputstring & "/" & text_to_convert)
       'Application.Wait (Now + TimeValue("0:00:5"))
    start = Timer
    Do Until (IE.readyState = READYSTATE_COMPLETE Or Timer > start + 10)
         DoEvents
         KillApp ("Avertissement de sécurité")
    Loop
     
         Application.Wait (Now + TimeValue("0:00:3"))
     
     
                If IE.readyState <> 4 Then
        MsgBox ("Problem of connexion/application process, please try again later.")
     
         End If
     
        CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<")
        For j = LBound(CLEAN_DATA) To UBound(CLEAN_DATA)
            result_data = result_data & Right(CLEAN_DATA(j), Len(CLEAN_DATA(j)) - InStr(CLEAN_DATA(j), ">"))
        Next
        IE.Quit
        transalte_using_vba = result_data
        End Function
     
    Declare Function EnumWindows Lib "user32" (ByVal wndenmprc As Long, ByVal lParam As Long) As Long
    Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, _
                                                                        ByVal lpString As String, _
                                                                        ByVal cch As Long) As Long
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
                                                                    ByVal wParam As Long, _
                                                                    lParam As Any) As Long
    Public Const WM_CLOSE = &H10
     
    Private AppCible As String
     
    Public Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
     
    Dim buf As String * 256
    Dim Titre As String
    Dim Longueur As Long
     
    ' Récupère le titre de la fenêtre
    Longueur = GetWindowText(app_hWnd, buf, Len(buf))
    Titre = Left$(buf, Longueur)
     
    ' Vérifie si le titre de la fenêtre correspond au nom recherché
    If InStr(Titre, AppCible) <> 0 Then
        'Ferme la fenêtre
        SendMessage app_hWnd, WM_CLOSE, 0, 0
    End If
     
    ' Poursuit l'énumération
    EnumCallback = 1
     
    End Function
     
    Public Sub KillApp(App_Cherchee As String)
     
    AppCible = App_Cherchee
    ' Demande à Windows d'énumérer les fenêtres ouvertes
    EnumWindows AddressOf EnumCallback, 0
     
    End Sub
    Cependant des utilisateurs portugais devront également utiliser le fichier .... donc je cherche un autre moyen d'identifier le message d'avertissement.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Voila la seule solution que j'ai trouvé pour régler le problème :
    Dans la boucle du milieu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do Until (IE.readyState = READYSTATE_COMPLETE Or Timer > start + 10)
            Call SupMessAvertissement
    Loop
    Avec Call SupMessAvertissement qui repère la langue de l'utilisateur, et qui peut ainsi détecter le titre du message :
    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
    Sub SupMessAvertissement()
    Select Case Application.LanguageSettings.LanguageID(msoLanguageIDUI)
       'Français : 1036
        'Portugais Brésil : 1046
        'portugais portugal : 2070
        'English british : 2057
        'English US :1033
        'Spanish : 3082
     
        Case 1036
    KillApp ("Avertissement de sécurité")
        Case 1046, 2070
    KillApp ("Aviso de Segurança")
        Case 2057, 1033
    KillApp ("Security Warning")
        Case 3082
    KillApp ("Advertencia de seguridad")
    End Select
     
    End Sub

    Voilà.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Voici le code final qui marche plutôt bien pour ceux que ça intéresse :

    - Fonctions API à inclure :
    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
    Declare Function EnumWindows Lib "user32" (ByVal wndenmprc As Long, ByVal lParam As Long) As Long
    Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, _
                                                                        ByVal lpString As String, _
                                                                        ByVal cch As Long) As Long
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
                                                                    ByVal wParam As Long, _
                                                                    lParam As Any) As Long
    Public Const WM_CLOSE = &H10
     
    Private AppCible As String
     
    Public Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
     
    Dim buf As String * 256
    Dim Titre As String
    Dim Longueur As Long
     
    ' Récupère le titre de la fenêtre
    Longueur = GetWindowText(app_hWnd, buf, Len(buf))
    Titre = Left$(buf, Longueur)
     
    ' Vérifie si le titre de la fenêtre correspond au nom recherché
    If InStr(Titre, AppCible) <> 0 Then
        'Ferme la fenêtre
        SendMessage app_hWnd, WM_CLOSE, 0, 0
    End If
     
    ' Poursuit l'énumération
    EnumCallback = 1
     
    End Function
     
    Public Sub KillApp(App_Cherchee As String)
     
    AppCible = App_Cherchee
    ' Demande à Windows d'énumérer les fenêtres ouvertes
    EnumWindows AddressOf EnumCallback, 0
     
    End Sub

    Code de traduction + suppression message d'avertissement :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Function transalte_using_vba(ByRef str As String, ByRef inputstring As String, ByRef outputstring As String) As String
    ' Tools Refrence Select Microsoft internet Control
        Dim IE As InternetExplorer, i As Long
        Dim start
        'Dim inputstring As String, outputstring As String,
        Dim result_data As String, CLEAN_DATA
     
     
      Set IE = CreateObject("InternetExplorer.Application")
     
     
        PrepText = Replace(str, vbCrLf, "%0A") 'Carriage-Return-Linefeed
            PrepText = Replace(PrepText, vbCr, "%0A") 'Carriage Return
            PrepText = Replace(PrepText, vbLf, "%0A") 'Linefeed
            PrepText = Replace(PrepText, "&", "%26")
            PrepText = Replace(PrepText, "@", "%40")
            PrepText = Replace(PrepText, "#", "%23")
            PrepText = Replace(PrepText, "$", "%24")
            PrepText = Replace(PrepText, "=", "%3D")
            PrepText = Replace(PrepText, "+", "%2B")
            PrepText = Replace(PrepText, ";", "%3B")
            PrepText = Replace(PrepText, ":", "%3A")
            PrepText = Replace(PrepText, ",", "%2C")
            PrepText = Replace(PrepText, "/", "%2F")
            PrepText = Replace(PrepText, "$", "%24")
            PrepText = Replace(PrepText, "?", "%3F")
        'open website
     
        'IE.Visible = True
        IE.Visible = False
        'https://translate.google.com/?hl=fr#en/fr/lopa
        IE.navigate ("https://translate.google.com/?hl=" & outputstring & "#" & inputstring & "/" & outputstring & "/" & PrepText)
       'Application.Wait (Now + TimeValue("0:00:5"))
    start = Timer
    Do Until (IE.readyState = READYSTATE_COMPLETE Or Timer > start + 10)
            Call SupMessAvertissement
    Loop
     
         Application.Wait (Now + TimeValue("0:00:1"))
     
     
                If IE.readyState <> 4 Then
        MsgBox ("Problem of connexion/application process, please try again later.")
     
        Else
     
        CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<")
        For j = LBound(CLEAN_DATA) To UBound(CLEAN_DATA)
        CLEAN_DATA(j) = Replace(CLEAN_DATA(j), "BR>", vbNewLine)
            result_data = result_data & Right(CLEAN_DATA(j), Len(CLEAN_DATA(j)) - InStr(CLEAN_DATA(j), ">"))
        Next
        IE.Quit
        transalte_using_vba = result_data
        End If
        End Function
    Code de détection de langue de l'utilisateur pour fermer la fenêtre d'avertissement avec le bon nom :
    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
    Sub SupMessAvertissement()
    Select Case Application.LanguageSettings.LanguageID(msoLanguageIDUI)
       'Français : 1036
        'Portugais Brésil : 1046
        'portugais portugal : 2070
        'English british : 2057
        'English US :1033
        'Spanish : 3082
     
        Case 1036
    KillApp ("Avertissement de sécurité")
        Case 1046, 2070
    KillApp ("Aviso de Segurança")
        Case 2057, 1033
    KillApp ("Security Warning")
        Case 3082
    KillApp ("Advertencia de seguridad")
    End Select
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Planificateur de tache et Ouverture d'Excel via VBA Access
    Par kan630 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/11/2013, 14h05
  2. [AC-2007] Utiliser une variable comme alias lors de la création de table via Vba
    Par Tipstitou dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/09/2010, 10h29
  3. Réponses: 2
    Dernier message: 11/10/2007, 10h17
  4. Réponses: 12
    Dernier message: 06/06/2006, 12h13

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