sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDernière intervention 9 juillet 2009
-
27 mars 2009 à 23:22
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDerniè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"
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.
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 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
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 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.
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDerniè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.
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDerniè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.
sfab41
Messages postés28Date d'inscriptionvendredi 27 mars 2009StatutMembreDerniè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.