Sauvegarde sur disque dur exterieur

Résolu
Bonjour,

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

14 réponses

  1. 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é.

    ;)
    0
    1. 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.
      0
      1. 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:
        0
    2. 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
      0
      1. 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+
        0
        1. 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
          0
          1. 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.
            0
            1. 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
              0
              1. 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+
                0
            2. Bonjour Yoda,
              Je viens de faire l'essai de copier coller sur le disque H,sans problème

              A+
              0
              1. 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
                0
            3. 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.
              0
              1. 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.
                0
            4. la commande copy...me donne 1 fichier copié

              A+
              0
              1. 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.
                0
            5. 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+
              0
              1. C'est à n'y rien comprendre. je cherche un autre moyen.

                A+
                0
              2. 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
                0
            6. 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+
              0
              1. 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
                0
            7. 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+
              0
              1. 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+
                0
            8. Yoda

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

              Discussions similaires

              disque dur et bbox bouygues

              1 réponse