Copie de fichier avec sélection destination [Résolu]

Signaler
Messages postés
28
Date d'inscription
vendredi 27 mars 2009
Statut
Membre
Dernière intervention
9 juillet 2009
-
Messages postés
28
Date d'inscription
vendredi 27 mars 2009
Statut
Membre
Dernière intervention
9 juillet 2009
-
Bonjour!

J'aimerai mettre au point une petite manip qui me permettrait de copier un fichier dont le nom et le chemin d'origine est défini, mais dont le chemin de destination est à sélectionner manuellement (avec explorateur windows par exemple).
J'ai rédigé ça mais je n'arrive pas à demander au programme de me laisser sélectionner la destination.

Sub copiefilm()

'Raccourci : "ctrl + e"

Dim x, Source, Destination
x = ActiveCell.Value
Source = "F:\Mes Vidéos" & x & ".avi"
Destination = "K:" & x & ".avi"

FileCopy Source, Destination

'Shell "cmd /c start explorer.exe /n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

End Sub

J'ai ajouté en vert la ligne que je pourrai utiliser pour ouvrir l'explorateur afin de sélectionner la destination.
Merci du coup de pouce!

7 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Colle dans un module :
'Based on http://www.developer.com/net/vb/article.php/1541831

Option Explicit

Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260

Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long

Private Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type

Public Function BrowseForFolder(ByVal hWnd As Long, ByVal szTitle As String, szBuffer As String) As Boolean
'Returns FALSE if OK, otherwise TRUE.
'Retourne FALSE si OK, sinon TRUE.
Dim lpIDList As Long
Dim tBrowseInfo As BrowseInfo
With tBrowseInfo
 .hWndOwner = hWnd
 .lpszTitle = lstrcat(szTitle, "")
 .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With
lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
 szBuffer = Space(MAX_PATH)
 SHGetPathFromIDList lpIDList, szBuffer
 szBuffer = Left(szBuffer, InStr(szBuffer, vbNullChar) - 1)
 BrowseForFolder = False
 Else
  BrowseForFolder = True
End If
End Function
, ----
[../code.aspx?ID=41455 Syntax color by Renfield]

Pour appeler : hWnd c'est le handle de la fenêtre, szTitle c'est le titre et szBuffer c'est le chemin.
La fonction retourne FALSE si OK, sinon TRUE.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Sub copiefilm()
'Raccourci : "ctrl + e"

Dim fn As String, Source As String, Destination As String
fn = ActiveCell.Value & ".avi"
Source = "F:\Mes Vidéos\" & fn

If mod_BrowseForFolder.BrowseForFolder(0, "", Destination) Then
 MsgBox "Erreur lors de la sélection du répertoire.", vbExclamation, "Erreur"
 Exit Sub
End If
Destination = Destination & fn

FileCopy Source, Destination

'Shell "cmd /c start explorer.exe /n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

End Sub
,

----

Syntax color by Renfield
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Soit il faut nommer le module "mod_BrowseForFolder", soit il faut remplacer "mod_BrowseForFolder" par le nom du module où se trouve le code de mon 1er message.
Messages postés
1
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
28 mars 2009

explique mieux je comprend pas
Messages postés
28
Date d'inscription
vendredi 27 mars 2009
Statut
Membre
Dernière intervention
9 juillet 2009

Tout d'abord merci de vous intéresser à mon cas.

Mon but est de copier un fichier depuis une source fixe ("F:\Mes Vidéos" & x & ".avi") vers un dossier de mon choix que je sélectionnerai depuis l'explorateur windows.
Le problème est que le système FileCopy m'impose une destination fixe.
J'ai cherché également un moyen de faire seulement la copie (type ctrl + c), sélectionner mon répertoire depuis explorateur et enfin coller, tout ça par le VBA.
J'espère avoir été plus clair.
Messages postés
28
Date d'inscription
vendredi 27 mars 2009
Statut
Membre
Dernière intervention
9 juillet 2009

J'ai copié le contenu du premier message dans un module et j'ai modifié celui qui existait par celui que vous avez donné dans un deuxième temps mais l'application plante et me demande un objet pour la ligne If mod_BrowseForFolder.BrowseForFolder(0, "", Destination) Then.
Honnêtement j'ai jetté un oeil mais ça devient trop compliqué pour moi alors je requiert encore votre aide.
Messages postés
28
Date d'inscription
vendredi 27 mars 2009
Statut
Membre
Dernière intervention
9 juillet 2009

Désolé de répondre avec autant de retard mais je n'avais pas encore eu l'occasion de tester tout cela. Donc merci pour l'info, je vais maintenant me débrouiller avec ça.