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 :

Ouvrir l'explorer et lui donner un ordre depuis vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Référent technique
    Inscrit en
    Février 2021
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Février 2021
    Messages : 37
    Par défaut Ouvrir l'explorer et lui donner un ordre depuis vba
    Bonjour,

    Je cherche à ouvrir (ou activer) un dossier particulier de mon explorer, et à lui faire rafraichir via F5.

    Mon premier problème est l'ouverture ou l'activation de la fenêtre.
    J'ai rentré ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test7()
     
    AppActivate Shell("explorer.exe " & "C:\Users\louis\Documents", 1)
     
    End Sub
    Assez étrangement, il fonctionne, la fenêtre s'ouvre bien. Par contre dans le même temps, j'ai une erreur 5 argument ou appel de procédure incorrect.
    Sauriez vous me dire ce qui pêche, dans la mesure où cela fonctionne quand même?
    Par contre, même si j'ai l'explorer ouvert sur le bon chemin, il m'ouvre un deuxième explorer à l'adresse indiqué dans mon code. J'aurais cru que le "activate" activerait la page et non pas l'ouvrirait (je me serais attendu à un "AppOpen" dans ce cas). Comment puis-je faire pour lui faire activer la page ouverte svp?

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Référent technique
    Inscrit en
    Février 2021
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Février 2021
    Messages : 37
    Par défaut
    Rebonjour,

    J'ai trouvé la solution à mon problème grâce à ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test7()
    Dim dossier As Variant
     
    dossier = Shell("explorer.exe " & "C:\Users\louis\Documents", vbNormalFocus)
     
    End Sub
    Par contre mon soucis c'est qu'il ouvre un explorer, sauf que mon explorer existe et est ouvert.
    J'ai trouvé ceci sur internet, qui est très compliqué pour moi:
    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
    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 ne comprends pas trop la partie private, par contre je comprends pas partie du if.
    Ce que je ne sais pas c'est comment le transformer pour plutôt que de lui dire de tester chaque fenêtre ouverte, il m'ouvre ma fenêtre d'explorer qui existe bien.

    Si quelqu'un sait comment le changer. Chaque fois que je teste, il me dit qu'il y a un problème d'objet :s

  3. #3
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 384
    Par défaut
    Bonjour,

    A défaut de pouvoir utiliser la fenêtre existante, la supprimer et en créer une nouvelle!? Au moins cela évite d'accumuler les fenêtres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub OpenFolder(sPath As String)
        Dim sh As Object, w As Object
        Set sh = CreateObject("shell.application")
        For Each w In sh.Windows
            'Debug.Print w.Name
            If w.Name = "Explorateur de fichiers" Then  '--- les noms changent suivant la langue utilisée
                w.Quit
            End If
        Next
        Set w = Nothing
        Set sh = Nothing
        ActiveWorkbook.FollowHyperlink sPath
    End Sub
    Cordialement.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    Par défaut
    Hello,
    j'ai trouvé un autre code sur Internet que j'ai dû légèrement modifier (à cause du nom en français).
    A Essayer :
    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
    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
     
     
    Private Sub OpenFolder(strDirectory As String)
    'DESCRIPTION: Open folder if not already open. Otherwise, activate the already opened window
    'DEVELOPER: Ryan Wells (wellsr.com)
    'INPUT: Pass the procedure a string representing the directory you want to open
    Dim pID As Variant
    Dim sh As Variant
    On Error GoTo 102:
    Set sh = CreateObject("shell.application")
    For Each w In sh.Windows
    '    If w.Name = "Windows Explorer" Or w.Name = "File Explorer" Then
         If w.Name = "Explorateur de fichiers" Then
            If w.Document.folder.self.Path = strDirectory Then
                'if already open, bring it front
                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
        End If
    Next
    'if you get here, the folder isn't open so open it
    pID = Shell("explorer.exe " & strDirectory, vbNormalFocus)
    102:
    End Sub
     
     
    Sub OpenFolderDemo()
    'Demo - opens the folder location saved to the variable strPath
    Dim strPath As String
    strPath = "C:\Windows"
    Call OpenFolder(strPath)
    End Sub
    Ami calmant, J.P

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/10/2017, 11h51
  2. [VBA Exel] Copier un fichier xls et lui donner un autre nom
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/11/2005, 17h40
  3. thread dédié à une classe pour lui "donner vie"
    Par Dje14 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 02/06/2005, 16h46
  4. Réponses: 4
    Dernier message: 18/05/2005, 14h08
  5. [JLabel]Lui donner la taille occupée par le texte
    Par Pill_S dans le forum Composants
    Réponses: 20
    Dernier message: 12/03/2005, 13h00

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