Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

déplacer des fichiers

14 réponses
Avatar
mabouille
Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui contient
des sous-dossiers (nombreux) et des fichiers (beaucoup), qui sont des .xls
mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant quelques
jours en les travaillant sur plusieurs bécanes sucessives. J'ai donc créé un
dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de boulot
sur eux), je les ramène sur mon ordi et je les range dans "C:\Trésorier" en
les supprimant de la clé USB. (où ils seront remplacés plus tard par une
nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de Windows
Explorer, mais comme il y en a beaucoup je voudrais procéder par une macro
qui vide"EN COURS" de tous ses fichiers et les remettent à leur place dans
"C:\Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier "LesSous.xls"
récemment travaillé et le coller dans le dossier "C:\Trésorier\Banque" ? (en
écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une macro
Excel qui me liste sans problème dans une feuille Excel, la liste complète
des fichiers de "C\Trésorier" avec leur chemin d'accès complet, et idem pour
EN COURS évidemment. Mon seul problème (enfin je crois) est de couper coller
les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille

10 réponses

1 2
Avatar
Daniel.C
Bonjour.
Utilise l'instruction Name. Si tu as des problèmes pour l'adapter à ton
code, publie celui-ci.
Cordialement.
Daniel

Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui contient
des sous-dossiers (nombreux) et des fichiers (beaucoup), qui sont des .xls
mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant quelques
jours en les travaillant sur plusieurs bécanes sucessives. J'ai donc créé un
dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de boulot
sur eux), je les ramène sur mon ordi et je les range dans "C:Trésorier" en
les supprimant de la clé USB. (où ils seront remplacés plus tard par une
nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de Windows
Explorer, mais comme il y en a beaucoup je voudrais procéder par une macro
qui vide"EN COURS" de tous ses fichiers et les remettent à leur place dans
"C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier "LesSous.xls"
récemment travaillé et le coller dans le dossier "C:TrésorierBanque" ? (en
écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une macro
Excel qui me liste sans problème dans une feuille Excel, la liste complète
des fichiers de "CTrésorier" avec leur chemin d'accès complet, et idem pour
EN COURS évidemment. Mon seul problème (enfin je crois) est de couper coller
les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille
Avatar
michdenis
Bonjour,

La procédure ne prévoit qu'une clé d'installer au moment
de procéder.

La procédure suivante va recréer sur la clé le chemin indiqué
dans la procédure qui est le même que le répertoire à copier
"Chemin = "UsersDMDocumentstest1""
Si ce chemin existe déjà, elle ne touchera à rien. Elle fait seulement
ajouter les répertoires du chemin manquants.

Elle copiera tous les répertoires, sous-répertoires et fichiers du
répertoire "Test1" en écrasant si besoin sans rien demander.

À partir de cette procédure, il est facile de faire une routine
faisant l'inverse, de la clé au disque dur.

'-------------------------------------------
Sub test()
Dim LecteurSource As String, Prêt As Boolean
Dim LecteurDestination As String
Dim Chemin As String

'***********Variables à renseigner*********
LecteurSource = "c:"
Chemin = "UsersDMDocumentstest1"
'*******************************************

LecteurDestination = RemovableDisk(LecteurSource)
If LecteurDestination <> "" Then
Prêt = EstPret(LecteurDestination)
If Prêt = False Then
MsgBox "Le lecteur amovible n'est pas prêt."
Exit Sub
End If
Else
MsgBox "Aucun disque amovible détecté."
Exit Sub
End If

'Création du répertoire si nécessaire
Creer_Chemin LecteurDestination, LecteurDestination & Chemin

'Copie des fichiers vers la destination
Commande = Environ("comspec") & " /c Xcopy /S/E/Y " & _
LecteurSource & Chemin & " " & LecteurDestination & Chemin & ""

Shell Commande, 0

End Sub

'-------------------------------------------
Function RemovableDisk(MonLecteur As String)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & _
strComputer & "rootcimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each Objdisk In colDisks
'2 constante numérique pour disque dur "removable"
If Objdisk.DriveType = 2 Then
RemovableDisk = Objdisk.Name & ""
Exit Function
End If
Next
End Function

'-------------------------------------------
Function EstPret(Lecteur As String)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
For Each objdrive In colDrives
If Lecteur = objdrive & "" Then
If objdrive.IsReady = True Then
EstPret = objdrive.IsReady
End If
End If
Next
End Function
'-------------------------------------------
Sub Creer_Chemin(Racine, Chemin As String)
Dim Commande As String
'Crée le chemin indiqué si les répertoires ne
'sont pas présents. N'écrase rien !
ChDrive Racine
Commande = Environ("comspec") & " /c mkdir " & Chemin
Shell Commande, 0
End Sub
'-------------------------------------------





"mabouille" a écrit dans le message de groupe de
discussion : #
Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui contient
des sous-dossiers (nombreux) et des fichiers (beaucoup), qui sont des .xls
mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant quelques
jours en les travaillant sur plusieurs bécanes sucessives. J'ai donc créé un
dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de boulot
sur eux), je les ramène sur mon ordi et je les range dans "C:Trésorier" en
les supprimant de la clé USB. (où ils seront remplacés plus tard par une
nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de Windows
Explorer, mais comme il y en a beaucoup je voudrais procéder par une macro
qui vide"EN COURS" de tous ses fichiers et les remettent à leur place dans
"C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier "LesSous.xls"
récemment travaillé et le coller dans le dossier "C:TrésorierBanque" ? (en
écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une macro
Excel qui me liste sans problème dans une feuille Excel, la liste complète
des fichiers de "CTrésorier" avec leur chemin d'accès complet, et idem pour
EN COURS évidemment. Mon seul problème (enfin je crois) est de couper coller
les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille
Avatar
mabouille
Bonjour,
Je ne vois pas , est ce que tu peux me donner une piste, un début de code,
pour cette utilisation de Name ?
Merci
Cordialement
Mabouille

"Daniel.C" a écrit dans le message de
news:OEWxe$
Bonjour.
Utilise l'instruction Name. Si tu as des problèmes pour l'adapter à ton
code, publie celui-ci.
Cordialement.
Daniel

Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui
contient des sous-dossiers (nombreux) et des fichiers (beaucoup), qui
sont des .xls mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant quelques
jours en les travaillant sur plusieurs bécanes sucessives. J'ai donc créé
un dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de
boulot sur eux), je les ramène sur mon ordi et je les range dans
"C:Trésorier" en les supprimant de la clé USB. (où ils seront remplacés
plus tard par une nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de Windows
Explorer, mais comme il y en a beaucoup je voudrais procéder par une
macro qui vide"EN COURS" de tous ses fichiers et les remettent à leur
place dans "C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier
"LesSous.xls" récemment travaillé et le coller dans le dossier
"C:TrésorierBanque" ? (en écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une
macro Excel qui me liste sans problème dans une feuille Excel, la liste
complète des fichiers de "CTrésorier" avec leur chemin d'accès complet,
et idem pour EN COURS évidemment. Mon seul problème (enfin je crois) est
de couper coller les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille




Avatar
mabouille
Bonjour,
Ce code est pas mal au dessus de ma compétence, mais j'ai commencé dès
réception (merci pour ta rapidité) à travailler dessus, prudemment pour ne
pas écraser mes "vrais" fichiers!

Toutefois je sens vaguement que je ferais bien de simplifier ma question:

Soit une version actualisée de 3 fichiers Fich1 Fich2 Fich 3 dans le dossier
ENCOURS de la clé USB branchée sur le PC et affectée au lecteur P:
Chemins: P:ENCOURSFich1 P:ENCOURSFich2 P:ENCOURSFich3

Soit sur mon PC un dossier C:Trésorier avec les 2 sous dossiers
DossierA et DossierB
-DossierA contient une version "ancienne" de Fich1 et de Fich2,
Chemins : C:TrésorierDossierAFich1 et
C:TrésorierDossierAFich2
-DossierB contient une version ancienne de Fich3 (ce n'est pas pour
compliquer, c'est vraiment le cas type que j'ai)
Chemin : C:TrésorierDossierBFich3

Je cherche à faire une macro qui remplace dans C: les anciennes versions
des fichiers Fich1 Fich2 et Fich3 par les nouvelles versions de ces fichiers
situées dans la clé P: (et les enlève de la clé)
Voili voilà, est ce jouable ?
Cordialement,
Mabouille

"michdenis" a écrit dans le message de
news:
Bonjour,

La procédure ne prévoit qu'une clé d'installer au moment
de procéder.

La procédure suivante va recréer sur la clé le chemin indiqué
dans la procédure qui est le même que le répertoire à copier
"Chemin = "UsersDMDocumentstest1""
Si ce chemin existe déjà, elle ne touchera à rien. Elle fait seulement
ajouter les répertoires du chemin manquants.

Elle copiera tous les répertoires, sous-répertoires et fichiers du
répertoire "Test1" en écrasant si besoin sans rien demander.

À partir de cette procédure, il est facile de faire une routine
faisant l'inverse, de la clé au disque dur.

'-------------------------------------------
Sub test()
Dim LecteurSource As String, Prêt As Boolean
Dim LecteurDestination As String
Dim Chemin As String

'***********Variables à renseigner*********
LecteurSource = "c:"
Chemin = "UsersDMDocumentstest1"
'*******************************************

LecteurDestination = RemovableDisk(LecteurSource)
If LecteurDestination <> "" Then
Prêt = EstPret(LecteurDestination)
If Prêt = False Then
MsgBox "Le lecteur amovible n'est pas prêt."
Exit Sub
End If
Else
MsgBox "Aucun disque amovible détecté."
Exit Sub
End If

'Création du répertoire si nécessaire
Creer_Chemin LecteurDestination, LecteurDestination & Chemin

'Copie des fichiers vers la destination
Commande = Environ("comspec") & " /c Xcopy /S/E/Y " & _
LecteurSource & Chemin & " " & LecteurDestination & Chemin & ""

Shell Commande, 0

End Sub

'-------------------------------------------
Function RemovableDisk(MonLecteur As String)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & _
strComputer & "rootcimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each Objdisk In colDisks
'2 constante numérique pour disque dur "removable"
If Objdisk.DriveType = 2 Then
RemovableDisk = Objdisk.Name & ""
Exit Function
End If
Next
End Function

'-------------------------------------------
Function EstPret(Lecteur As String)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
For Each objdrive In colDrives
If Lecteur = objdrive & "" Then
If objdrive.IsReady = True Then
EstPret = objdrive.IsReady
End If
End If
Next
End Function
'-------------------------------------------
Sub Creer_Chemin(Racine, Chemin As String)
Dim Commande As String
'Crée le chemin indiqué si les répertoires ne
'sont pas présents. N'écrase rien !
ChDrive Racine
Commande = Environ("comspec") & " /c mkdir " & Chemin
Shell Commande, 0
End Sub
'-------------------------------------------





"mabouille" a écrit dans le message de
groupe de
discussion : #
Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui
contient
des sous-dossiers (nombreux) et des fichiers (beaucoup), qui sont des .xls
mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant quelques
jours en les travaillant sur plusieurs bécanes sucessives. J'ai donc créé
un
dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de boulot
sur eux), je les ramène sur mon ordi et je les range dans "C:Trésorier"
en
les supprimant de la clé USB. (où ils seront remplacés plus tard par une
nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de Windows
Explorer, mais comme il y en a beaucoup je voudrais procéder par une macro
qui vide"EN COURS" de tous ses fichiers et les remettent à leur place dans
"C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier "LesSous.xls"
récemment travaillé et le coller dans le dossier "C:TrésorierBanque" ?
(en
écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une macro
Excel qui me liste sans problème dans une feuille Excel, la liste complète
des fichiers de "CTrésorier" avec leur chemin d'accès complet, et idem
pour
EN COURS évidemment. Mon seul problème (enfin je crois) est de couper
coller
les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille

Avatar
Daniel.C
On Error Resume Next
FichierSource = "P:ENCOURSFich"
FichierCible = C:TrésorierDossierAFich1
Kill FichierCible
Name FichierSource as FichierCible
On Error Goto 0
De même pour les autres fichiers
Daniel

Bonjour,
Je ne vois pas , est ce que tu peux me donner une piste, un début de code,
pour cette utilisation de Name ?
Merci
Cordialement
Mabouille

"Daniel.C" a écrit dans le message de
news:OEWxe$
Bonjour.
Utilise l'instruction Name. Si tu as des problèmes pour l'adapter à ton
code, publie celui-ci.
Cordialement.
Daniel

Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui
contient des sous-dossiers (nombreux) et des fichiers (beaucoup), qui sont
des .xls mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant quelques
jours en les travaillant sur plusieurs bécanes sucessives. J'ai donc créé
un dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de boulot
sur eux), je les ramène sur mon ordi et je les range dans "C:Trésorier"
en les supprimant de la clé USB. (où ils seront remplacés plus tard par
une nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de Windows
Explorer, mais comme il y en a beaucoup je voudrais procéder par une macro
qui vide"EN COURS" de tous ses fichiers et les remettent à leur place dans
"C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier "LesSous.xls"
récemment travaillé et le coller dans le dossier "C:TrésorierBanque" ?
(en écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une macro
Excel qui me liste sans problème dans une feuille Excel, la liste complète
des fichiers de "CTrésorier" avec leur chemin d'accès complet, et idem
pour EN COURS évidemment. Mon seul problème (enfin je crois) est de couper
coller les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille




Avatar
mabouille
Merci, c'est élégant, simple, et...ça marche! J'ai juste rajouté un Kill
FichierSource après 'Name....' pour nettoyer la clé.
Je vais rentrer ensuite ce bout de code dans ma macro, en ajoutant peut être
des sécurité ici ou là)
Cordialement
Mabouille


"Daniel.C" a écrit dans le message de
news:
On Error Resume Next
FichierSource = "P:ENCOURSFich"
FichierCible = C:TrésorierDossierAFich1
Kill FichierCible
Name FichierSource as FichierCible
On Error Goto 0
De même pour les autres fichiers
Daniel

Bonjour,
Je ne vois pas , est ce que tu peux me donner une piste, un début de
code, pour cette utilisation de Name ?
Merci
Cordialement
Mabouille

"Daniel.C" a écrit dans le message de
news:OEWxe$
Bonjour.
Utilise l'instruction Name. Si tu as des problèmes pour l'adapter à ton
code, publie celui-ci.
Cordialement.
Daniel

Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui
contient des sous-dossiers (nombreux) et des fichiers (beaucoup), qui
sont des .xls mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant
quelques jours en les travaillant sur plusieurs bécanes sucessives.
J'ai donc créé un dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de
boulot sur eux), je les ramène sur mon ordi et je les range dans
"C:Trésorier" en les supprimant de la clé USB. (où ils seront
remplacés plus tard par une nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de
Windows Explorer, mais comme il y en a beaucoup je voudrais procéder
par une macro qui vide"EN COURS" de tous ses fichiers et les remettent
à leur place dans "C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier
"LesSous.xls" récemment travaillé et le coller dans le dossier
"C:TrésorierBanque" ? (en écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une
macro Excel qui me liste sans problème dans une feuille Excel, la liste
complète des fichiers de "CTrésorier" avec leur chemin d'accès
complet, et idem pour EN COURS évidemment. Mon seul problème (enfin je
crois) est de couper coller les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille










Avatar
michdenis
Essaie ceci :

'-------------------------------------
Sub test()
Dim LecteurSource As String, Prêt As Boolean
Dim RépertoireSource As String, Source As String
Dim Arr(), Elt As Variant, Destination As String
Dim Chemin As String, Arr1 As Variant, Elt1 As Variant
Dim X As Integer

'***********Variables à renseigner*********
'Liste des fichiers à copier
Arr = Array("Fich1", "Fich2", "Fich3")
'Chemin du répertoire où sont les fichiers sans le lecteur
RépertoireSource = "EnCours"
'Chaque élément du tableau Arr est copié dans
'le répertoire correspondant du tableau Arr1
Arr1 = Array("C:TrésorierDossierA", "C:TrésorierDossierA", "C:TrésorierDossierB")
'*******************************************

LecteurSource = RemovableDisk(LecteurSource)
If LecteurSource <> "" Then
Prêt = EstPret(LecteurSource)
If Prêt = False Then
MsgBox "Le lecteur amovible n'est pas prêt."
Exit Sub
End If
Else
MsgBox "Aucun disque amovible détecté."
Exit Sub
End If

For Each Elt In Arr
Source = LecteurSource & RépertoireSource & Elt
Destination = Arr1(X)
X = X + 1
'Copie le fichier vers la destination
Commande = Environ("comspec") & " /c Copy /Y " & _
Source & Chemin & " " & Destination & Chemin & ""
Shell Commande, 0
Next

End Sub

'Trouve la lettre du lecteur de ta clé
'-------------------------------------
Function RemovableDisk(MonLecteur As String)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & _
strComputer & "rootcimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each Objdisk In colDisks
'2 constante numérique pour disque dur "removable"
If Objdisk.DriveType = 2 Then
RemovableDisk = Objdisk.Name & ""
Exit Function
End If
Next
End Function


'Vérifie si ta clé est prête pour l'opération.
'-------------------------------------
Function EstPret(Lecteur As String)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
For Each objdrive In colDrives
If Lecteur = objdrive & "" Then
If objdrive.IsReady = True Then
EstPret = objdrive.IsReady
End If
End If
Next
End Function
'-------------------------------------
Avatar
michdenis
Un autre façon de procéder en utilisant des API de Windows

Tu exécutes la procédure Test en choisissant une des actions
suivantes : FO_MOVE ,FO_COPY , FO_DELETE, FO_RENAME
l'usage des WildCard est permis *.xls ou *.* ou "P*.xls"
Ce qui permet d'avoir une action respectivement sur :
A ) Tous les fichiers excel seulement "chemin*.xls"
B ) Tous les fichiers contenu dans le répertoire "chemin*.*"
C ) Tous les fichiers Excel dont le nom débute par la lettre P "cheminp*.*"
D ) On peut aussi utiliser le WidCard "?" qui remplace un caractère
dans le nom du fichier à l'endroit désigné
Exemple : "Fichier1.xls" on pourrait écrire : "CheminFichier?.xls" pour
obtenir tous les noms dont la racine est "fichier"+ un caractère .xls

'déclaration des variables, constantes et Api dans le haut d'un
'module standard :
Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

Const FO_MOVE = 1
Const FO_COPY = 2
Const FO_DELETE = 3
Const FO_RENAME = 4

Const FOF_SILENT = 4
Const FOF_NOCONFIRMATION = 10

Private Declare Function SHFileOperationA Lib "Shell32.dll" _
(lpFileOp As SHFILEOPSTRUCT) As Long

Private Function CopieDossier(Source As String, Dest As String, _
Optional Action As Byte, Optional Animation As Boolean) As Boolean
Dim OpStruct As SHFILEOPSTRUCT

With OpStruct
.wFunc = Action
.pFrom = Source
.pTo = Dest
'POUR MESSAGE AVANT D'ÉCRASER : 4 AU LIEU DE 10
.fFlags = 4
End With
CopieDossier = IIf(SHFileOperationA(OpStruct), False, True)
End Function

'---------------------------------
Sub Test()

Dim Source As String
Dim Dest As String

Source = "c:UsersDMDocumentsTest1test*.*"
Dest = "c:UsersDMDocumentsTest1"

If CopieDossier(Source, Dest, FO_COPY, True) Then
MsgBox "Opération réussie"
Else
MsgBox "Un problème fut rencontré."
End If
End Sub
'---------------------------------




"mabouille" a écrit dans le message de groupe de
discussion : #
Bonjour,
Ce code est pas mal au dessus de ma compétence, mais j'ai commencé dès
réception (merci pour ta rapidité) à travailler dessus, prudemment pour ne
pas écraser mes "vrais" fichiers!

Toutefois je sens vaguement que je ferais bien de simplifier ma question:

Soit une version actualisée de 3 fichiers Fich1 Fich2 Fich 3 dans le dossier
ENCOURS de la clé USB branchée sur le PC et affectée au lecteur P:
Chemins: P:ENCOURSFich1 P:ENCOURSFich2 P:ENCOURSFich3

Soit sur mon PC un dossier C:Trésorier avec les 2 sous dossiers
DossierA et DossierB
-DossierA contient une version "ancienne" de Fich1 et de Fich2,
Chemins : C:TrésorierDossierAFich1 et
C:TrésorierDossierAFich2
-DossierB contient une version ancienne de Fich3 (ce n'est pas pour
compliquer, c'est vraiment le cas type que j'ai)
Chemin : C:TrésorierDossierBFich3

Je cherche à faire une macro qui remplace dans C: les anciennes versions
des fichiers Fich1 Fich2 et Fich3 par les nouvelles versions de ces fichiers
situées dans la clé P: (et les enlève de la clé)
Voili voilà, est ce jouable ?
Cordialement,
Mabouille

"michdenis" a écrit dans le message de
news:
Bonjour,

La procédure ne prévoit qu'une clé d'installer au moment
de procéder.

La procédure suivante va recréer sur la clé le chemin indiqué
dans la procédure qui est le même que le répertoire à copier
"Chemin = "UsersDMDocumentstest1""
Si ce chemin existe déjà, elle ne touchera à rien. Elle fait seulement
ajouter les répertoires du chemin manquants.

Elle copiera tous les répertoires, sous-répertoires et fichiers du
répertoire "Test1" en écrasant si besoin sans rien demander.

À partir de cette procédure, il est facile de faire une routine
faisant l'inverse, de la clé au disque dur.

'-------------------------------------------
Sub test()
Dim LecteurSource As String, Prêt As Boolean
Dim LecteurDestination As String
Dim Chemin As String

'***********Variables à renseigner*********
LecteurSource = "c:"
Chemin = "UsersDMDocumentstest1"
'*******************************************

LecteurDestination = RemovableDisk(LecteurSource)
If LecteurDestination <> "" Then
Prêt = EstPret(LecteurDestination)
If Prêt = False Then
MsgBox "Le lecteur amovible n'est pas prêt."
Exit Sub
End If
Else
MsgBox "Aucun disque amovible détecté."
Exit Sub
End If

'Création du répertoire si nécessaire
Creer_Chemin LecteurDestination, LecteurDestination & Chemin

'Copie des fichiers vers la destination
Commande = Environ("comspec") & " /c Xcopy /S/E/Y " & _
LecteurSource & Chemin & " " & LecteurDestination & Chemin & ""

Shell Commande, 0

End Sub

'-------------------------------------------
Function RemovableDisk(MonLecteur As String)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & _
strComputer & "rootcimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each Objdisk In colDisks
'2 constante numérique pour disque dur "removable"
If Objdisk.DriveType = 2 Then
RemovableDisk = Objdisk.Name & ""
Exit Function
End If
Next
End Function

'-------------------------------------------
Function EstPret(Lecteur As String)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
For Each objdrive In colDrives
If Lecteur = objdrive & "" Then
If objdrive.IsReady = True Then
EstPret = objdrive.IsReady
End If
End If
Next
End Function
'-------------------------------------------
Sub Creer_Chemin(Racine, Chemin As String)
Dim Commande As String
'Crée le chemin indiqué si les répertoires ne
'sont pas présents. N'écrase rien !
ChDrive Racine
Commande = Environ("comspec") & " /c mkdir " & Chemin
Shell Commande, 0
End Sub
'-------------------------------------------





"mabouille" a écrit dans le message de
groupe de
discussion : #
Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui
contient
des sous-dossiers (nombreux) et des fichiers (beaucoup), qui sont des .xls
mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant quelques
jours en les travaillant sur plusieurs bécanes sucessives. J'ai donc créé
un
dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de boulot
sur eux), je les ramène sur mon ordi et je les range dans "C:Trésorier"
en
les supprimant de la clé USB. (où ils seront remplacés plus tard par une
nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de Windows
Explorer, mais comme il y en a beaucoup je voudrais procéder par une macro
qui vide"EN COURS" de tous ses fichiers et les remettent à leur place dans
"C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier "LesSous.xls"
récemment travaillé et le coller dans le dossier "C:TrésorierBanque" ?
(en
écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une macro
Excel qui me liste sans problème dans une feuille Excel, la liste complète
des fichiers de "CTrésorier" avec leur chemin d'accès complet, et idem
pour
EN COURS évidemment. Mon seul problème (enfin je crois) est de couper
coller
les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille

Avatar
mabouille
Bonjour,
Youpee , la macro est maintenant complète et marche totalement : elle fait
la liste des fichiers de la clé (EN COURS) et celle des dossiers de
C:Trésorier (sous dossiers compris même à plusieurs niveaux, solution
trouvée sur internet ) avec les noms des fichiers déja classés. Puis elle
utilise ces listes pour établir si un fichier de En COURS est une nouvelle
version d'un fichier déja classé la macro, et dans ce cas elle le classe à
sa place (=annule et remplace) avec Rename (merci à toi).
A la fin je n'ai plus dans EN COURS que les fichiers vraiment nouveaux, ceux
là je les classe à la main, faut quand même bosser un peu que diable !!! Et
je n'aurai pas à le refaire si je me ressert de ces fichiers une autre fois.
Le rajout du Kill FichierSource était inutile.
Merci à toi et à tous ceux qui aident.
Cordialement
Pierre

"mabouille" a écrit dans le message de
news:
Merci, c'est élégant, simple, et...ça marche! J'ai juste rajouté un Kill
FichierSource après 'Name....' pour nettoyer la clé.
Je vais rentrer ensuite ce bout de code dans ma macro, en ajoutant peut
être des sécurité ici ou là)
Cordialement
Mabouille


"Daniel.C" a écrit dans le message de
news:
On Error Resume Next
FichierSource = "P:ENCOURSFich"
FichierCible = C:TrésorierDossierAFich1
Kill FichierCible
Name FichierSource as FichierCible
On Error Goto 0
De même pour les autres fichiers
Daniel

Bonjour,
Je ne vois pas , est ce que tu peux me donner une piste, un début de
code, pour cette utilisation de Name ?
Merci
Cordialement
Mabouille

"Daniel.C" a écrit dans le message de
news:OEWxe$
Bonjour.
Utilise l'instruction Name. Si tu as des problèmes pour l'adapter à ton
code, publie celui-ci.
Cordialement.
Daniel

Bonjour le monde,
Sous Vista, Excel 2003, j'ai sur mon PC un dossier "Trésorier" qui
contient des sous-dossiers (nombreux) et des fichiers (beaucoup), qui
sont des .xls mais pas seulement (.doc, .jpg, .txt aussi)
J'ai souvent besoin de trimballer tels ou tels fichiers pendant
quelques jours en les travaillant sur plusieurs bécanes sucessives.
J'ai donc créé un dossier "EN COURS" sur une clé USB.
Quand les fichiers sont "stabilisés" (fin provisoire d'une phase de
boulot sur eux), je les ramène sur mon ordi et je les range dans
"C:Trésorier" en les supprimant de la clé USB. (où ils seront
remplacés plus tard par une nouvelle vague de fichiers d'actualité).

Normalement je fais ça "à la main" en utilisant couper coller de
Windows Explorer, mais comme il y en a beaucoup je voudrais procéder
par une macro qui vide"EN COURS" de tous ses fichiers et les remettent
à leur place dans "C:Trésorier".

Quel code peut couper dans le dossier "EN COURS" le fichier
"LesSous.xls" récemment travaillé et le coller dans le dossier
"C:TrésorierBanque" ? (en écrasant bien sûr le fichier antérieur)
Précision : grâce à ceux qui aident ici (merci FdeCourt) j'ai eu une
macro Excel qui me liste sans problème dans une feuille Excel, la
liste complète des fichiers de "CTrésorier" avec leur chemin d'accès
complet, et idem pour EN COURS évidemment. Mon seul problème (enfin je
crois) est de couper coller les fichiers nomades.

Et est ce que ça peut marcher avec les .doc, .jpg, .txt ?

J'espère que j'ai bien expliqué ?
Cordialement, Mabouille













Avatar
michdenis
Y a-t-il une raison qui t'empêche de publier ta procédure finale ?
Peut-être cela donnerait des idées à d'autres qui ont un problème
semblable au tien !
1 2