Sauvegarde sur disque dur exterieur

[Résolu/Fermé]
Signaler
-
 acha -
Bonjour,

En VB6.3 comment ecrire une procedure pour sauvegarder un fichier sur disque dur exterieur et faire la restauration.
Merci

14 réponses

Bonjour,

Dans ton précédent post du 8 mai, tu disais que tu avait fait, en VB6, une sauvegarde sur disquette et que tu cherchais comment faire la même chose sur CD.

Sur CD c'est pas possible parce qu'un CD est en lecture seule.

Mais sur un DD externe, c'est comme sur une disquette, sauf que la disquette (floppy) est toujours associée à l'unité A: et que le DD peut être associé à une unité disponible allant de D: à Z:

Dans ton programme VB6, il n'y a qu'une lettre à changer.
Assures toi que ton DD soit toujours monté sur la même unité (par exemple toujours sur S:) et le tour est joué.

;)
Yoda, merci pour ta réponse du 9 mai 2012.
Mes sauvegardes sur disquettes font appel,entre autre, à des fichiers .bat qui lancent un backup sur A:
Je ne voie pas comment en vb6 faire la sélection sur le disque H (extérieur) et
écrire le fichier sélectionné.
Peux-tu m'aider pour l'écriture de ce programme.
Merci.
Bonjour,

Est-ce qu'on pourrait voir à quoi ressemblent ces fichiers .bat?
Je pense qu'il suffirait de modifier quelques lignes de commandes. Par exemple
copy *.* a:
deviendrait
copy *.* h:
je recopie le fichier c:\SauveDep.bat
cd c:\
cd dos5
cls
echo off
cls
echo. Effacement disquette
cd c:\
del a:\backup.*
cd c:\
color 2c
verify on
cls
cd dos5
backup.com d:\DépMalAs\DépAnAct.xls a:
cls

Le dos5 est le seul à avoir la commande backup.com permettant de sauver
sur plusieurs disquettes si le fichier est >1 400 000 octets

Merci pour ton aide
Bonjour,

Pour une sauveguarde sur disque dur externe, on n'aura pas de problème de place, alors pas la peine d'utiliser Backup.com, un simple copy suffira.

Assures-toi quand même de temps en temps de le DD externe n'est pas plein.

De plus, le DD externe pourra servir à stocker d'autres documents que ton fichier DépAnAct.xls. Alors tu créeras un dossier H:\Backup qui sera utilisé pour ta sauvegarde. Du coup, voilà à quoi ressemblerait le fichier c:\SauveDep.bat

@echo off
cls
if exist H:\Backup goto CONTINUE 
echo. Le dossier H:\Backup n'existe pas
echo. Sauvegarde annulee
goto FIN

:CONTINUE
echo. Effacement de H:\Backup 
del H:\Backup\DépAnAct.xls
color 2c 
verify on 
copy d:\DépMalAs\DépAnAct.xls H:\Backup\ 
echo. Sauvegarde terminee

:FIN
pause
cls 


A+
yoda, je t'envoie une macro que je ne réussi pas à faire fonctionner.
peux-tu regarder avec cette macro la sauvegarde sur disque serait résolue.
je ne réussi pas à faire fonctionner le fichier Bat

Sub CopieClasseurXPMimi

'enregistre le classeur
Application.StatusBar = Space(15) & "ENREGISTREMENT CLASSEUR EN COURS"
Application.EnableEvents = False
ActiveWorbook.Save
Application.EnableEvents = True
LigneDébut:
MsgBox "Veuillez mettre un disque",vbOKOnly + vbExclamation,

