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

IHM Discussion :

Message d'erreur suite à l'exécution d'un formulaire [AC-2003]


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut Message d'erreur suite à l'exécution d'un formulaire
    Bonsoir,

    J'utilise une base de donnée Access pour gérer un stock. J'ai un tableau de grilles de crible et un tableau de d'intervention appeler "tbMouvementGrille" avec un numéro de grille, une date de début et une date de fin (je lui affecte par défaut 31/12/9999 comme valeur pour un état en cour) comme champs. J'ai un formulaire qui me permet d'enregistrer les interventions sur mes grilles. Pour ce faire, j'ai un premier formulaire dans lequel j'ai une liste de toutes mes grilles en service et un deuxième formulaire qui s'affiche une fois la grille sélectionnée pour créer un nouvelle état (en service, stock, HS, etc.). Lorsque je choisi une grille, je souhaite affecter une nouvelle date de fin à l'enregistrement précédent de la grille, c'est à dire passer de 31/12/9999 à la date de l'intervention et créer un nouvel enregistrement. J'ai le code suivant sur mon premier formulaire :

    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
     
    Private Sub Commande5_Click()
        Dim idInter As Long
        Dim lng As Long
        Dim DateInter As Date
     
        'Message d'erreur s'il n'y a pas de date
        If IsNull(Me!Texte2) = True Then
            MsgBox "Vous n'avez pas entré de date d'intervention", vbOKOnly, "Attention, date manquante !"
        End If
     
        ' on verifie que l'on a bien selectionné une liste
        DateInter = Me!Texte2
        If IsNull(Liste0.Column(0)) Then
            MsgBox "Vous n'avez pas choisi de grille", vbOKOnly, "Attention, date manquante !"
            Exit Sub
        Else
        idInter = Liste0.Column(0)
        End If
        'On enregistre la date de l'intervention et le numéro de l'intervention
        Call MAJ_MouvementPrecedent(idInter, DateInter)
     
        DoCmd.OpenForm "MouvementGrille", acNormal, , , , , idInter
     
     
    End Sub
     
    Private Sub Commande6_Click()
        DoCmd.Close
    End Sub
    Private Sub MAJ_MouvementPrecedent(prmNumMouvement As Long, prmDateMouvement As Date)
       Dim numMouvementPrecedent As Variant
       numMouvementPrecedent = prmNumMouvement
     
       If Not (IsNull(numMouvementPrecedent)) Then
          'Il y a un mouvement précédent
         Dim db As dao.Database: Set db = CurrentDb
         Dim r As dao.Recordset: Set r = db.OpenRecordset("tbMouvementGrille", dbOpenDynaset)
     
         If Not r.NoMatch Then
             r.Edit
             r![DateFinEtat] = prmDateMouvement
             r.Update
           Else
             Error (5): 'Cas normalement impossible car on vient de le trouver
         End If
     
         r.Close: Set r = Nothing: 'Ferme le recordset et libère la mémoire utilisée.
         db.Close: Set db = Nothing: 'Ferme la database et libère la mémoire utilisée.
       End If
     
    End Sub
    Et le code suivant sur mon deuxième formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Open(Cancel As Integer)
        If Me.OpenArgs = "GotoNew" Then
        DoCmd.GoToRecord , , acNewRec
        Else
            If Not IsNull(Me.OpenArgs) And Me.OpenArgs <> "GotoNew" Then
                Me.idPrecedenteInterv = Me.OpenArgs
            Else
                'Ne rien faire ou faire autre chose d'utile
            End If
        End If
    End Sub
    Lorsque je sélectionne un grille, j'ai le message d'erreur suivant qui s'affiche : "Erreur d'exécution '-2147352567 (80020009)': Impossible d'attribuer une valeur à cette objet. "
    avec le débogage qui me surligne la ligne suivante dans le code du deuxième formulaire mais j'arrive pas trop à comprendre pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Me.idPrecedenteInterv = Me.OpenArgs
    Auriez-vous une idée d'ou pourrai venir le problème ?
    Merci d'avance
    Sébastien

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 352
    Points : 23 818
    Points
    23 818
    Par défaut
    Essaye de déplacer ton code dans l'événement Au Chargement (On load).

    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And Me.OpenArgs <> "GotoNew"
    ne sert :a rien car si tu es déjà là c'est que Me.OpenArgs est différent de "GotoNew" sinon tu n'y serais pas.

    Un dernier point, les Nulls sont un peu pénibles. Une comparaison entre un null et n'importe quoi donne Null et il n'est pas touours évident de savoir ce que le code va faire avec cela.

    Si tu t'attends a avoir un Null il est plus prudent de traiter le null séparément.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if not isNull(Me.OpenArgs) then
     
          if Me.OpenArgs<>"GotoNew" then
                'Traîter ce cas
              else
                Traiter l'autre cas
          end if
     
       else
          'Traiter le cas où la valeur est null
    end if
    comme cela jamais le Null n'est utilisé directement dans une comparaison.

    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut
    Merci marot_r pour ta réponse,

    j'ai essayé ta proposition mais j'ai toujours le même problème qui s'affiche. J'ai toujours le même message d'erreur avec le débogage sur la même ligne.

    Je ne comprends vraiment pas d'ou peut venir le problème.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    J'ai repris une ancienne version de ma base de donnée qui fonctionnait et j'ai copié le formulaire qui me posait problème et je n'ai plus le message qui apparaît mais j'ai toujours un problème au niveau de la modification de mes enregistrements. Au lieu de modifier la date de fin comme le programme devrait le faire, la date de fin reste inchangée (31/12/9999), j'ai donc deux ou plusieurs enregistrements de la même grille avec comme date de fin 31/12/9999.

    Voilà le code du deuxième formulaire qui fonctionne maintenant (c'est le même à priori, je pense que le problème devait venir d'un mauvais format de cellule ...) :

    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_Open(Cancel As Integer)
     
        DoCmd.GoToRecord , , acNewRec 'Ouvre la feuille sur un nouvel enregistrement
        If Me.OpenArgs = "GotoNew" Then
        DoCmd.GoToRecord , , acNewRec
        Else
            If Not IsNull(Me.OpenArgs) Then
                Me.idPrecedenteInterv = Me.OpenArgs
            Else
                'Ne rien faire ou faire autre chose d'utile
            End If
        End If
    End Sub
    Seb

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 352
    Points : 23 818
    Points
    23 818
    Par défaut
    Quel code utilises-tu pour la mise à jour ?

    A+

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut
    Salut,

    j'utilise le code suivant pour mettre à jour ma base de donnée "tbintervention"

    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
    Private Sub Commande5_Click()
        Dim idInter As Long
        Dim lng As Long
        Dim DateInter As Date
     
        'Message d'erreur s'il n'y a pas de date
        If IsNull(Me!Texte2) = True Then
            MsgBox "Vous n'avez pas entré de date d'intervention", vbOKOnly, "Attention, date manquante !"
        End If
     
        ' on verifie que l'on a bien selectionné une liste
        DateInter = Me!Texte2
        If IsNull(Liste0.Column(0)) Then
            MsgBox "Vous n'avez pas choisi de grille", vbOKOnly, "Attention, date manquante !"
            Exit Sub
        Else
        idInter = Liste0.Column(0)
        End If
        'On enregistre la date de l'intervention et le numéro de l'intervention
        Call MAJ_MouvementPrecedent(idInter, DateInter)
     
        DoCmd.OpenForm "MouvementGrille", acNormal, , , , , idInter
     
     
    End Sub
     
    Private Sub Commande6_Click()
        DoCmd.Close
    End Sub
    Private Sub MAJ_MouvementPrecedent(prmNumMouvement As Long, prmDateMouvement As Date)
       Dim numMouvementPrecedent As Variant
       numMouvementPrecedent = prmNumMouvement
     
       If Not (IsNull(numMouvementPrecedent)) Then
          'Il y a un mouvement précédent
         Dim db As dao.Database: Set db = CurrentDb
         Dim r As dao.Recordset: Set r = db.OpenRecordset("tbMouvementGrille", dbOpenDynaset)
     
         If Not r.NoMatch Then
             r.Edit
             r![DateFinEtat] = prmDateMouvement
             r.Update
           Else
             Error (5): 'Cas normalement impossible car on vient de le trouver
         End If
     
         r.Close: Set r = Nothing: 'Ferme le recordset et libère la mémoire utilisée.
         db.Close: Set db = Nothing: 'Ferme la database et libère la mémoire utilisée.
       End If
     
    End Sub

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 352
    Points : 23 818
    Points
    23 818
    Par défaut
    As-tu vérifié que les données n'étaient pas mise à jour ?

    Il se peut que l'affichage ne change pas mais que tes données soient bien modifiées.

    A+

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut
    Bonjour marot_r,

    je viens de faire l'essai et le mise à jour ne se fait pas comme elle devrait se faire, voici un exemple des enregistrements que je viens d'essayer :

    idMouvement//Grille// MarquageGrille// TypeEtat// DateDebutEtat// DateFinEtat// Personnel// Affectation// Commentaire// idPrecedenteInterv
    30// C035M13N-1// Montée// 08/02/2011// 31/12/9999// EMPLOYE1// C111// // 4.
    32// C035M13N-1// HS// 09/02/2011// 31/12/9999// EMPLOYE1// HS// 30.

    La date soulignée aurai du être remplacée par 09/02/2011. Y a vraiment un truc qui m'échappe là.

    A+

    Seb

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 352
    Points : 23 818
    Points
    23 818
    Par défaut
    Mets un point d'arret sur le Private Sub MAJ_MouvementPrecedent (Tu cliques dans la marge à gauche de l'instruction et cela va mettre un gros point marron.)

    L'éxécution va s'arréter là et passer en mode débug, et tu vas pouvoir voir le code s'exécuter en appuyant sur la touche [F8].

    Probalement que numMouvementPrecedent est null mais je ne vois pas pourquoi.

    A+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut
    Bonsoir marot_r,

    je viens d'effectuer ta méthode d'exécution du programme pas à pas et je ne vois pas ce qui cloche. numMouvementPrecedent prend bien la bonne valeur par contre y'a un truc qui me turlupine. Il me semble qu'on n'emploi pas le numMouvementPrecedent dans le Sub MAJ_MouvementPrecedent. On affecte juste sa valeur mais après je ne vois pas ou on lui dit "va chercher l'enregistrement du numéro numMouvementPrecedent pour changer la valeur du champs [DateFinEtat]". J'ai été aidé pour cette partie du code car je ne maîtrise pas du tout la partie dao. Aurai-je oublié quelque chose ?

    Seb

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    J'ai essayé de modifier mon code avec une autre approche :

    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
    Private Sub MAJ_MouvementPrecedent(prmNumMouvement As Long, prmDateMouvement As Date)
       Dim numMouvementPrecedent As Variant
       numMouvementPrecedent = prmNumMouvement
     
       If Not (IsNull(numMouvementPrecedent)) Then
          'Il y a un mouvement précédent
         Dim db As dao.Database
         Dim r As dao.Recordset
         Dim strSQL As String
     
         strSQL = "SELECT tbMouvementGrille.idMouvementGrille FROM tbMouvementGrille WHERE (((tbMouvementGrille.idMouvementGrille)=" & prmNumMouvement & "))"
         Set db = CurrentDb
         Set r = db.OpenRecordset(strSQL, dbOpenDynaset)
     
         If Not r.NoMatch Then
             r.Edit
             r![DateFinEtat] = prmDateMouvement
             r.Update
           Else
             Error (5): 'Cas normalement impossible car on vient de le trouver
         End If
     
         r.Close: Set r = Nothing: 'Ferme le recordset et libère la mémoire utilisée.
         db.Close: Set db = Nothing: 'Ferme la database et libère la mémoire utilisée.
       End If
     
    End Sub
    J'ai un problème au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
             r![DateFinEtat] = prmDateMouvement
    Lorsque je passe la souris sur cette ligne en mode debug, il me met le message suivant :
    r![DateFinEtat] = < Élément non trouvé dans cette collection.>

    Je vois pas d'où ça pourrait venir. Je vais me pencher dessus.

    A+

    Seb

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 352
    Points : 23 818
    Points
    23 818
    Par défaut
    Citation Envoyé par rafalemirage Voir le message
    Bonsoir marot_r,

    je viens d'effectuer ta méthode d'exécution du programme pas à pas et je ne vois pas ce qui cloche. numMouvementPrecedent prend bien la bonne valeur par contre y'a un truc qui me turlupine. Il me semble qu'on n'emploi pas le numMouvementPrecedent dans le Sub MAJ_MouvementPrecedent. On affecte juste sa valeur mais après je ne vois pas ou on lui dit "va chercher l'enregistrement du numéro numMouvementPrecedent pour changer la valeur du champs [DateFinEtat]". J'ai été aidé pour cette partie du code car je ne maîtrise pas du tout la partie dao. Aurai-je oublié quelque chose ?

    Seb
    Tu as parfaitement raison il manque carrément la ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    r.findfirst("[NomTonChampNumero]=" & numMouvementPrecedent)
    à mettre juste avant le if r.nomatch then

    A+

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Points : 36
    Points
    36
    Par défaut
    Merci marot_r

    j'ai essayé plusieurs solutions mais j'avais pas mis la bonne syntaxe. En tout cas, maintenant ça marche nickel. Heureusement que tu traînais dans le coin .

    Merci

    Seb

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

Discussions similaires

  1. [MySQL] message d'erreur suite à login
    Par hugodu28 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/09/2012, 01h15
  2. Réponses: 4
    Dernier message: 25/09/2012, 14h57
  3. Message d'erreur Windows et exécution d'OpenMP
    Par nanath02 dans le forum Threads & Processus
    Réponses: 12
    Dernier message: 28/03/2010, 15h22
  4. Message d'erreur bizarre à l'exécution
    Par khtarius dans le forum Fortran
    Réponses: 5
    Dernier message: 23/04/2007, 09h51
  5. [ASP] message d'erreur (impossible d'excuter un projet ...)
    Par haganidjamel dans le forum Delphi .NET
    Réponses: 6
    Dernier message: 06/09/2005, 17h28

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