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

sfab41 28 Messages postés vendredi 27 mars 2009Date d'inscription 9 juillet 2009 Dernière intervention - 27 mars 2009 à 23:22 - Dernière réponse : sfab41 28 Messages postés vendredi 27 mars 2009Date d'inscription 9 juillet 2009 Dernière intervention
- 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!
Afficher la suite 

7 réponses

Répondre au sujet
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 28 mars 2009 à 13:26
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_ghuysmans99
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 28 mars 2009 à 13:40
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_ghuysmans99
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 29 mars 2009 à 01:52
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_ghuysmans99
skyzer 1 Messages postés jeudi 7 janvier 2010Date d'inscription 28 mars 2009 Dernière intervention - 28 mars 2009 à 00:30
0
Utile
explique mieux je comprend pas
Commenter la réponse de skyzer
sfab41 28 Messages postés vendredi 27 mars 2009Date d'inscription 9 juillet 2009 Dernière intervention - 28 mars 2009 à 01:40
0
Utile
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.
Commenter la réponse de sfab41
sfab41 28 Messages postés vendredi 27 mars 2009Date d'inscription 9 juillet 2009 Dernière intervention - 29 mars 2009 à 01:16
0
Utile
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.
Commenter la réponse de sfab41
sfab41 28 Messages postés vendredi 27 mars 2009Date d'inscription 9 juillet 2009 Dernière intervention - 19 avril 2009 à 20:01
0
Utile
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.
Commenter la réponse de sfab41

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.