IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Sauvegarde dans un dossier


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut Sauvegarde dans un dossier
    Hello la communauté.

    Tout d'abord meilleurs voeux pour cette nouvelle année.
    Quelle vous apporte ainsi qu'a vos proche et amies(s), surtout la santé.

    Un contributeur (Que je remercie grandement) m'a fait ce code pour faire une sauvegarde quand je ferme mon application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub BackUp(sDbData As String)
        Dim sDbBackup As String
        sDbBackup = Replace(sDbData, ".accdb", Format(Now, "_yyyy-mm-dd_hh\hnn") & ".accdb")
        On Error Resume Next
        DBEngine.CompactDatabase sDbData, sDbBackup     '--- sauve et compacte
        If Err.Number = 0 Then
            MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbBackup, , "Pour info"
        Else
            MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée.", , "Pour info."
        End If
    End Sub
    je souhaiterai que ce fichier de sauvegarde, se sauvegarde dans un dossier défini suivant l'année en cours, et si ce dossier n'est pas créer que cela le cré.

    Je vous remercie par avance.

    Cordialement.

    Passez une belle et bonne journée.

    Le Lighteux

  2. #2
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Hello la communauté

    J'ai tenté ceci, car le code est dépendant de cette procédure en public, lol.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub BackUp(sDbData As String)
        Dim sDbBackup As String
        sDbBackup = Replace(sDbData, ".accdb", Format(Now, "_yyyy-mm-dd_hh\hnn") & ".accdb")
        On Error Resume Next
        DBEngine.CompactDatabase sDbData, sDbBackup     '--- sauve et compacte
        If Err.Number = 0 Then
            MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbBackup, , "Pour info"
        Else
            MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée.", , "Pour info."
        End If
    End Sub
    le code du précédant message modifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub Form_Unload(Cancel As Integer)
        Dim currentYear As String
        Dim folderPath As String
        Dim folderPath2 As String
        currentYear = Format(Now, "yyyy")
     
        ' Je rempli la variable pour la création du dossier
        folderPath2 = CurrentProject.Path & "\" & "Sauvegardes Data" & "\" & currentYear & "\"
     
        'Je test si le dossier de l'année en cours éxiste, sinon je le crée
        If Dir(folderPath2, vbDirectory) = "" Then
            MkDir folderPath2
        End If
     
        If MsgBox("Voulez-vous vraiment quitter cette application ?", _
              vbYesNo + vbDefaultButton2, " A confirmer") = vbNo Then
            Cancel = True
        Else
            If MsgBox("Voulez-vous enregistrer une copie de sauvegarde ?", _
                  vbYesNo + vbDefaultButton1, " A confirmer") = vbYes Then
                BackUp Me.AdresseData & "\" & "Sauvegardes Data" & "\" & currentYear ' & "\"
            End If
        End If
    End Sub
    cela test bien si le dossier de l'année en cours est présent et sinon il cela le crée.

    Sauf que cela ne veut pas m'enregistrer le fichier

    Message : "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée."

    Je pense donc a un soucis de destination.

    Une idée?

    Merci beaucoup

    Passez une belle et bonne journée.

    Le Lighteux

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 855
    Points : 14 966
    Points
    14 966
    Par défaut
    bonjour,
    pour savoir ce qui ne fonctionne pas dans le code, il faudrait afficher l'erreur réelle et son libellé plutôt qu'un message personnalisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Err.Number = 0 Then
            MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbBackup, , "Pour info"
        Else
            Msgbox "Erreur n° " & Err.Number  & ": " & Err.Description
            'MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée.", , "Pour info."
        End If
    il faut éviter aussi l'instruction On Error Resume Next qui ignore l'erreur sans la signaler et continue le code jusqu'à la fin

  4. #4
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Hello

    Merci pour la réponse.

    En faite il n’y a pas d’alerte d’erreur VBA.

    J’ai ce message car cela ne c’est pas enregistré dans le dossier.

    J’ai regardé un peu les variables de destination pour le fichier, mais je n’arrive à avoir leur contenu en entier.

    Je pense que cela vient de la.

    Merci

    Le Lighteux.

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 855
    Points : 14 966
    Points
    14 966
    Par défaut
    En faite il n’y a pas d’alerte d’erreur VBA.
    donc tout va bien...

    il y a bien une erreur puisque tu passe dans la condition qui affiche le message : "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée."
    je n'ai rien inventé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Err.Number = 0 Then ' si pas d'erreur ce message est affiché:
        MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbBackup, , "Pour info"    
    Else ' sinon  s'il y en a une (donc code erreur <> 0), affichage de ce message:
        MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée.", , "Pour info."
    End If
    mais puisque le On Error ... fait bien son travail tu ne peux pas voir le vrai message, car le code erreur est toujours en mémoire malgré tout.
    Si tu modifies le code comme je te l'ai préconisé, tu verras le message du code erreur qui empêche la bonne exécution

  6. #6
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Cc

    Merci pour la réponse.

    Oui c’est vrai.

    Je regarde de suite.

    Désolé, merci

  7. #7
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Re

    Donc oui il y a bien un message qui dit que le chemin d'accès n'est pas valide.

    C'est se dont je me doutais a la base.



    En faite il y'a le nom du fichier et l'extension, qui fait un sous dossier alors que normalement non.

    J'essaye de voir ou ma modification n'est pas bonne cela doit être le fait que j'utilise la variable en public de base du code du contributeur qui m'a fait le code

    Merci

    Le Ligtheux

  8. #8
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Bonjour Lighteux26, tee_grandbois,

    J'essaye de voir ou ma modification n'est pas bonne cela doit être le fait que j'utilise la variable en public de base du code du contributeur qui m'a fait le code
    Ce n'est pas la raison. La sub "Public Sub BackUp(sDbData As String)" attend de recevoir en argument "(sDbData As String)" le nom ainsi que le chemin d'accès de la base a compacter. Dans votre code post #2 vous passez en argument le nouveau chemin d'accès.

    La fonction "DBEngine.CompactDatabase" à besoin de 2 variables en arguments, la première est le nom et le chemin d'accès de la base à compacter et la deuxième est le nom et le chemin d'accès de la base compactée.

    Pour faire ce que vous désirez il faudrait modifier un peu la sub "Public Sub BackUp(sDbData As String)" comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub BackUp(sDbOriginal As String, sDbDestination as string)
    On Error GoTo gestion_err
     
        DBEngine.CompactDatabase sDbOriginal , sDbDestination  '--- sauve et compacte
        MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbDestination , , "Pour info"
     
    Sortie:
    Exit Sub
     
    gestion_err:
        MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée.", , "Pour info."
        Resume Sortie
    End Sub
    Le premier argument étant le nom et chemin de la base original et le deuxième argument étant le nom et l'emplacement désiré pour la copie.

    Bonne journée

  9. #9
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Robert1957, Le fofo

    Merci pour la réponse.

    Je regarde demain tout cela, je retourne au taff.

    Merci

    Passez toutes et tous une bonne soirée.

    Le Lighteux

  10. #10
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Robert, le fofo

    Je viens de regarder un peu toutes les procédures liées, avec le code que j'ai essayé de rajouter.

    Les codes de base du contributeur que je n'ai pas touché, sauf le mise en commentaire de "On Error Resume Next" lol.

    Backup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub BackUp(sDbData As String)
        Dim sDbBackup As String
        sDbBackup = Replace(sDbData, ".accdb", Format(Now, "_yyyy-mm-dd_hh\hnn") & ".accdb")
        'On Error Resume Next
        DBEngine.CompactDatabase sDbData, sDbBackup     '--- sauve et compacte
        If Err.Number = 0 Then
            MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbBackup, , "Pour info"
        Else
            MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée.", , "Pour info."
        End If
    End Sub
    Le code lors de la fermeture, ciode du contributeur que j'ai modifié un peu, lol.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub Form_Unload(Cancel As Integer)
        Dim currentYear As String
        Dim folderPath As String
        currentYear = Format(Now, "yyyy")
     
        ' Je rempli la variable pour la création du dossier
        folderPath = CurrentProject.Path & "\" & "Sauvegardes Data" & "\" & currentYear & "\"
     
        'Je test si le dossier de l'année en cours éxiste, sinon je le crée
        If Dir(folderPath, vbDirectory) = "" Then
            MkDir folderPath
        End If
     
        If MsgBox("Voulez-vous vraiment quitter cette application ?", _
              vbYesNo + vbDefaultButton2, " A confirmer") = vbNo Then
            Cancel = True
        Else
            If MsgBox("Voulez-vous enregistrer une copie de sauvegarde ?", _
                  vbYesNo + vbDefaultButton1, " A confirmer") = vbYes Then
                BackUp Me.AdresseData & "\" & "Sauvegardes Data" & "\" & currentYear ' & "\"
            End If
        End If
    End Sub
    De base c'était celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Unload(Cancel As Integer)
        Dim folderPath As String
     
        If MsgBox("Voulez-vous vraiment quitter cette application ?", _
              vbYesNo + vbDefaultButton2, " A confirmer") = vbNo Then
            Cancel = True
        Else
            If MsgBox("Voulez-vous enregistrer une copie de sauvegarde ?", _
                  vbYesNo + vbDefaultButton1, " A confirmer") = vbYes Then
                BackUp Me.AdresseData
            End If
        End If
    End Sub


    Et ici se sont les procédures qui utilisent la variable AdresseData

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Open(Cancel As Integer)
        DoCmd.Maximize
        If Dir(CurrentDb.Containers("Databases")!UserDefined.Properties!DataFile) = "" Then
            Me.AdresseData = "Sélectionner votre fichier de données"
        Else
            Me.AdresseData = CurrentDb.Containers("Databases")!UserDefined.Properties!DataFile
        End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Private Sub btnNewFile_Click()
        Me.AdresseData = FichierChoisi(CurrentProject.Path)
    End Sub
     
    Private Sub btnOK_Click()
        If Dir(Me.AdresseData) = "" Then
            Me.AdresseData = "Sélectionner votre fichier de données (.accdb)"
        Else
            CurrentDb.Containers("Databases")!UserDefined.Properties!DataFile = Me.AdresseData
            AttacherTables Me.AdresseData
            DoCmd.OpenForm "F_001_Menu"
            Me.Visible = False           '--- astuce qui permet de forcer l'exécution de Form_Unload lorsque que l'on quitte Access
        End If
    End Sub
    En faite je pense que c'est le faite que je garde "Me.AdresseData" dans le code que j'ai modifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BackUp Me.AdresseData & "\" & "Sauvegardes Data" & "\" & currentYear ' & "\"

    Je vais voir si j'arrive a faire autrement.

    Merci

    Le Lighteux

  11. #11
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Bonjour Lighteux26,

    Il faut comprendre ce que fait le code.
    Les codes de base du contributeur que je n'ai pas touché, sauf le mise en commentaire de "On Error Resume Next" lol.
    Ligne 1 du code : Cette partie récupère "C:\Users\jz52353491\OneDrive-Conduent\Gestion horaire\Gestion horaire-Data.accdb" au moyen de la variable "sDbData" déclaré en string.
    Ligne 3 du code : Cette partie affecte la valeur de "sDbData" à la nouvelle variable "sDbBackup" en modifiant le nom du fichier à l'aide de la fonction "Replace" en remplaçant la partie ".accdb" par un underscore ainsi que la date et l'heure et le ".accdb".
    Ligne 5 du code : C'est ici que l'action se passe, on compact la base qui est déclarée "sDbData" premier argument, avec comme résultat le nouveau nom que l'on a créé en ligne 3 deuxième argument.
    Le code lors de la fermeture, ciode du contributeur que j'ai modifié un peu, lol.
    Cette partie du code la modification que vous avez faite se trouve à passer en argument non pas le chemin d'accès et le nom du fichier à compacter mais un nouveau nom qui n'existe pas.
    Ligne 20 : Vous ajouter "\Sauvegardes Data\2024" à la "C:\Users\jz52353491\OneDrive-Conduent\Gestion horaire\Gestion horaire-Data.accdb" ce qui cause l'erreur.

    C'est pour cette raison que je vous proposais d'ajouter une nouvelle variable et c'est cette nouvelle variable qui indiquera le chemin ainsi que le nom de la base compactée et copiée. Ainsi vous conservez la même stratégie sauf que vous passez 2 arguments au lieu de 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BackUp Me.AdresseData, "C:\Users\jz52353491\OneDrive-Conduent\Gestion horaire\Sauvegardes Data\2024\LeNomQueVousVoulez.accdb"
    Maintenant si vous voulez rendre la destination de la copie (deuxième partie de la fonction) dynamique vous n'avez qu'a récupérer le nom du fichier et le concaténer avec votre nouveau "folderPath" que vous créé à la ligne 7 ou 10 selon le cas.

    Bonne journée

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Heu ...

    A un moment donné, il faut être cohérent.
    Qu'est-ce que AdresseData ?
    Quel est son rôle (indice: il ne doit y en avoir qu'un) ?
    Les valeurs qui lui sont assignées correspondent t'elles à son rôle ?

    Note:
    Pense à mettre des points d'arrêt dans ton code, et des espions pour vérifier le contenu de tes variables.

  13. #13
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Robert, le fofo

    Merci pour la réponse.

    je regarde cela ce soir.

    Merci

    Bonne journée, Le lighteux

  14. #14
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    CC Deedolith, le fofo

    Citation Envoyé par deedolith Voir le message
    Heu ...

    A un moment donné, il faut être cohérent.
    Qu'est-ce que AdresseData ?
    Quel est son rôle (indice: il ne doit y en avoir qu'un) ?
    Les valeurs qui lui sont assignées correspondent t'elles à son rôle ?

    Note:
    Pense à mettre des points d'arrêt dans ton code, et des espions pour vérifier le contenu de tes variables.
    La cohérance y est a la base car la personne (qui métrise je pense trés trés bien) qui m'a fait ce code (A ma demande initiale), la fait suivant cette demande.

    la je pensais pouvoir modifier un peu pour que le chemin de ces sauvegarde soit suivant l'année en cours, mais n'avais pas vue tout ce qui en décollé.

    Merci

    Passez une bonne journée.

    Le Lighteux

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Citation Envoyé par Lighteux26 Voir le message
    La cohérance y est a la base car la personne (qui métrise je pense trés trés bien) qui m'a fait ce code (A ma demande initiale), la fait suivant cette demande.
    Permet moi d'avoir des doutes.
    Si, comme je l'ai compris, AdresseData doit contenir un chemin vers un fichier,
    force est de constater que ce n'est pas toujours le cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AdresseData = "Sélectionner votre fichier de données (.accdb)"

  16. #16
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    hello

    Citation Envoyé par deedolith Voir le message
    Permet moi d'avoir des doutes.
    Si, comme je l'ai compris, AdresseData doit contenir un chemin vers un fichier,
    force est de constater que ce n'est pas toujours le cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.AdresseData = "Sélectionner votre fichier de données (.accdb)"
    Je ne mettrai pas en doute ce que ce contributeur a fait.

    S’il a fait déjà c’est qu’il y a une raison que l’on ne voit pas de suite.

    Il m’a énormément aidé et ce qu’il m’a fait tourne au top.

    Bonne soirée.

    Le lighteux.

  17. #17
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Bonjour Lighteux26,

    J'ai regardé une fois de plus le code et je me demande, est-ce que votre "FrontEnd" est dans le même répertoire que votre "BackEnd". Parce que le code que vous avez ajouté ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_Unload(Cancel As Integer)
        Dim currentYear As String
        Dim folderPath As String
        currentYear = Format(Now, "yyyy")
     
        ' Je rempli la variable pour la création du dossier
        folderPath = CurrentProject.Path & "\" & "Sauvegardes Data" & "\" & currentYear & "\"
     
        'Je test si le dossier de l'année en cours éxiste, sinon je le crée
        If Dir(folderPath, vbDirectory) = "" Then
            MkDir folderPath
        End If
    CurrentProject.Path Se trouve à récupérer le chemin d'accès de votre "FrontEnd". Cependant si c'est le même, chemin sauf pour la partie & "Sauvegardes Data" & "\" & currentYear & "\" que celui de votre "BackEnd" il est possible de faire fonctionner votre sauvegarde de façon assez simple sans tout modifier.

    Bonne soirée

  18. #18
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    Hello
    Robert1957

    Merci pour votre réponse.

    Citation Envoyé par Robert1957 Voir le message
    Bonjour Lighteux26,

    J'ai regardé une fois de plus le code et je me demande, est-ce que votre "FrontEnd" est dans le même répertoire que votre "BackEnd". Parce que le code que vous avez ajouté ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form_Unload(Cancel As Integer)
        Dim currentYear As String
        Dim folderPath As String
        currentYear = Format(Now, "yyyy")
     
        ' Je rempli la variable pour la création du dossier
        folderPath = CurrentProject.Path & "\" & "Sauvegardes Data" & "\" & currentYear & "\"
     
        'Je test si le dossier de l'année en cours éxiste, sinon je le crée
        If Dir(folderPath, vbDirectory) = "" Then
            MkDir folderPath
        End If
    CurrentProject.Path Se trouve à récupérer le chemin d'accès de votre "FrontEnd". Cependant si c'est le même, chemin sauf pour la partie & "Sauvegardes Data" & "\" & currentYear & "\" que celui de votre "BackEnd" il est possible de faire fonctionner votre sauvegarde de façon assez simple sans tout modifier.

    Bonne soirée
    Qu’entendez-vous pas FrontEnd et BackEnd?

    Le fichier dorsal?

    Si oui

    Le fichier «*dorsal*» ou Data et le fichier secondaire de ma base de donnée,

    Et c’est celui là que l’on recopie en guise de backup et j’aimerai qu’il s’enregistre dans un sous dossier nommée de l’année en cours.

    Et je fais ce test de présence ou nom de ce dossier, et du pas présent, je le crée.

    Merci

    Bonne soirée.

    Le Lighteux.

  19. #19
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Bonjour Lighteux26,

    En gardant le plus possible l'ancien code, voici une façon de faire, l'ancien code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub BackUp(sDbData As String)
        Dim sDbBackup As String
        sDbBackup = Replace(sDbData, ".accdb", Format(Now, "_yyyy-mm-dd_hh\hnn") & ".accdb")
        'On Error Resume Next
        DBEngine.CompactDatabase sDbData, sDbBackup     '--- sauve et compacte
        If Err.Number = 0 Then
            MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbBackup, , "Pour info"
        Else
            MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée.", , "Pour info."
        End If
    End Sub
    À remplacer par ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Sub BackUp(sDbData As String)
    On Error GoTo Gestion_err
    Dim sDbBackup                   As String
     
        sDbBackup = sGetDirectoryAndFileName(sDbData) '---Récupération du nouveau répertoire
        sDbBackup = Replace(sDbBackup, ".accdb", Format(Now, "_yyyy-mm-dd_hh\hnn") & ".accdb")
        DBEngine.CompactDatabase sDbData, sDbBackup     '--- sauve et compacte
        MsgBox "Une copie du fichier données a été enregistrée sous " & vbLf & sDbBackup, , "Pour info"
     
    Sortie:
    Exit Sub
    Gestion_err:
        MsgBox "Anomalie: la copie de sauvegarde du fichier données n'a pu être effectuée." & Chr(13) _
        & "Erreur #" & Err.Number & " " & Err.Description, , "Pour info."
        Resume Sortie
    End Sub
    Pour Que ce code fonctionne il vous faut ajouter quelques fonctions dans le même module que le code ci-haut, j'ai mis en commentaire le fonctionnement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Private Function sGetFileName(sFilePath As String) As String
    On Error GoTo Gestion_err
    Dim s()                             As String
     
        s = Split(sFilePath, "\") '---On split le string en se servant des \
        sGetFileName = s(UBound(s))'---On récupère la dernière portion qui est le nom complet du fichier
     
    Sortie:
    Exit Function
    Gestion_err:
        MsgBox "Erreur dans sGetFileName" & " " & Err.Number & " " & Err.Description
        Resume Sortie
    End Function
    Private Function sGetDirectoryAndFileName(sDataFile As String) As String
    On Error GoTo Gestion_err
    Dim sDirectory                  As String
    Dim sFileName                   As String
     
        sFileName = sGetFileName(sDataFile)            'Ici on récupère le nom du fichier DATA
        sDirectory = Replace(sDataFile, sFileName, "") 'On commence la formation du chemin de sauvegarde du fichier
        sDirectory = sDirectory & "Sauvegarde Data\"   'Ajout du premier sous répertoire
        CreerDossier sDirectory                        'Création du répertoire si non existant
        sDirectory = sDirectory & Year(Date) & "\"     'Ajout du second répertoire
        CreerDossier sDirectory                        'Création du répertoire si non existant
        sDirectory = sDirectory & sFileName            'Ajout du nom de la base DATA
        sGetDirectoryAndFileName = sDirectory
     
    Sortie:
    Exit Function
    Gestion_err:
        MsgBox "Erreur dans sGetFileName" & " " & Err.Number & " " & Err.Description
        Resume Sortie
    End Function
    Private Sub CreerDossier(strDossier As String)
    On Error GoTo Gestion_err
     
        MkDir strDossier
     
    Sortie:
    Exit Sub
    Gestion_err:
        Select Case Err.Number
            Case 75 'le dossier existe déjà
            Resume Next
        Case Else
            MsgBox "Erreur dans CreerDossier" & " " & Err.Number & " " & Err.Description
            Resume Sortie
        End Select
    End Sub
    Et finalement vous utiliser l'ancien code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Unload(Cancel As Integer)
        Dim folderPath As String '---Cette déclaration est inutile, vous pouvez la supprimer
     
        If MsgBox("Voulez-vous vraiment quitter cette application ?", _
              vbYesNo + vbDefaultButton2, " A confirmer") = vbNo Then
            Cancel = True
        Else
            If MsgBox("Voulez-vous enregistrer une copie de sauvegarde ?", _
                  vbYesNo + vbDefaultButton1, " A confirmer") = vbYes Then
                BackUp Me.AdresseData
            End If
        End If
    End Sub
    Bonne journée

  20. #20
    Membre du Club
    Homme Profil pro
    Régisseur lumière et intégrateur led
    Inscrit en
    Janvier 2020
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Régisseur lumière et intégrateur led
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2020
    Messages : 247
    Points : 62
    Points
    62
    Par défaut
    CC Robert

    Merci beaucoup.

    J'ai essayé plein de chose, mais je n'y suis par arrivé.

    Je test de suite et reviens vers vous.

    Merci

    LeLighteux

Discussions similaires

  1. [Débutant] sauvegarder dans un dossier une image contenue dans un picturebox
    Par veens777 dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/09/2012, 19h34
  2. [XL-2003] Lister le dernier fichier excel sauvegarde dans un dossier
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/04/2011, 22h03
  3. [E-03] Fonction Save => Sauvegarde dans un dossier aléatoire
    Par oohcalme dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/02/2009, 13h07
  4. Réponses: 5
    Dernier message: 30/08/2008, 00h06
  5. [Stratégie]Détecter une sauvegarde dans un dossier
    Par koolway dans le forum Général Java
    Réponses: 7
    Dernier message: 17/03/2006, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo