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 :

[E-03] Lancer la boite de recherche Windows


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [E-03] Lancer la boite de recherche Windows
    Bonjour à tous (et bonne année ;-)),

    J'aimerais, depuis Excel 2003, lancer la boite de recherche par défaut Windows (rechercher un fichier ou un dossier sur le disque dur) avec les champs "Nom de fichier" et "Répertoire cible" de renseignés par mon script.

    Je pense qu'il faut utiliser une API, mais je ne sais pas par ou commencer.

    Avez vous une idée ?

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir, je ne sais trop ce que tu veux

    Lancer la boite de dialogue Rechercher de 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
    Option Explicit
      'API
    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
     
    Private Const VK_LWIN = 91 ' Left Windows key
    Private Const VK_F = 70
    Private Const Key_Down = 0
    Private Const Key_Up = 2
    Sub Recherche()
        Call keybd_event(VK_LWIN, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(VK_F, 0, Key_Down, 0)    ' Appui sur touche F
        Call keybd_event(VK_F, 0, Key_Up, 0)      ' Relachement de la touche F
        Call keybd_event(VK_LWIN, 0, Key_Up, 0)   ' Relachement de la touche Windows
    End Sub
    Dans ce cas, je n'ai pas mieux pour l'instant.

    Sinon, tu peux toujours jeter un œil ici

    Cordialement

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour Fred,

    Merci pour la rapidité de ta réponse.

    Oui, c'est exactement ce que je veux... Lancer la boite de dialogue "Recherche des fichiers ou des dossiers" de Windows.
    Ton script lance bien la boite que je désire, mais j'aimerais qu'il se positionne sur le choix "Tous les fichiers et tous les dossiers" et qu'il renseigne les zones "Nom de fichier" et "Rechercher dans".

    De façon à que je n'ai plus qu'à cliquer sur le bouton "Rechercher" après l'exécution de la macro si les paramètres renseignés dans les zones me conviennent.

    J'ai essayé de rajouter ça à ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ' Choisir "Tous les fichiers et tous les dossiers" Win+H
        DoEvents
        Sleep 2000
        Call keybd_event(VK_LWIN, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(VK_H, 0, Key_Down, 0)    ' Appui sur touche F
        Call keybd_event(VK_H, 0, Key_Up, 0)      ' Relachement de la touche F
        Call keybd_event(VK_LWIN, 0, Key_Up, 0)   ' Relachement de la touche Windows
    Mais ca ne fonctionne pas...
    Je pense que, même si la boite passe devant, il effectue cette simulation de touche sur Excel.

    Et, en admettant que ça fonctionne... Comment je pourrait renseigner les zones de textes ?

    N'y a t-il pas moyen de faire appel à un éventuel "c:\windows\rechercher.exe" avec des paramètres ?

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, Dacid,

    Je ne sais pas quelle est la finalité exacte, mais "sens" qu'il y a beraucoup mieux à faire que de t'y prendre ainsi.
    Explique :
    - Chercherais-tu simplement à déterminer si, dans un répertoire à spécifier (et ses sous-dossiers) , existe(nt) déjà un/des dossier(s) portant un nom à spécifier et/ou un/des fichier(s) portant ce même nom + une extension (et dans ce cas : quelle qu'elle soit ou à spécifier également ?) ?
    - Si oui :
    --- veux-tu simplement savoir s'ils existent (avec leur nombre, éventuellement) ou veux-tu également en connaître le chemin complet ?
    --- si tu veux en connaître le chemin complet : dois-tu également pouvoir utiliser dynamiquement ce chemin complet (ce que ne te permets pas de faire l'utilisation simple de la fenêtre de recherche de l'explorateur) ?
    C'est en fonction de tes réponses précises à ces questions précises que je serai en mesure d'écrire le code dont tu as besoin.

  5. #5
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour ucfoutu,

    Non, je veux vraiment passer par cette boite de dialogue de recherche Windows avec des zones de texte pré renseignées.
    Pour info, c'est pour du traitement de fichiers en masse et il y a tellement de cas différents qu'on ne peux faire un script personnalisé.

    J'ai ca pour l'instant:
    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
    Sub Rechercher4(rep As String)
        Dim app As Double
     
        'RetVal = ShellExecute(0, "Open", "explorer " & rep, ByVal 0&, 0&, 6)
        app = Shell("explorer " & rep, vbNormalFocus)
        DoEvents
        'Sleep 500
        Call keybd_event(vk_ctrl, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(vk_f, 0, Key_Down, 0)    ' Appui sur touche H
        Call keybd_event(vk_f, 0, Key_Up, 0)      ' Relachement de la touche H
        Call keybd_event(vk_ctrl, 0, Key_Up, 0)   ' Relachement de la touche Windows
        DoEvents
        'Call keybd_event(VK_LWIN, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(VK_H, 0, Key_Down, 0)    ' Appui sur touche H
        Call keybd_event(VK_H, 0, Key_Up, 0)      ' Relachement de la touche H
        'Call keybd_event(VK_LWIN, 0, Key_Up, 0)   ' Relachement de la touche Windows
    End Sub
    Mais s'il me lance bien l'assistant de recherche dans l'explorateur, je n'arrive pas à sélectionner "Tous les fichiers et tous les dossiers"... La 2ème partie de mon code ne fonctionne pas.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Regarde quand même ce que ferait l'outil suivant :
    2 textboxes Textbox1 (pour le répertoire à "fouiller") Textbox2 (pour le nom à chercher) , une listbox List1 pour visualiser et un bouton Command1 pour exécuter

    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
    Private Sub Command1_Click()
       Dim filtre As String, repertoire_a_fouiller As String
       repertoire_a_fouiller = Textbox1.Text '  exemple d:\monoutil\
       filtre = Textbox2.Text ' exemple : modeles
       List1.Clear
       fouillons repertoire_a_fouiller, filtre
    End Sub
     
    Sub fouillons(ByVal R As String, FD As String)
       Dim NF As String, NBR As Integer, chemin As String, i As Integer
       Me.MousePointer = vbHourglass
       If Right$(R, 1) <> "\" Then R = R & "\"
       NF = Dir$(R, vbDirectory): NBR = 1
       Do While NF <> ""
         If NF <> "." And NF <> ".." Then
           chemin = R & NF
           If GetAttr(chemin) And vbDirectory Then
             If NF Like FD Then List1.AddItem chemin
             fouillons chemin, FD
             NF = Dir$(R, vbDirectory)
             For i = 2 To NBR
               NF = Dir$
             Next
           Else
             If NF Like FD & ".*" Then List1.AddItem chemin
           End If
         End If
         NF = Dir$: NBR = NBR + 1
       Loop
       Me.MousePointer = vbDefault
    End Sub

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai compris ce que tu voulais mais jète tout de même un oeil ici, ça ne fait pas ce que tu veux mais des fois que...
    Bonne journée

  8. #8
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Merci ucfoutu, ton script fonctionne bien, mais ça ne convient pas...

    Il faut vraiment que j'utilise la boite "Rechercher" de Windows.
    J'ai besoin des options avancées et de son comportement.

    J'ai essayé avec un postmessage, mais ça ne va pas non plus, ça n'a aucun effet... Il ne veux pas valider la première étape de la recherche.
    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
    Sub Rechercher4(rep As String)
        Dim app As Double
     
        app = Shell("explorer " & rep, vbNormalFocus)
        DoEvents
        'Sleep 500
        Call keybd_event(VK_CTRL, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(VK_F, 0, Key_Down, 0)    ' Appui sur touche H
        Call keybd_event(VK_F, 0, Key_Up, 0)      ' Relachement de la touche H
        Call keybd_event(VK_CTRL, 0, Key_Up, 0)   ' Relachement de la touche Windows
        'DoEvents
        'Sleep 500
        Call PostMessage(app, Key_Down, VK_H, 0)
        Call PostMessage(app, Key_Up, VK_H, 0)
    Windows
    End Sub
    Bonjour ouskel'n'or,

    Pareil, ton appli est vraiment pas mal mais ça n'ira pas pour ce que je veux...

    Allez, rassurez moi, dites moi que c'est possible.

  9. #9
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut


    Dans un module :
    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 Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
            (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
             ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    Private Const SW_SHOW = 5
     
    Public Sub OpenFindFile(Optional pFolder As String, Optional pFile As String, Optional pFindIn As String)
    Call ShellExecute(GetActiveWindow, "find", pFolder, vbNullString, vbNullString, SW_SHOW)
    If pFile <> "" Then
        SendKeys pFile, True
    End If
    If pFindIn <> "" Then
        SendKeys "{TAB}" & pFindIn, True
    End If
    End Sub
    Pour exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OpenFindFile "D:\Office XP\Install", "monfichier*.txt", "caractères"
    Si exécution depuis la fenêtre VBE la fenêtre de recherche passe derrière, mais elle reste devant si on exécute sur click sur un bouton ou une cellule.

  10. #10
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bon, si jamais quelqu'un cherche la même chose que moi un jour (y a p-e pas que moi qui ai des besoins tordus ), j'ai un truc qui fait bricolage mais qui peut suffire:
    Dans les paramètres de la recherche, il faut indiquer qu'on ne veut pas être en mode assistant, comme ça, on saute le premier écran et on va directement au panneau qui nous intéresse.
    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
    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub lancer()
        Dim rep As String
        Dim fic As String
        rep = ActiveWorkbook.Sheets(1).Range("A1").Value
        fic = ActiveCell.Value
     
        If Dir(rep, vbDirectory) <> "" Then
            ctrlC_copie fic
            'ActiveCell.Copy
            DoEvents
            'Sleep 500
            Rechercher2 rep
        Else
            MsgBox "Le répertoire '" & rep & "' n'existe pas"
        End If
    End Sub
     
    Sub Rechercher2(rep As String)
        ' Lancer la boite de dialogue
        Call keybd_event(VK_LWIN, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(VK_F, 0, Key_Down, 0)    ' Appui sur touche F
        Call keybd_event(VK_F, 0, Key_Up, 0)      ' Relachement de la touche F
        Call keybd_event(VK_LWIN, 0, Key_Up, 0)   ' Relachement de la touche Windows
        'DoEvents
        Sleep 500
        coller
        tabulation
        tabulation
        Sleep 200
        'DoEvents
        ctrlC_copie rep ' copie de la valeur dans le presse papier
        coller
    End Sub
     
    Sub coller()
        DoEvents
        Call keybd_event(VK_CTRL, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(VK_V, 0, Key_Down, 0)    ' Appui sur touche H
        Call keybd_event(VK_V, 0, Key_Up, 0)      ' Relachement de la touche H
        Call keybd_event(VK_CTRL, 0, Key_Up, 0)   ' Relachement de la touche Windows
    End Sub
     
    Sub tabulation()
        DoEvents
        Call keybd_event(VK_TAB, 0, Key_Down, 0) ' Appui sur touche Windows
        Call keybd_event(VK_TAB, 0, Key_Up, 0)   ' Relachement de la touche Windows
    End Sub
    Voila.. Si quelqu'un à mieux...

  11. #11
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Salut Arkham46,

    Oups, on a postés en même temps.

    J'ai essayé ton truc, c'est tout simplement génial !!!


    Merci, merci 1000 fois !

    Juste pour info... Comment t'as trouvé ça ?

  12. #12
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Citation Envoyé par dacid Voir le message

    Juste pour info... Comment t'as trouvé ça ?
    Ici :
    http://msdn.microsoft.com/en-us/libr...53(VS.85).aspx

    ShellExecute est expliqué en détail, il faut "juste" savoir que ça existe.
    Ensuite c'est des SendKeys pour remplir ce qui ne peut être rempli directement.

  13. #13
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Super,

    Et bien, cette petite application bénigne m'aura permis de faire un grand pas...

    Comme tu as l'air calé sur ce genre de sujet, j'en profite (j'espère que je n'abuse pas ) pour te poser une petite question sur un truc similaire qui me chagrine depuis longtemps.

    Comment faire pour connaitre les paramètres possibles d'un exécutable ?

    Pour exemple, je veux installer l'imprimante virtuelle adobe (adobe postscript driver), mais de manière invisible.
    Il faut donc renseigner les informations demandées par les fenêtres du processus d'installation au setup.exe.
    Mais je ne trouve aucune documentation et adobe ne répond pas à mes mails (ça doit être possible car PdfCreator le fait bien, lui).

    Sais-tu comment je peux avoir ça ?

  14. #14
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    non là je connais pas
    et pour la lisibilité du forum, il faudrait créer un nouveau message pour un nouveau sujet

  15. #15
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    C'est fait !
    J'ai mis ça dans la programmation Windows: http://www.developpez.net/forums/d66...es-executable/

    Et merci encore (t'es plus à une fois près ).

    Bonne soirée à tous.

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

Discussions similaires

  1. [XP]effacer l'historique de la recherche windows ?
    Par ferradji dans le forum Windows XP
    Réponses: 8
    Dernier message: 14/12/2008, 20h54
  2. Gerer une recherche windows
    Par borislotte dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/05/2007, 14h44
  3. [Access]Re-creer la recherche windows
    Par borislotte dans le forum Access
    Réponses: 1
    Dernier message: 25/04/2007, 19h15
  4. [VBA - E] Controler recherche windows
    Par alex_elder1_1 dans le forum Macros et VBA Excel
    Réponses: 49
    Dernier message: 13/12/2006, 14h07
  5. Récupérer le contenu d'une boite de dialogue Windows en VB6
    Par DWade dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/06/2006, 22h01

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