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

Access Discussion :

Demande aide pour erreur d'exécution 94 (null)


Sujet :

Access

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut Demande aide pour erreur d'exécution 94 (null)
    Bonjour la communauté,

    J'espère que vous allez bien.

    Je me permets de vous contacter car je rencontre un problème avec mon codage VBA qui génére des lignes de comptabilisation automatique.

    Voici mon code VBA
    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
    Option Explicit
     
    Function MaJ_Periodique()
        Dim SQL As String, oSQL As DAO.Recordset
        Dim IDPaiPer As String, LibPaiPer As String, MTPaiPer As String, MoisPaiPer As String, CodePmt As String
        Dim CodeJrnl As String, CodeSsJrnl  As String, RefAnal As String, CodePaiPer As String, Paiement As String, RefCompte As String
        Dim ProchainPaiPer As Date, FuturPaiPer As Date
     
        DoCmd.SetWarnings False
     
        'Je lis la table PaiementPeriodique pour ne récupérer que les paiements à faire
        SQL = "SELECT T_PaiementPeriodique.* " _
            & " FROM T_PaiementPeriodique " _
           & "WHERE T_PaiementPeriodique.FinPaiPer>= #" & Format(Now(), "mm/dd/yy") & _
           "# AND T_PaiementPeriodique.ProchainPaiPer<= #" & Format(Now(), "mm/dd/yy") & "#"
     
        'Exécute la requête
        Set oSQL = CurrentDb.OpenRecordset(SQL)
        'Fait l'analyse de tous les paiements
        Do Until oSQL.EOF
            'Initialise mes variables
            IDPaiPer = oSQL("CodePaiPer")
            LibPaiPer = oSQL("LibellePaiPer")
            MTPaiPer = oSQL("MontantPaiPer")
            ProchainPaiPer = oSQL("ProchainPaiPer")
            FuturPaiPer = DateAdd("m", 1, ProchainPaiPer) 'Ajoute un mois à la date du paiement
            MoisPaiPer = Format(oSQL("ProchainPaiPer"), "MMMM") 'récupère le mois en texte
            Paiement = oSQL("Paiement")
            CodeJrnl = oSQL("CodeJrnl")
            CodeSsJrnl = oSQL("CodeSsJrnl")
            CodePaiPer = oSQL("CodePaiPer")
            RefAnal = oSQL("RefAnal")
            RefCompte = oSQL("RefCompte")
     
            'Ajout la donnée dans la table Mouvements
     
    DoCmd.RunSQL "INSERT INTO T_Mouvements (RefCompte,DateMvt, LibelleMvt, MontantMvt, Paiement, CodeJrnl, CodeSsJrnl, RefAnal, CodePaiPer) " _
                & "VALUES ( """ & RefCompte & """, #" & Format(ProchainPaiPer, "MM/DD/YY") & "#, """ & LibPaiPer & " " & UCase(Left(MoisPaiPer, 1)) & LCase(Right(MoisPaiPer, Len(MoisPaiPer) - 1)) & """, " & Replace(MTPaiPer, ",", ".") & ", """ & Paiement & """, """ & CodeJrnl & """, """ & CodeSsJrnl & """, """ & RefAnal & """, """ & CodePaiPer & """)"
     
            'Mise à jour la date du prochain paiement dans la table PaiementPeriodique
            DoCmd.RunSQL "UPDATE T_PaiementPeriodique SET T_PaiementPeriodique.ProchainPaiPer = #" & Format(FuturPaiPer, "MM/DD/YY") & "# " _
                & "WHERE T_PaiementPeriodique.CodePaiPer=" & IDPaiPer & ";"
     
            oSQL.MoveNext
        Loop
     
        DoCmd.SetWarnings True
    End Function
    Je rencontre un problème avec la variable "RefAnal" qui peut être un code analytique ou alors vide si l'opération ne peut être catégorisée dans un projet.
    Nom : Capture erreur.JPG
Affichages : 131
Taille : 17,1 Ko

    Nom : Capture variable.JPG
Affichages : 121
Taille : 15,4 Ko

    Je n'arrive pas à instaure une formule IF avec l'expression isnull.

    Merci d'avance pour votre aide et conseil pour ce problème.

    Je reste à votre disposition pour toutes questions.

    Bien à vous.

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    A tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RefAnal = Nz(oSQL("RefAnal"),"")
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Le code fourni a enlevé l'erreur d'exécution du code mais chaque ligne qui ne comporte pas de code analytique dans la table paiement périodique, n'est pas comptabilisée chaque mois automatiquement désormais.

    Auriez-vous un indice d'où pourrait venir le problème s'il vous plait car je ne trouve pas de solution pour l'instant.

    Merci d'avance pour votre aide.

  4. #4
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Oups
    Dans ce cas faite un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNull(rs.Fields("RefAnal").Value) Then
        RefAnal = ""
    Else
        RefAnal = oSQL("RefAnal")
    End If
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    merci pour votre retour.

    ça ne fonctionne pas, j'ai une erreur de variable.

    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
    Option Explicit
     
    Function MaJ_Periodique()
        Dim SQL As String, oSQL As DAO.Recordset
        Dim IDPaiPer As String, LibPaiPer As String, MTPaiPer As String, MoisPaiPer As String, CodePmt As String
        Dim CodeJrnl As String, CodeSsJrnl  As String, RefAnal As String, CodePaiPer As String, Paiement As String, RefCompte As String
        Dim ProchainPaiPer As Date, FuturPaiPer As Date
     
        DoCmd.SetWarnings False
     
        'Je lis la table PaiementPeriodique pour ne récupérer que les paiements à faire
        SQL = "SELECT T_PaiementPeriodique.* " _
            & " FROM T_PaiementPeriodique " _
           & "WHERE T_PaiementPeriodique.FinPaiPer>= #" & Format(Now(), "mm/dd/yy") & _
           "# AND T_PaiementPeriodique.ProchainPaiPer<= #" & Format(Now(), "mm/dd/yy") & "#"
     
        'Exécute la requête
        Set oSQL = CurrentDb.OpenRecordset(SQL)
        'Fait l'analyse de tous les paiements
        Do Until oSQL.EOF
            'Initialise mes variables
            IDPaiPer = oSQL("CodePaiPer")
            LibPaiPer = oSQL("LibellePaiPer")
            MTPaiPer = oSQL("MontantPaiPer")
            ProchainPaiPer = oSQL("ProchainPaiPer")
            FuturPaiPer = DateAdd("m", 1, ProchainPaiPer) 'Ajoute un mois à la date du paiement
            MoisPaiPer = Format(oSQL("ProchainPaiPer"), "MMMM") 'récupère le mois en texte
            Paiement = oSQL("Paiement")
            CodeJrnl = oSQL("CodeJrnl")
            CodeSsJrnl = oSQL("CodeSsJrnl")
            CodePaiPer = oSQL("CodePaiPer")
            RefAnal = Nz(oSQL("RefAnal"), "")
            RefCompte = oSQL("RefCompte")
     
            'Ajout la donnée dans la table Mouvements
     
     
     
    DoCmd.RunSQL "INSERT INTO T_Mouvements (RefCompte,DateMvt, LibelleMvt, MontantMvt, Paiement, CodeJrnl, CodeSsJrnl, RefAnal, CodePaiPer) " _
                & "VALUES ( """ & RefCompte & """, #" & Format(ProchainPaiPer, "MM/DD/YY") & "#, """ & LibPaiPer & " " & UCase(Left(MoisPaiPer, 1)) & LCase(Right(MoisPaiPer, Len(MoisPaiPer) - 1)) & """, " & Replace(MTPaiPer, ",", ".") & ", """ & Paiement & """, """ & CodeJrnl & """, """ & CodeSsJrnl & """, """ & RefAnal & """, """ & CodePaiPer & """)"
     
               If IsNull(rs.Fields("RefAnal").Value) Then
        RefAnal = ""
    Else
        RefAnal = oSQL("RefAnal")
    End If
            'Mise à jour la date du prochain paiement dans la table PaiementPeriodique
            DoCmd.RunSQL "UPDATE T_PaiementPeriodique SET T_PaiementPeriodique.ProchainPaiPer = #" & Format(FuturPaiPer, "MM/DD/YY") & "# " _
                & "WHERE T_PaiementPeriodique.CodePaiPer=" & IDPaiPer & ";"
     
            oSQL.MoveNext
        Loop
     
        DoCmd.SetWarnings True
    End Function
    Ci-dessous l'erreur :
    Nom : erreur balise.JPG
Affichages : 93
Taille : 163,5 Ko

    Merci d'avance pour votre aide.

  6. #6
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    En L4 de votre sub vous avez la réponse pour corriger mon erreur.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  7. #7
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    A tester (n'étant pas certain d'avoir bien mis convenablement tous les délimiteurs: ' pour texte, # pour date).

    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
    Option Explicit
     
    Function MaJ_Periodique()
        Dim sSQL As String, oSQL As DAO.Recordset
        Dim IDPaiPer As String, LibPaiPer As String, MTPaiPer As String
        Dim MoisPaiPer As String, CodePmt As String
        Dim CodeJrnl As String, CodeSsJrnl  As String
        Dim RefAnal As Variant          '--- Variant pour gérer les NULL
        Dim CodePaiPer As String, Paiement As String, RefCompte As String
        Dim ProchainPaiPer As Date, FuturPaiPer As Date
     
        DoCmd.SetWarnings False
     
        'Je lis la table PaiementPeriodique pour ne récupérer que les paiements à faire
        sSQL = "SELECT * FROM T_PaiementPeriodique" _
            & " WHERE FinPaiPer>= #" & Format(Now(), "yyyy-mm-dd") & "#" _
            & " AND ProchainPaiPer<= #" & Format(Now(), "yyyy-mm-dd") & "#"
     
        'Exécute la requête
        Set oSQL = CurrentDb.OpenRecordset(sSQL)
        'Fait l'analyse de tous les paiements
        Do Until oSQL.EOF
            'Initialise mes variables
            IDPaiPer = oSQL("CodePaiPer")
            RefCompte = oSQL("RefCompte")
            ProchainPaiPer = oSQL("ProchainPaiPer")
            FuturPaiPer = DateAdd("m", 1, ProchainPaiPer)       'Ajoute un mois à la date du paiement
            MoisPaiPer = Format(ProchainPaiPer, "MMMM")                         'récupère le mois en texte
            ProchainPaiPer = "#" & Format(ProchainPaiPer, "yyyy-mm-dd") & "#"
            FuturPaiPer = "#" & Format(FuturPaiPer, "yyyy-mm-dd") & "#"
            LibPaiPer = oSQL("LibellePaiPer") & " " & StrConv(MoisPaiPer, vbProperCase)
            MTPaiPer = oSQL("MontantPaiPer")
            MTPaiPer = Replace(MTPaiPer, ",", ".")              '--- ? vraiment nécessaire
            Paiement = oSQL("Paiement")
            CodeJrnl = oSQL("CodeJrnl")
            CodeSsJrnl = oSQL("CodeSsJrnl")
            RefAnal = oSQL("RefAnal")
            CodePaiPer = oSQL("CodePaiPer")
     
            'Ajout la donnée dans la table Mouvements
            sSQL = "INSERT INTO T_Mouvements (" _
                  & " RefCompte, DateMvt, LibelleMvt, " _
                  & " MontantMvt, Paiement, CodeJrnl, " _
                  & " CodeSsJrnl, RefAnal, CodePaiPer)" _
                  & " VALUES ( " _
                  & "'" & RefCompte & "', " & ProchainPaiPer & ", '" & LibPaiPer & "', " _
                  & MTPaiPer & ", " & Paiement & ", '" & CodeJrnl & "', " _
                  & "'" & CodeSsJrnl & "', " & IIf(IsNull(RefAnal), "'" & RefAnal & "'", "NULL") & ", " & CodePaiPer & ")"
            Debug.Print sSQL
            DoCmd.RunSQL sSQL
     
            'Mise à jour de la date du prochain paiement dans la table PaiementPeriodique
            DoCmd.RunSQL "UPDATE T_PaiementPeriodique" _
                        & " SET ProchainPaiPer = " & FuturPaiPer _
                        & " WHERE CodePaiPer=" & IDPaiPer & ";"
     
            oSQL.MoveNext
        Loop
     
        Set oSQL = Nothing
        DoCmd.SetWarnings True
    End Function
    Ligne 31: il est possible de mettre en majuscule la première lettre d'un mot à l'aide de la fonction StrConv().

    Ligne 8: RefAnal est mis Variant pour gérer les Null

    Ligne 48: Pour ce qui est de la gestion des Null, il faut mettre NULL (sans délimiteur de texte) dans la requête SQL (alors qu'il faut si nécessaire mettre ces délimiteurs si non NULL). Il aurait été plus simple d'interdire les Null pour ce champ (mais cependant autoriser les chaines vides).

    Ligne 49: le Debug.Print permet de vérifier que la requête est bien correcte (que tous les délimiteurs sont bien mis). A supprimer ensuite.

    Pour ce qui du formatage des dates, il est recommandé de toujours utiliser le format international "yyyy-mm-dd".

    Cordialement.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour à vous deux,

    J'espère que vous allez bien.

    Je n'ai pas réussi à corriger les défauts après plusieurs heures de recherches dans les différents codes transmis surement par un manque de connaissance sur un détail.

    Donc, je suis passé par une méthode alternative qui n'est pas esthétique mais j'ai remplacé les codes analytiques nuls par le caractère "_" ce qui permet de résoudre le problème des valeurs nulles qui ne se comptabilise pas automatiquement.

    Encore merci pour votre aide.

    Benjamin.

  9. #9
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim RefAnal As Variant          '--- Variant pour gérer les NULL
    est une solution pour résoudre ce problème
    Dans la tbl T_Mouvements sur quelle position est la propriété Null interdit pour le champ RefAnal ?

    EDIT 2021.08.31 11:00
    Possible d'avoir un extrait de la bdd avec le jeu d'enregistrements qui pose problème et sans données sensibles ? (compresser en format zip ou rar)
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 297
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Merci pour votre retour.

    Oui j'avais renseigné "variant" pour l'utilisation NULL.

    La table mouvement interdit les valeurs nulls pour le champs RefAnal mais les chaines de caractères vides sont autorisées.

    Ci-dessous la base allégée sous format zip.
    DB_Comptabilisation_test.zip

    Bonne réception, et je reste à votre disposition pour toutes questions.

    Benjamin.
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Je viens de fouiller dans votre bdd.
    Il y a un problème, dans la mesure où vous avez une intégrité référentielle sur l'équi-jointure T_Mouvement.RefAnal et T_Analytique.RefAnal
    La valeur que doit prendre T_Mouvement.RefAnal doit exister dans T_Analytique.RefAnal
    Ce qui n'est pas le cas, puisque dans le jeu d'enregistrements de T_PaiementPeriodique RefAnal est vide de valeur.
    Dans la pj j'ai désactivé la macro Autoexec. Il y a un form 'frm" avec une sub() qui génèrera une runtime error 3201 si vous appliquez l'intégrité référentielle. En l'état, elle n'est pas appliquée, la sub() fonctionne.
    Fichiers attachés Fichiers attachés
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

Discussions similaires

  1. [XL-2007] Besoin d'aide pour erreur d'exécution VBA
    Par DarkBoon dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/08/2011, 10h51
  2. Réponses: 4
    Dernier message: 13/03/2006, 15h21
  3. HELP! Demande aide pour petit site à réaliser en ASP et JS
    Par itachi64 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/03/2006, 09h06
  4. Réponses: 2
    Dernier message: 11/03/2006, 19h34
  5. demande aide pour XML/XSL
    Par Jarod51 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/01/2006, 19h10

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