On Error Resume Next
ChDir "H:\"
If Err.Number <> 0 Then
MsgBox "Pas de disque" , vbOKOnly
Goto LigneDébut
ElseIf Err.Number = 0 Then
MonFichier = Dir("h:\*.*)
End If

'sauve sur disque extérieur H
SaveCopyAs "d:\DépMalAs\DépMimi.xls"
FileCopy "d:\DépMalAs\DépMimi.xls, "h:\DépMimi.xls"

Call Auto_Close
ActiveSheet.Protect
Application.Quit
End Sub
Bonjour,

Essaies avec ce code, dis moi si ça va.

Sub CopieClasseurXPMimi() 

'enregistre le classeur 
Application.StatusBar = Space(15) & "ENREGISTREMENT CLASSEUR EN COURS" 
Application.EnableEvents = False 
ActiveWorbook.Save 
Application.EnableEvents = True 


'sauve sur disque extérieur H 
DEBUT: 
Rep = MsgBox("Veuillez monter le disque sur le lecteur H:", vbOKCancel + vbExclamation) 
If Rep = vbOK Then 
   On Error GoTo ERR1 
   FileCopy "d:\DépMalAs\DépMimi.xls", "h:\DépMimi.xls" 
   On Error GoTo 0 
   MsgBox "Sauvegarde effectuée avec succès" 
Else 
    MsgBox "Sauvegarde annulée" 
End If 

Call Auto_Close 
ActiveSheet.Protect 
Application.Quit 
Exit Sub 

ERR1: 
MsgBox "Erreur d'écriture sur le lecteur H:", vbCritical 
Resume DEBUT 

End Sub


Edit: j'ai supprimé SaveCopyAs "d:\DépMalAs\DépMimi.xls"
je ne sais pas pourquoi tu as mis cette ligne, au besoin rajoutes la.
Bonjour Yoda,

Je viens d'écrire le code reçu.

fonctionne jusqu'à "veuillez monter le disque sur le lecteur H:"
se termine avec le message"Erreur d'écriture sur le lecteur H:"

si je supprime On Error GoTo ERR1
j'ai le message Erreur 70 Permission refusée
Bonjour acha

Verifie que tu as bien un disque sur le lecteur H: (avec l'explorateur de fichiers windows)
Si oui, fais un copier coller de n'importe quel fichier de ton disque D: vers le disque H: pour voir si la copie se passe bien.

A+
Bonjour Yoda,
Je viens de faire l'essai de copier coller sur le disque H,sans problème

A+
Bonjour,

J'ai fait le test chez moi, la macro marche bien.
Vérifies le nom complet de ton fichier d:\DépMalAs\DépMimi.xls

Par contre regarde aussi si le fichier existe déjà sur le DD externe (lecteur H:), s'il est protéjé en écriture. (Clic droit sur le fichier -> Propriétés -> décocher lecture seule.)
Si c'est le cas tu ne pourras pas le remplacer par la dernière version.

Essaies cette procédure, j'ai enlevé ce qui n'est pas utile, pour éviter de quitter excel.

Sub TestCopieClasseurXPMimi() 
'sauve sur disque extérieur H 
DEBUT: 
Rep = MsgBox("Veuillez monter le disque sur le lecteur H:", vbOKCancel + vbExclamation) 
If Rep = vbOK Then 
   On Error GoTo ERR1 
   FileCopy "d:\DépMalAs\DépMimi.xls", "h:\DépMimi.xls" 
   On Error GoTo 0 
   MsgBox "Sauvegarde effectuée avec succès" 
Else 
    MsgBox "Sauvegarde annulée" 
End If 
Exit Sub 

ERR1: 
MsgBox "Erreur d'écriture sur le lecteur H:", vbCritical 
Resume DEBUT 

End Sub
Yoda, je suis désolé mais lorsque je lance la macro j'ai " Veuillez monter le disque sur le lecteur H:"et lorsque je clic sur OK j'ai toujours "Erreur d'écriture sur le lecteur H:"
Je viens de mettre un autre disque dur de 350go, idem.
Mes 2 disques dur sont des disques normaux, mais pas multimédia.Ils sont branchés en USB.
Le visual basic est celui de Office 2003.
Fais cette manip

Menu démarrer -> Executer...
dans la fenêtre tapes cmd puis OK

la fenêtre de commande DOS doit s'ouvrir

tapes cette commande:
copy d:\DépMalAs\DépMimi.xls h:\DépMimi.xls

normalement tu dois voir: 1 fichier copié
Si c'est pas le cas c'est que:
1) le fichier d:\DépMalAs\DépMimi.xls n'existe pas
2) le lecteur H: n'existe pas ou en lecture seule (lecteur CD)
3) le lecteur H: est plein
4) dis-moi l'erreur retournée par la commande.
la commande copy...me donne 1 fichier copié

A+
Alors ça doit marcher avec la macro parce que c'est exactement pareil.

Mets toi dans les même conditions. Fait d'abord le test avec la commande DOS
copy d:\DépMalAs\DépMimi.xls h:\DépMimi.xls
comme indiqué plus haut.
Si pas de problème, fais le test avec cette macro toute simple.
Sub test()
   FileCopy "d:\DépMalAs\DépMimi.xls", "h:\DépMimi.xls"
   Msgbox "Fin de Procédure"
End Sub


Exécute la macro. Si ça c'est bien passé tu auras seulement le message "Fin de Procédure" qui prouve qu'il n'y a pas eu d'erreur.

Sinon tu aurras un message d'erreur.

C'est important de faire les test dans les même conditions, avec le même DD externe, sans le débrancher puis rebrancher.
Yoda, l'exécution de la macro donne : erreur76 chemin accès introuvable.

J'ai fait un fichier bat avec la commande copy d:\DépMalAs\DépMimi.xls, h:\DépMimi.xls
Je lance cette ligne en VB et la sauvegarde est effectuée sans problème.

A+
C'est à n'y rien comprendre. je cherche un autre moyen.

A+
Je crois avoir compris en tatonnant. La commande FileCopy ne marche pas si le fichier source est ouvert. Alors on va utiliser la commande Shell qui permet de lancer une commande DOS.

