Recherche dans l'explorateur windows

ptibaz

XLDnaute Junior
Bonjour à tous,

Avec une macro je souhaite copier la cellule active dans le presse papier et la coller dans la recherche de l'explorateur Windows 7

copier: je sais faire
'----- copier dans le presse papier
Dim TheData As String
TheData = libelle

With New DataObject
.SetText TheData
.PutInClipboard
End With
MsgBox "La sélection est copiée dans le presse papier"
'----------------------------------


ouvrir l'explorateur : je sais faire
'--- ouvrir l'explorateur
Dim ouvrir As String
'ouvrir = "c:\windows\explorer.exe " & ActiveWorkbook.Path
ouvrir = "c:\windows\explorer.exe " & "L:\Methodes\2 - PLANS + CODES STANDARDS"
Shell ouvrir, 1



mais coller ??? j'ai besoin d'aide SVP
2014-07-03 12_24_25-Document1 - Microsoft Word.png

merci d'avance
 

Mastho

XLDnaute Nouveau
Re : Recherche dans l'explorateur windows

J'ai utilisé le même code exactement que tu avais envoyé (j'ai pris le fichier excel que tu avais mis en pièce jointe) et j'ai changé comme tu m'avais dit pour pouvoir chercher dans un dossier en particulier.

Mais je crois que j'ai trouvé la solution de mon problème.
Dans la partie du code "on ouvre l'explorateur Windows", le sleep était programmé à 500 (ms j'imagine). Or mon ordi rame souvent, cela n'était pas suffisant car le temps que l'explorateur Windows s'ouvre, les 500ms s'étaient déjà écoulées. Donc j'ai mis à 1500ms et je crois que ça marche maintenant (enfin à vérifier sur la durée).

Dis moi ce que tu en penses (si ce que j'ai dit est cohérent).

Merci! :)
 

MJ13

XLDnaute Barbatruc
Re : Recherche dans l'explorateur windows

Re

Sinon, tu peux tester un code de ce type :).

Code VBA:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Cherche_Explorateur()
Shell ("C:\Windows\explorer.exe C:\temp"), vbMaximizedFocus
Sleep 1000
Application.SendKeys ("{F3}"), True
Sleep 1000
Application.SendKeys ("a*"), True
Application.SendKeys ("{NUMLOCK}"), True
End Sub
Sub Cherche_Explorateur2()
Shell ("C:\Windows\explorer.exe " & Cells(1, 1)), vbMaximizedFocus
Sleep 1000
Application.SendKeys ("{F3}"), True
Sleep 1000
Application.SendKeys (Cells(1, 2)), True
Application.SendKeys ("{NUMLOCK}"), True
End Sub
 

Pièces jointes

  • Cherche_Explorateur_MJ2.xlsm
    24.1 KB · Affichages: 105
Dernière édition:

Mastho

XLDnaute Nouveau
Re : Recherche dans l'explorateur windows

Re!

Pour savoir, quelle est la différence de ce code par rapport au précédent? (enfin je vois que c'est pas le même, mais au niveau fonctionnel ou des resources ^^)
Merci pour cette autre version je vais la tester :)
 

MJ13

XLDnaute Barbatruc
Re : Recherche dans l'explorateur windows

Re Mastho

En fait j'ai développé ce code hier en le testant sur Win7 et Excel 2013.

Si cela fonctionne chez toi, pourrais-tu donner ta version d'Excel et de Windows pour savoir sur quelles versions cela focntionne?
 

Mastho

XLDnaute Nouveau
Re : Recherche dans l'explorateur windows

Alors à première vue il y a quelque chose de bizarre. On me demande de rétablir des liaisons, comme si un autre classeur était lié avec mais je l'ai pas...
Aussi le bouton 1 ne marche pas non plus...
En fait il y a un fichier "ADiv.xlam" qui est introuvable.. ^^

Par contre le bouton deux fonctionne :)

Je suis sous Windows 7 & excel 2010!
 

MJ13

XLDnaute Barbatruc
Re : Recherche dans l'explorateur windows

Re

Merci pour le retour :).

En fait, j'avais copié ce code dans une macro complémentaire que j'utilise qui se nomme Adiv.xlam, pour qu'il soit au dessus de mes xlam et qui avait le même nom que la première macro. Et bien , Excel :eek:, l'a pris comme lien.

Mais si cela fonctionne chez toi, c'est le principal :).

Test OK sur Win 8 et Excel 2007.
 
Dernière édition:

Mastho

XLDnaute Nouveau
Re : Recherche dans l'explorateur windows

Ok :)
Du coup j'ai mixé un peu les deux macros (j'ai en fait seulement pris le Sendkeys que j'ai intégré dans l'autre macro) comme ça, àa fonctionne sur XP aussi (oui je sais ça date, mais j'en ai besoin sur xp aussi ^^)
Merci! :)
 

Mastho

XLDnaute Nouveau
Re : Recherche dans l'explorateur windows

Bonjour,

Désolé du retard, le code était sur mon PC professionnel, et je n'y ai pas accès le we ^^

Le code ressemble à ça:

