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 :

état d'un répertoire depuis une macro vba excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 21
    Points : 11
    Points
    11
    Par défaut état d'un répertoire depuis une macro vba excel
    Bonjour à tous
    J'ai un petit problème relatifs à la gestion des répertoires à partir d'une macro vba et j'ai besoin de votre aide.
    Ca fait un petit moment que je tourne en rond sur le net et je ne trouve que des conseils relatifs à la gestion de fichiers et/ou de classeurs, mais rien sur les répertoires... ou du moins pas ce que je cherche.

    A la fin d'un sub, j'ouvre un répertoire dont je connais le nom avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "explorer " & chemin_repertoire, vbNormalFocus
    tout roule jusqu'ici.

    Mon problème c'est que chaque fois que je lance la macro, un nouveau répertoire identique s'ouvre dans la barre Windows.

    Je souhaiterais trouver le moyen de contrôler si le répertoire est déjà "actif" dans la barre Windows et mettre mon focus dessus s'il y est (l'ouvrir en plein écran).
    S'il n'est pas dans la barre Windows, je peux simplement utiliser le code ci-dessus pour l'ouvrir.

    En gros:
    - comment vérifier qu'un répertoire est déjà dans la barre Windows (du fond de l'écran)?
    - comment faire en sorte que le focus se mette sur un répertoire actif dans la barre Windows (et donc ouvrir le répertoire à l'écran) sans qu'un répertoire identique ne s'ouvre et duplique le répertoire actif?

    je vous remercie déjà pour votre aide.

    cordialement

    seb

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Ceci le fait en utilisant une fenêtre de commande cependant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Ne pas ouvrir un repertoire identique
     Shell "cmd /C start """" /normal """ & chemin_repert & """", vbNormalFocus
    Cordialement

    Docmarti.

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une petite fonction qui cherche si l'explorateur est ouvert sur le dossier voulu. La fonction retourne un tableau qui permet de savoir si l'explorateur est ouvert et si il est ouvert sur le dossier, si il est ouvert mais pas sur le dossier un message demande si il doit être ouvert, si l'explorateur n'est pas ouvert dans ce cas, il est ouvert sur le dossier (sans 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
    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
     
    Function DossierOuvert(Chemin) As Boolean()
     
        Dim AppShell As Object
        Dim Fenetre As Object
        Dim Tbl(1 To 2) As Boolean
     
        Set AppShell = CreateObject("Shell.Application")
     
        For Each Fenetre In AppShell.Windows
     
            If Fenetre.Name = "Explorateur Windows" Then
     
                Tbl(1) = True
     
                If Fenetre.Document.Folder.Self.Path = Chemin Then
     
                    Tbl(2) = True
     
                End If
     
            End If
     
        Next Fenetre
     
        DossierOuvert = Tbl()
     
    End Function
     
    Sub Test()
     
        Dim Tablo() As Boolean
        Dim chemin_repertoire As String
     
        'adapter le chemin mais sans l'anti-slash de fin !
        chemin_repertoire = "C\Mon dossier_1\Mon dossier_2"
     
        Tablo() = DossierOuvert(chemin_repertoire)
     
        If Tablo(1) = Tablo(2) = True Then
     
            MsgBox "L'explorateur est déjà ouvert sur le dossier '" & chemin_repertoire & "'!"
     
        ElseIf Tablo(1) = True And Tablo(2) = False Then
     
            If MsgBox("L'explorateur est ouvert mais pas sur le dossier '" & chemin_repertoire & "'!" & _
                      vbCrLf & _
                      "Voulez-vous l'ouvrir sur le dossier ?", vbQuestion + vbYesNo) = vbYes Then
     
                Shell "explorer " & chemin_repertoire, vbNormalFocus
     
            End If
     
        Else
     
            Shell "explorer " & chemin_repertoire, vbNormalFocus
     
        End If
     
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Quel intérêt d'ouvrir explorer avec une commande Shell?

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour Robert.


    Citation Envoyé par rdurupt Voir le message
    Bonsoir,
    Quel intérêt d'ouvrir explorer avec une commande Shell?
    C'est que je tiens à utiliser /select
    Cordialement

    Docmarti.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Effectivement activate; select et selction ça met en évidence pertinence des api et des #directive de compilation;

    Pourquoi faire sens quand on peut faire avec!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Docmarti Voir le message
    Bonjour.

    Ceci le fait en utilisant une fenêtre de commande cependant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Ne pas ouvrir un repertoire identique
     Shell "cmd /C start """" /normal """ & chemin_repert & """", vbNormalFocus

    merci ça fait exactement ce que je souhaite faire.
    Merci aux autres également pour les réponses.

    cordialement
    seb

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Personnellement j'adopte la "petite fonction" de Theze qui se révèle une grande fonction que j'ai adaptée pour fermer la fenêtre si elle existe avant d'en ouvrir une nouvelle.

    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
    Sub tt()
     
    'Chemin = "C:\Users\client\Documents\Thrives_Horaire_aujourdhui_021.xlsm"
     
    Chemin = "C:\Users\client\Documents\"
     
    Call FermerSiOuvert(Chemin)
     
    Shell "explorer /select," & Chemin, vbNormalFocus
     
    End Sub
     
     
    Function FermerSiOuvert(Chemin) As Boolean
     
        Dim appShell As Object
        Dim Fenetre As Object
        Dim path As String
     
     path = Chemin
     If Right(path, 1) = "\" Then path = Mid(path, 1, Len(path) - 1)
     
     b = InStrRev(path, "\")
     If b > 0 Then path = Mid(path, 1, b - 1)
     
        Set appShell = CreateObject("Shell.Application")
     
        For Each Fenetre In appShell.Windows
     
            If Fenetre.Name = "Explorateur Windows" Then
     
                If UCase(Fenetre.Document.Folder.Self.path) = UCase(path) Then
     
                 Fenetre.Quit
     
                End If
     
            End If
     
        Next Fenetre
     
    End Function
    Cordialement

    Docmarti.

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

Discussions similaires

  1. [CR XI] Lancer l'édition d'un report depuis une macro vba excel
    Par juju05 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 18/06/2015, 15h34
  2. [XL-2013] Référence à une cellule nommée depuis une macro VBA
    Par vonfelt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/02/2015, 11h25
  3. [XL-2010] Création d'une macro événement feuille depuis une macro VBA
    Par phoenellion dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/03/2013, 12h57
  4. [VBA] [XI] Piloter BO depuis une macro sous Excel
    Par couistelle dans le forum SDK
    Réponses: 11
    Dernier message: 20/11/2008, 11h39
  5. [WD11] Lancer une macro VBA Excel
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 1
    Dernier message: 11/09/2007, 11h46

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