Voilà la procedure et dis moi si ça marche.

Sub CopieClasseurXPMimi()

'enregistre le classeur
Application.StatusBar = Space(15) & "ENREGISTREMENT CLASSEUR EN COURS"
Application.EnableEvents = False
ActiveWorbook.Save
Application.EnableEvents = True

'sauve sur disque extérieur H
DEBUT:
Rep = MsgBox("Sauvegarde du Fichier" & vbCrLf _
             & "Veuillez monter le disque sur le lecteur H:", vbOKCancel + vbExclamation)
If Rep = vbOK Then
   On Error GoTo ERR1
   'FileCopy "d:\DépMalAs\DépMimi.xls", "h:\DépMimi.xls"
   Shell ("cmd /c copy d:\DépMalAs\DépMimi.xls h:\DépMimi.xls")
   On Error GoTo 0
   MsgBox "Sauvegarde effectuée avec succès"
Else
    MsgBox "Sauvegarde annulée"
End If

Call Auto_Close
ActiveSheet.Protect
Application.Quit
Exit Sub

ERR1:
MsgBox "Erreur d'écriture sur le lecteur H:", vbCritical
Resume DEBUT

End Sub
Bonjour Yoda,

La procedure donne aucune erreur, sauvegarde effectuée avec succès, mais
lorsque j'ouvre le disque H :je n'ai pas d'écriture.

A+
GRRR...C'est une malédiction!

Je nabandonne pas, nouvel essai. J'ai rajouté un test d'accès au lecteur H:\, si celui-ci n'est pas valide, ça provoquera une erreur. Si c'est le cas vérifie que le disque est bien branché sur la lettre H:
La seule partie que tu peux éventuellement adapter sont les noms des fichiers Orig (origine) et Dest (destination). Dis moi si ça marche .

Sub CopieClasseurXPMimi()

'enregistre le classeur
Application.StatusBar = Space(15) & "ENREGISTREMENT CLASSEUR EN COURS"
Application.EnableEvents = False
ActiveWorbook.Save
Application.EnableEvents = True

'sauve sur disque extérieur H
DEBUT:
Rep = MsgBox("Sauvegarde du Fichier" & vbCrLf _
             & "Veuillez monter le disque sur le lecteur H:", vbOKCancel + vbExclamation)
If Rep = vbOK Then
   On Error GoTo ERR1
   
   'test si le lecteur H:\ est prêt
   ChDir ("H:\")
   'revenir au point de départ
   ChDir (ActiveWorkbook.Path)
   
   'Nom des fichiers origine et destination
   Orig = "D:\DépMalAs\DépMimi.xls"
   Dest = "H:\DépMimi.xls"
   
   'ne pas modifier ces 2 lignes
   commandeDOS = "cmd /c copy " & Chr(34) & Orig & Chr(34) & " " & Chr(34) & Dest & Chr(34)
   Shell (commandeDOS)
   
   On Error GoTo 0
   MsgBox "Sauvegarde effectuée avec succès"
Else
    MsgBox "Sauvegarde annulée"
End If

Call Auto_Close
ActiveSheet.Protect
Application.Quit
Exit Sub

ERR1:
MsgBox "Erreur: le lecteur H:\ n'est pas prêt", vbCritical
Resume DEBUT

End Sub
Bravo Yoda
La macro fonctionne après suppression de:On Error GoTo ERR1 et
ChDir (ActiveWorkbook.Path)

Maitenant est-il possible en changeant de jour de ne pas écraser le fichier
existant.
Merci

A+
Enfin!!

La ligne ChDir (ActiveWorkbook.Path) tu peux l'enlever.
Mais n'enlève pas la ligne On Error GoTo ERR1, sinon tu ne sauras pas si le disque H: est prêt, et comme la commande Shell ne retourne pas d'erreur, ça passera inaperçu.

En effet, quand tu enlève un dique dur exterieur après utilisation, puis tu le rebranche à un autre moment, il n'est pas sur que Windows lui attritue la même lettre que la fois précédente. Encore plus vrai si c'est un deuxième disque exterieur. Comme la macro est faite pour une connexion au lecteur H: , si la lettre n'est plus la même, pas de suavegarde.
Alors il vaut nieux être au courant.
Moi je mettrais les sauvegardes dans un dossier spécial, et non directement sur la racine comme tu le fait.

Sinon pour ne pas écraser le fichier existant, il faut lui changer de nom en lui ajoutant la date et l'heure automatiquement.
Remplace le ligne Dest = "H:\DépMimi.xls" par

   Dest = "H:\DépMimi.xls_" & Format(Date, "yyyy-mm-dd") & "_" & Format(Time, "hh\Hmm")


Et remets On Error GoTo ERR1.

A+
Yoda

la macro fonctionne parfaitement, tout est ok
Merci de ta gentillesse pour le temps que tu m'as consacré.