Code:
Option Explicit
#If Win64 Then 'si version Excel 2010 ou 2013 et 64 bits
  Declare PtrSafe Sub ClientToScreen Lib "user32" _
  (ByVal hwnd As Long, lpPoint As POINT)
  
  Declare PtrSafe Function FindWindow Lib "user32" _
   Alias "FindWindowA" _
   (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
  
  Declare PtrSafe Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
  ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
  ByVal lpsz2 As String) As Long
     
  Declare PtrSafe Sub GetClientRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT)
  
  Declare PtrSafe Function GetWindowRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT) As Long
  
  Declare PtrSafe Sub keybd_event Lib "user32.dll" _
  (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

  Declare PtrSafe Sub mouse_event Lib "user32" _
  (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, _
  ByVal cButtons As Long, ByVal dwExtraInfo As Long)
                                        
  Declare PtrSafe Function SetCursorPos Lib "user32" _
  (ByVal x As Long, ByVal y As Long) As Long
  
  Declare PtrSafe 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
     
  Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  
  Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  
  Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
  
  Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
#Else
  Declare Sub ClientToScreen Lib "user32" _
  (ByVal hwnd As Long, lpPoint As POINT)
  
  Declare Function FindWindow Lib "user32" _
   Alias "FindWindowA" _
   (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
  
  Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
  ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
  ByVal lpsz2 As String) As Long
     
  Declare Sub GetClientRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT)
  
  Declare Function GetWindowRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT) As Long
  
  Declare Sub keybd_event Lib "user32.dll" _
  (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

  Declare Sub mouse_event Lib "user32" _
  (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, _
  ByVal cButtons As Long, ByVal dwExtraInfo As Long)
                                        
  Declare Function SetCursorPos Lib "user32" _
  (ByVal x As Long, ByVal y As Long) As Long
  
  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
     
  Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  
  Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  
  Declare Function EmptyClipboard Lib "user32" () As Long
  
  Declare Function CloseClipboard Lib "user32" () As Long
#End If

Const SW_NORMAL As Long = 1
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const KEYEVENTF_KEYUP = &H2
Const VK_CONTROL As Long = &H11
Const VK_C = 67
Const VK_V = 86

Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Type POINT
  x As Long
  y As Long
End Type

'cocher Microsoft Forms 2.0 object library
Sub Recherche_Explorateur_Windows()

Dim Zone As RECT
Dim Pos As POINT
Dim Explorer_Window As Long
Dim WorkerW_Window As Long
Dim ReBarWindow32_Window As Long
Dim UniversalSearchBand_Window As Long
Dim Search_Box_Window As Long
Dim DataObj As New MSForms.DataObject
Dim Mon_texte As String
Dim RetVal As Long

'on vide le presse-papier
ClearClipboard

'on ouvre l'explorateur Windows
RetVal = ShellExecute(0, "open", "explorer.exe", "T:/Dossier1/Dossier2/...", 0, SW_NORMAL)
Sleep 1500

If RetVal = 2 Or RetVal = 3 Then
  MsgBox "Chemin ou fichier non trouvé"
  Exit Sub
End If

'on copie le texte de la cellule active dans le presse-papier
Mon_texte = ActiveCell.Text
DataObj.SetText Mon_texte
DataObj.PutInClipboard

'on identifie la fenêtre de saisie de l'explorateur Windows
Explorer_Window = FindWindow("CabinetWClass", vbNullString)
WorkerW_Window = FindWindowEx(Explorer_Window, 0&, "WorkerW", vbNullString)
ReBarWindow32_Window = FindWindowEx(WorkerW_Window, 0&, "ReBarWindow32", vbNullString)
UniversalSearchBand_Window = FindWindowEx(ReBarWindow32_Window, 0&, "UniversalSearchBand", vbNullString)
Search_Box_Window = FindWindowEx(UniversalSearchBand_Window, 0&, "Search Box", vbNullString)

'on se place dans la fenêtre de saisie y pour coller le contenu du presse-papier
SendKeys String:="{F3}", Wait:=True
keybd_event VK_CONTROL, 0, 0, 0
keybd_event VK_V, 0, 0, 0
keybd_event VK_V, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0, 0, 0
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
Sleep 1000
SendKeys String:="{ENTER}", Wait:=True

End Sub

Sub ClearClipboard()

OpenClipboard (0&)
EmptyClipboard
CloseClipboard

End Sub

Ça reprend beaucoup (voire que) les codes exposés précédemment, mais c'était pour que la fonction de recherche s'effectue sur XP aussi (le fait de placer le curseur à une position précise ne fonctionne pas sur XP car le mode de recherche est différent).

Voilà si ça peut aider certains, tant mieux :)

Bonne journée à tous!

Mastho.


PS: MJ13, peux-tu me dire s'il y a des bouts inutiles dans mon code? C'est par rapport au fait que j'utilise plus les positions x & y (je pense à "UniversalSearchBand_Window" par exemple qui était utilisé dans ce que j'ai effacé). Merci! :)
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Recherche dans l'explorateur windows

Bonjour Mastho, David

Mastho :): merci pour ton retour.

David :): merci ausssi d'avoir fait le test sur Win XP.


