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 :

[VBA] [2000] Copier la base de données (Cloture)


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 495
    Par défaut [VBA] [2000] Copier la base de données (Cloture)
    Bonjour

    Je désire faire une "côture" qui consiterait ( pour le moment ), en une copie de la base de données.
    Pour ce faire, j'ai repris certaines parties du code de sauvegarde automatique, code de la FAQ si j'ai bonne mémoire.

    Voici ce que j'ai mis pour l'instant :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Public Function ClôtureDeFinDAnnée()
    On Error GoTo ErreursCloture
     
    If MsgBox("Bienvenue dans le module de clôture de fin d'année . Vous allez copier MON PROGRAMME - dans votre répertoire de sauvegarde, afin de garder une trace de l'année en cours. Attention : Certaines données seront effacées. Voulez-vous continuer ?", vbQuestion + vbYesNo, "MON PROGRAMME -Clôture de fin d'année ") = vbNo Then Exit Function
     
    'Préparation à la copie de MON PROGRAMME -
     
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("Parametres_Save", dbOpenDynaset) 'ouverture du recordset de la table Parametres_Save
     
     If rs.EOF = True Then
     MsgBox "Veuillez indiquer le répertoire dans lequel sauvegarder dans le formulaire ""Sauvegarde"" afin de définir le dossier dans lequel vous souhaitez stocker votre sauvegarde de clôture de fin d'année ...", vbExclamation + vbOKOnly, "MON PROGRAMME -Clôture de fin d'année "
     MsgBox "La clôture ne s'est pas faite. Veuillez réessayer ultérieurement !", vbCritical + vbOKOnly, "MON PROGRAMME -Clôture de fin d'année "
     
     Exit Function
     End If
     
    'Module de copie
     
    'Référence nécessaire : Microsoft Scripting Runtime
    Dim fs As New Scripting.FileSystemObject
    Set fs = CreateObject("Scripting.FileSystemObject")
    DoCmd.Hourglass True
    DoCmd.Echo True, "Clôture en cours...."
    Set rs = CurrentDb.OpenRecordset("Parametres_Save", dbOpenDynaset)
     
    Dim Destination As String 'répertoire de sauvegarde pour la clôture
    Dim Source As String 'Répertoire où se trouve la base de donnée courante
    Dim NomBase As String 'nom de la base frontale (base de donnée courante)
    Dim NomCloture As String 'nom de sauvegarde de la base de donnée pour la clôture
    Dim AAencours As String
     
    rs.MoveFirst
     
    Source = Left(CurrentDb.Name, InStr(CurrentDb.Name, Dir(CurrentDb.Name)) - 1)
    NomBase = Left(Dir(CurrentDb.Name), Len(Dir(CurrentDb.Name)) - 4)
    AAencours = DLookup("AAec", "Etablissement")
     
    'Contrôle que le chemin indiqué dans RepSauvse termine bien par un \
    If Right(rs!RepSauv.Value, 1) <> "\" Then
    Destination = rs!RepSauv.Value & "\"
    Else
    Destination = rs!RepSauv.Value
    End If
     
    'Format de clôture : Nom de la base de donnée jj mm aa + indication de l'Année académique
    NomCloture = NomBase + " - Clôture de fin de l'année " + AAencours + " - Date du " + CStr(Day(Now())) + " " + CStr(Month(Now())) + " " + CStr(Year(Now()))
     
    If Dir(Destination, vbDirectory) = "" Then
     If MsgBox("Le chemin indiqué n'existe pas! Souhaitez-vous le créer?", vbQuestion + vbYesNo, "MON PROGRAMME -Clôture de fin d'année ") = vbYes Then
     fs.CreateFolder CStr(Destination) 'création du répertoire indiqué dans RepSauv
     GoTo Suite1
     Else
     MsgBox "La sauvegarde n'a pas pu être effectuée!", vbExclamation, "MON PROGRAMME -Clôture de fin d'année "
     rs.Close
     Set rs = Nothing
     Exit Function
     End If
    Else
    GoTo Suite1
    End If
    Suite1:
     
    'Copie du fichier source vers le répertoire de destination
    fs.CopyFile CStr(Source) + CStr(NomBase) + ".mdb", CStr(Destination) + CStr(NomCloture) + ".mdb", True
     
    'Vérification que le fichier de sauvegarde existe bien dans le répertoire prévu avec le nom prévu:
    If Dir(CStr(Destination) + CStr(NomCloture) + ".mdb", vbDirectory) = "" Then
    MsgBox "La clôture ne s'est pas faite!", vbCritical, "MON PROGRAMME -Clôture de fin d'année "
    Else
    MsgBox "Clôture effectuée avec succès!", vbInformation, "MON PROGRAMME -Clôture de fin d'année "
    End If
    DoCmd.Echo True
    DoCmd.Hourglass False
     
    Exit Function
     
    ErreursCloture:
    Select Case Err.Number
    Case 3044
    MsgBox "Le chemin d'accès n'est pas valide. Assurez-vous que le nom du chemin d'accès est correct et qu'une connexion est établie avec le serveur sur lequel vous souhaitez effectuer la sauvegarde.", vbExclamation + vbOKOnly, "MON PROGRAMME -Tentative de sauvegarde"
    Case 76
    MsgBox "Chemin d'accès introuvable.", vbExclamation + vbOKOnly, "MON PROGRAMME -Tentative de sauvegarde"
    Case Else
    MsgBox "Une erreur non traitée s'est produite (" & Err.Number & "-" & Err.Description & ")", vbExclamation + vbOKOnly, "MON PROGRAMME -Tentative de sauvegarde"
    End Select
     
    End Function
    Au moment d'exécuter le tout, message "erreur 94 : utilisation incorrecte de Null". Où serait mon erreur???

    Merci de vos réponses

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Si, déjà, tu nous disais sur quelle ligne, ça nous éviterait de jouer au devin...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre éclairé
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 495
    Par défaut
    Désolé, , j'ai été distrait...

    Si je reprends mon code ( voir mon premier message ), j'ai exécuté jusque

    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
    Public Function ClôtureDeFinDAnnée()
    On Error GoTo ErreursCloture
     
    If MsgBox("Bienvenue dans le module de clôture de fin d'année académique. Vous allez copier MON PROGRAMME - dans votre répertoire de sauvegarde, afin de garder une trace de l'année académique en cours. Attention : Certaines données seront effacées. Voulez-vous continuer ?", vbQuestion + vbYesNo, "MON PROGRAMME -Clôture de fin d'année académique") = vbNo Then Exit Function
     
    'Préparation à la copie de MON PROGRAMME -
     
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("Parametres_Save", dbOpenDynaset) 'ouverture du recordset de la table Parametres_Save
     
     If rs.EOF = True Then
     MsgBox "Veuillez indiquer le répertoire dans lequel sauvegarder dans le formulaire ""Sauvegarde"" afin de définir le dossier dans lequel vous souhaitez stocker votre sauvegarde de clôture de fin d'année académique...", vbExclamation + vbOKOnly, "MON PROGRAMME -Clôture de fin d'année académique"
     MsgBox "La clôture ne s'est pas faite. Veuillez réessayer ultérieurement !", vbCritical + vbOKOnly, "MON PROGRAMME -Clôture de fin d'année académique"
     
     Exit Function
     End If
     
    'Module de copie
     
    'Référence nécessaire : Microsoft Scripting Runtime
    Dim fs As New Scripting.FileSystemObject
    Set fs = CreateObject("Scripting.FileSystemObject")
    DoCmd.Hourglass True
    DoCmd.Echo True, "Clôture en cours...."
    Set rs = CurrentDb.OpenRecordset("Parametres_Save", dbOpenDynaset)
     
    Dim Destination As String 'répertoire de sauvegarde pour la clôture
    Dim Source As String 'Répertoire où se trouve la base de donnée courante
    Dim NomBase As String 'nom de la base frontale (base de donnée courante)
    Dim NomCloture As String 'nom de sauvegarde de la base de donnée pour la clôture
    Dim AAencours As String
     
    rs.MoveFirst
     
    Source = Left(CurrentDb.Name, InStr(CurrentDb.Name, Dir(CurrentDb.Name)) - 1)
    NomBase = Left(Dir(CurrentDb.Name), Len(Dir(CurrentDb.Name)) - 4)
    AAencours = DLookup("AAec", "Etablissement")
     
    'Contrôle que le chemin indiqué dans RepSauvse termine bien par un \
    If Right(rs!RepSauv.Value, 1) <> "\" Then
    Destination = rs!RepSauv.Value & "\"
    Else
    Destination = rs!RepSauv.Value
    End If
     
    'Format de clôture : Nom de la base de donnée jj mm aa + indication de l'Année académique
    NomCloture = NomBase + " - Clôture de fin de l'année académique " + AAencours + " - Date du " + CStr(Day(Now())) + " " + CStr(Month(Now())) + " " + CStr(Year(Now()))
    . En principe, là, je n'ai pas de problème.

    C'est à partir de

    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
    If Dir(Destination, vbDirectory) = "" Then
     If MsgBox("Le chemin indiqué n'existe pas! Souhaitez-vous le créer?", vbQuestion + vbYesNo, "MON PROGRAMME -Clôture de fin d'année académique") = vbYes Then
     fs.CreateFolder CStr(Destination) 'création du répertoire indiqué dans RepSauv
     GoTo Suite1
     Else
     MsgBox "La sauvegarde n'a pas pu être effectuée!", vbExclamation, "MON PROGRAMME -Clôture de fin d'année académique"
     rs.Close
     Set rs = Nothing
     Exit Function
     End If
    Else
    GoTo Suite1
    End If
    Suite1:
     
    'Copie du fichier source vers le répertoire de destination
    fs.CopyFile CStr(Source) + CStr(NomBase) + ".mdb", CStr(Destination) + CStr(NomCloture) + ".mdb", True
     
    'Vérification que le fichier de sauvegarde existe bien dans le répertoire prévu avec le nom prévu:
    If Dir(CStr(Destination) + CStr(NomCloture) + ".mdb", vbDirectory) = "" Then
    MsgBox "La clôture ne s'est pas faite!", vbCritical, "MON PROGRAMME -Clôture de fin d'année académique"
    Else
    MsgBox "Clôture effectuée avec succès!", vbInformation, "MON PROGRAMME -Clôture de fin d'année académique"
    End If
    DoCmd.Echo True
    DoCmd.Hourglass False
     
    Exit Function
     
    ErreursCloture:
    Select Case Err.Number
    Case 3044
    MsgBox "Le chemin d'accès n'est pas valide. Assurez-vous que le nom du chemin d'accès est correct et qu'une connexion est établie avec le serveur sur lequel vous souhaitez effectuer la sauvegarde.", vbExclamation + vbOKOnly, "MON PROGRAMME -Tentative de sauvegarde"
    Case 76
    MsgBox "Chemin d'accès introuvable.", vbExclamation + vbOKOnly, "MON PROGRAMME -Tentative de sauvegarde"
    Case Else
    MsgBox "Une erreur non traitée s'est produite (" & Err.Number & "-" & Err.Description & ")", vbExclamation + vbOKOnly, "MON PROGRAMME -Tentative de sauvegarde"
    End Select
     
    End Function
    que se pose le problème...

    En fait, je pense que quelque chosev ( mais je ne sais pas quoi ) empêche d'aller à "suite 1", et le blocage semble venir avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    If Dir(Destination, vbDirectory) = "" Then
     If MsgBox("Le chemin indiqué n'existe pas! Souhaitez-vous le créer?", vbQuestion + vbYesNo, "MON PROGRAMME -Clôture de fin d'année académique") = vbYes Then
     fs.CreateFolder CStr(Destination) 'création du répertoire indiqué dans RepSauv
     GoTo Suite1
     Else
     MsgBox "La sauvegarde n'a pas pu être effectuée!", vbExclamation, "MON PROGRAMME -Clôture de fin d'année académique"
     rs.Close
     Set rs = Nothing
     Exit Function
     End If
    Else
    GoTo Suite1
    ( C'est du moins ce qui est arrivé avec l'écécution jusqu'à ce curseur.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 62
    Par défaut
    Bonjour

    J'ai utilisé cette procédure également mais il faut modifier le code pour qu'elle fonctionne. Le recordset quand il est vide génére une erreur et car il n'est pas fermé en fin de sauvegarde réussie.

    C'est brut comme code. si tu ne réussis pas je mettrais mon module complet pour que tu vois les différences

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Dir(CStr(Destination) + CStr(NomCloture) + ".mdb", vbDirectory) = "" Then
    MsgBox "La clôture ne s'est pas faite!", vbCritical, "MON PROGRAMME -Clôture de fin d'année académique"
    Else
    MsgBox "Clôture effectuée avec succès!", vbInformation, "MON PROGRAMME -Clôture de fin d'année académique"
    End If
    devient

    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
     If Dir(CStr(Destination) + CStr(NomSauv) + ".mdb", vbDirectory) = "" Then
                MsgBox "La sauvegarde ne s'est pas faite!!", vbExclamation, "Tentative de sauvegarde automatique:"
                rs.Close
                Set rs = Nothing
            Else
     
                MsgBox "Sauvegarde effectuée avec succès!", vbInformation, "Tentative de sauvegarde automatique:"
     
    'Mise à jour de la date de dernière sauvegarde:
                rs.Edit
                rs!DateDernièreSauvegarde = Date
                rs.Update
                rs.Close
                Set rs = Nothing
            End If
    et au niveau de la gestion d'erreur à rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Case 3021
            MsgBox "Aucun enregistrement dans la base", vbCritical + vbOKOnly, "Information"

  5. #5
    Membre éclairé
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 495
    Par défaut
    OK. Merci. Je regarderai tout cela à mon aise, et je te dirai ce qu'il en est.

    Euh... Effectivement, à la décharge d'Access, j'ai fait des tests avec une base de données vides... ( forcément, on essaie, au moment de la création de la base, de vérifier si le code fonctionne... avant de l'utiliser ). Je comprends alors le pourquoi du cas d'erreur "3021" et de ton message " MsgBox "Aucun enregistrement dans la base", vbCritical + vbOKOnly, "Information" "...

    Enfin, bon, c'est avec ses erreurs qu'on apprend...

  6. #6
    Membre éclairé
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 495
    Par défaut
    Re, merci pour ton aide.

    Le problème était le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim AAencours As String
     
    rs.MoveFirst
     
    Source = Left(CurrentDb.Name, InStr(CurrentDb.Name, Dir(CurrentDb.Name)) - 1)
    NomBase = Left(Dir(CurrentDb.Name), Len(Dir(CurrentDb.Name)) - 4)
    AAencours = DLookup("AAec", "Etablissement")
    En fait, la valeur de AAencours était vierge, ce qui impliquait une erreur.
    J'ai donc résolu le problème avec une recherche : si la valeur est vide, la clôture est interrompue et un message dit "votre valeur est vide".

    Maintenant, tout fonctionn...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/06/2007, 11h56
  2. [VBA-E] macro avec base de données externe
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2007, 14h12
  3. [VBA-Excel] copier des lignes de données d'un fichier à un autre
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2006, 10h17
  4. Copier une base de données
    Par emeraudes dans le forum VBA Access
    Réponses: 6
    Dernier message: 12/04/2006, 10h44
  5. [VBA-E]COMBOBOX, et base de données
    Par legend dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/02/2006, 13h22

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