Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Afficher l'explorer via vba

Marilo

XLDnaute Nouveau
Bonjour,

(modifié: et par avance je m'excuse, j'ai posté dans une section Excel lorsque j'aurais dû le mettre dans la section vba :s
Je ne sais pas si je dois reposter là-bas?!)

Je souhaiterais afficher mon explorer pour ensuite lui faire réaliser une action d'actualisation.
Mon explorer est ouvert mais pas activé, puisque c'est mon fichier Excel qui l'est.

J'ai trouvé une façon d'ouvrir la fenêtre d'explorer qui m'intéresse:
VB:
Sub test()
Dim dossier As Variant
dossier = Shell("explorer.exe " & "C:\Users\louis\Documents", vbNormalFocus)
End Sub

Le souci c'est qu'il m'ouvre une fenêtre jusqu'au dossier voulu, alors que j'en ai déjà un d'ouvert.

Sur internet, j'ai trouvé des codes très compliqués, type celui-ci:
Code:
Private Const SW_RESTORE = 9
 
#If VBA7 Then
    Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare PtrSafe Function IsIconic Lib "user32.dll" (ByVal hwnd As Long) As Long
#Else
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function IsIconic Lib "user32.dll" (ByVal hwnd As Long) As Long
#End If
 
Sub OpenExplorer()
    'Launch folder if not already open
    Dim strDirectory As String
    Dim pID As Variant, sh As Variant
    strDirectory = "C:\Users\Ryan\Documents"
    'On Error GoTo 102:
    Set sh = CreateObject("shell.application")
    For Each w In sh.Windows
        If w.document.folder.self.Path = strDirectory Then 'if already open, activate it
            If CBool(IsIconic(w.hwnd)) Then ' If it's minimized, show it
                w.Visible = False
                w.Visible = True
                ShowWindow w.hwnd, SW_RESTORE
            Else
                w.Visible = False
                w.Visible = True
            End If
            Exit Sub
        End If
    Next
    'if you get here, the folder isn't open so open it
    pID = Shell("explorer.exe " & strDirectory, vbNormalFocus)
102:
End Sub

Je sais qu'il teste les fenêtre ouvertes, et si une correspond au chemin souhaité, il la rend visible, sinon il ouvre le dossier.
Dans mon cas, je n'ai pas besoin de test, je sais que la fenêtre conduisant au chemin souhaité est ouverte, mais il me faut l'activer. Et c'est là que la bât blesse, je n'arrive pas à transformer le code ci-dessus en un code qui affiche la fenêtre voulue.

Sauriez vous comment faire svp?
 

Dudu2

XLDnaute Barbatruc
Bonjour,

Comprends pas ton problème.
Je souhaiterais afficher mon explorer pour ensuite lui faire réaliser une action d'actualisation.
C'est quoi une "action d'actualisation" ?
Mon explorer est ouvert mais pas activé, puisque c'est mon fichier Excel qui l'est.
Si, c'est l'application active une fois lancé. Ce qui n’empêche pas la macro de tourner et de lui envoyer des SendKeys par exemple.

Et pour le reste je n'ai pas compris et personne apparemment car ma réponse est la seule.
Explique en français ce que tu veux faire.
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
perso je ne vois pas pourquoi aller chercher les apis windows
surtout que c'est fait très maladroitement

un simple exemple avec shell.application
VB:
'****************************************
'patricktoulon sur developpez.com
'date:07/06/2013
'****************************************
Sub test()
    Getfentre_des_documents
End Sub

Public Function Getfentre_des_documents() As Object
    Dim objShell As Object, obj As Object
    Set objShell = CreateObject("shell.application")
    For Each obj In objShell.Windows
        'test de la presence de IE ou fentre explorateur dans les treads
        Debug.Print "******************"
        'Debug.Print "type de document   :" & TypeName(obj)
        'Debug.Print "type de document   :" & TypeName(obj.document)
        'Debug.Print "fenetre :" & obj.Name
        Debug.Print "titre :" & obj.locationNAME
        'Debug.Print "url :" & obj.locationurl (fenetre de type IE(internet explorer)
        If Left(obj.locationNAME, 9) = "Documents" Then AppActivate "Documents"    'uniquement si c'est la fenetre Documents
    Next obj
End Function

je vous laisse débloquer(ou pas)les debug.print pour que vous voyez ce que l'on y trouve dans la console
bonne journée @+
 

Discussions similaires

  • Résolu(e)
Microsoft 365 32 ou 64 bits
Réponses
46
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…