Copie de fichier avec sélection destination

Résolu
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009 - 27 mars 2009 à 23:22
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009 - 19 avril 2009 à 20:01
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

cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 mars 2009 à 13:26
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.
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
28 mars 2009 à 13:40
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
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
29 mars 2009 à 01:52
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.
3
skyzer Messages postés 1 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 28 mars 2009
28 mars 2009 à 00:30
explique mieux je comprend pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
28 mars 2009 à 01:40
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.
0
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
29 mars 2009 à 01:16
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.
0
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
19 avril 2009 à 20:01
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.
0
Rejoignez-nous