Après chacun pourra prendre l'un ou l'autre en fonction de sa config. Avec 2 codes différents, il devra bien trouver son bonheur :).
 

Mastho

XLDnaute Nouveau
Re : Recherche dans l'explorateur windows

Bonjour à tous encore une fois,

J'ai rectifié la macro en enlevant toutes les lignes inutiles et en corrigeant le problème de "Verr. Num".
C'est la version finale que j'ai gardé :)
J'espère que cela pourra servir à d'autres autant que cela me sert!
Encore merci!! :)

Code:
Option Explicit
#If Win64 Then 'si version Excel 2010 ou 2013 et 64 bits
  Declare PtrSafe Sub ClientToScreen Lib "user32" _
  (ByVal hwnd As Long, lpPoint As POINT)
  
  Declare PtrSafe Function FindWindow Lib "user32" _
   Alias "FindWindowA" _
   (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
  
  Declare PtrSafe Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
  ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
  ByVal lpsz2 As String) As Long
     
  Declare PtrSafe Sub GetClientRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT)
  
  Declare PtrSafe Function GetWindowRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT) As Long
  
  Declare PtrSafe Sub keybd_event Lib "user32.dll" _
  (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

  Declare PtrSafe Sub mouse_event Lib "user32" _
  (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, _
  ByVal cButtons As Long, ByVal dwExtraInfo As Long)
                                        
  Declare PtrSafe Function SetCursorPos Lib "user32" _
  (ByVal x As Long, ByVal y As Long) As Long
  
  Declare PtrSafe 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
     
  Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  
  Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  
  Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
  
  Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
#Else
  Declare Sub ClientToScreen Lib "user32" _
  (ByVal hwnd As Long, lpPoint As POINT)
  
  Declare Function FindWindow Lib "user32" _
   Alias "FindWindowA" _
   (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
  
  Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
  ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
  ByVal lpsz2 As String) As Long
     
  Declare Sub GetClientRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT)
  
  Declare Function GetWindowRect Lib "user32" _
  (ByVal hwnd As Long, lpRect As RECT) As Long
  
  Declare Sub keybd_event Lib "user32.dll" _
  (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

  Declare Sub mouse_event Lib "user32" _
  (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, _
  ByVal cButtons As Long, ByVal dwExtraInfo As Long)
                                        
  Declare Function SetCursorPos Lib "user32" _
  (ByVal x As Long, ByVal y As Long) As Long
  
  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
     
  Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  
  Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  
  Declare Function EmptyClipboard Lib "user32" () As Long
  
  Declare Function CloseClipboard Lib "user32" () As Long
#End If

Const SW_NORMAL As Long = 1
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const KEYEVENTF_KEYUP = &H2
Const VK_CONTROL As Long = &H11
Const VK_C = 67
Const VK_V = 86

Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Type POINT
  x As Long
  y As Long
End Type



'cocher Microsoft Forms 2.0 object library

Sub Recherche_Explorateur_Windows()

Dim DataObj As New MSForms.DataObject
Dim Mon_texte As String
Dim RetVal As Long

ClearClipboard 'on vide le presse-papier

'on ouvre l'explorateur Windows
RetVal = ShellExecute(0, "open", "explorer.exe", "C:\Dossier1\Dossier2", 0, SW_NORMAL)
Sleep 1000

If RetVal = 2 Or RetVal = 3 Then
  MsgBox "Chemin ou fichier non trouvé"
  Exit Sub
End If

'on copie le texte de la cellule active dans le presse-papier
Mon_texte = ActiveCell.Text
DataObj.SetText Mon_texte
DataObj.PutInClipboard

Sleep 500

'on se place dans la fenêtre de saisie y pour coller le contenu du presse-papier
SendKeys String:="{F3}", Wait:=True
keybd_event VK_CONTROL, 0, 0, 0
keybd_event VK_V, 0, 0, 0
keybd_event VK_V, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0, 0, 0
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
Sleep 1000
SendKeys String:="{ENTER}", Wait:=True

With Application
              DoEvents
          Application.SendKeys ("{NUMLOCK}"), True
End With

End Sub



Sub ClearClipboard()

OpenClipboard (0&)
EmptyClipboard
CloseClipboard

End Sub


Bonne fin de journée à tous!

Mastho.
 

cedrebs

XLDnaute Nouveau
Bonjour,

Je déterre ce sujet qui correspond parfaitement à ce que je souhaite faire.
J'ai repris le code de Mastho mais j'ai un soucis lors de l’exécution de la macro :

Cela ouvre bien une fenêtre de l'explorateur Windows et lance la recherche dans le dossier mais le texte recherché ne correspond pas au texte de la cellule du tableur.
Cela affiche un caractère spécial (petit carré) comme s'il y avait un soucis de code ANSI...

Est-ce que quelqu'un saurait comment résoudre ce problème ?

Pour info, j'utilise Excel 2016 et Windows 10

Merci :)
 

Discussions similaires

Réponses
47
Affichages
2 K
Réponses
5
Affichages
2 K

Statistiques des forums

Discussions
314 644
Messages
2 111 529
Membres
111 189
dernier inscrit
Laurent.