erreur exécution '3020' dans Access office 2010

Anonyme
2013-09-18T08:59:40+00:00

Bonjour,

Lorsque j'exécute une fonction comprenant addnew ou edit se terminant pas update dans Access office 2010  j'ai cette erreur '3020' qui me dit que je n'ai pas addnew ou edit.

Cette erreur se produit dans Access office 2010 ou office 2013.

Par contre, cette erreur ne se produit pas dans Access Office XP.

Mystère, aucune des réponses que j'ai pu glaner n'ont été satisfaisantes jusque maintenant.

D'avance merci pour votre aide.

@+

Guy FALESSE

Microsoft 365 et Office | Access | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la communauté de support Microsoft. Vous pouvez voter pour savoir si c’est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ou suivre la question.

0 commentaires Aucun commentaire

64 réponses

Trier par : Le plus utile
  1. Anonyme
    2013-09-18T15:13:48+00:00

    Bonsoir loufab,

    Ce que je n'arrive pas à comprendre, c'est pourquoi, la fonction fonctionne bien sous Access XP.

    Je suis assez mécontent du fait que l'office 2013 pro a été acheté pour rien, finalement.

    Parce que finalement, c'est Microsoft qui est en défaut là et qu'il ne donne pas la recette pour corriger ce bug.

    Il faut donc demander de l'aide, c'est embêtant.

    @+

    Fguy

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire
  2. Anonyme
    2013-09-18T13:42:37+00:00

    A ta place j'éviterais d'instancier le formulaire dans un objet et de traiter les modifs au travers de celui-ci.

     

    J'avoue que je ne comprends pas ce que ça veut dire, je ne suis pas un super doué en Access :-)

    Je ferais directement des affectations dans la pile comme ceci :

     

    Forms.FactureExMeca.Numfact = ....

    c'est là, sans doute ça coince, il faut mettre le dernier n° de facture +1

     

    Note que ton With ne sert pas à grand chose dans ce cas, pourquoi ne pas l'utiliser pour le forms.

     

    With forms.F_Meca

    .controls("NCL").value = Forms.client.controls("NCL").value

     

    PS : Le ! est utilisé pour faire référence au nom de la colonne dans la source alors que le . fait référence aux contrôles.

     

    Mon exemple est un peu verbeux, tu peux simplifier en omettant controls() et value.

     

    Cordialement,

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire
  3. Anonyme
    2013-09-18T13:16:33+00:00

    A ta place j'éviterais d'instancier le formulaire dans un objet et de traiter les modifs au travers de celui-ci.

    Je ferais directement des affectations dans la pile comme ceci :

    Forms.FactureExMeca.Numfact = ....

    Note que ton With ne sert pas à grand chose dans ce cas, pourquoi ne pas l'utiliser pour le forms.

    With forms.F_Meca

    .controls("NCL").value = Forms.client.controls("NCL").value

    PS : Le ! est utilisé pour faire référence au nom de la colonne dans la source alors que le . fait référence aux contrôles.

    Mon exemple est un peu verbeux, tu peux simplifier en omettant controls() et value.

    Cordialement,

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire
  4. Anonyme
    2013-09-18T12:05:25+00:00

    Bonjour,

    Ce n'est pas très clair. Peux-tu poster le code ?

    Cordialement,

    Merci pour ta réponse :-)

    Voilà le code:

    Public Function NouvelleFactureMe()

        Dim rstFact As Recordset, maBD As Database, Rep As String

        Dim meF As Form, meCL As Form

        Set maBD = CurrentDb

        Rep = MsgBox("Est-ce bien une nouvelle facture" & vbLf & vbLf & _

            "MECANIQUE" & vbLf & vbLf & _

            "que vous voulez créer ?", vbQuestion + vbDefaultButton1 + vbYesNo, "Contrôle type facture")

        If Rep = vbNo Then

            Exit Function

        End If

    '-------------------------------------------------------------------

        Set rstFact = maBD.OpenRecordset("Facturation", dbOpenDynaset)

        With rstFact

            If .RecordCount > 0 Then

                'DoCmd.OpenForm "FacturesExMeCa"

                DoCmd.OpenForm "FacturesExMeCa", acNormal, "", "", acAdd, acNormal

                Set meF = Forms![FacturesExMeCa]

                meF!Numfact = DMax("numfact", "facturation") + 1

                meF![NCL] = Forms!Clients![NCL]

                meF![Nom] = Forms!Clients![Nom]

                meF!TF = "FME"

                meF!NFactLettre = "FME" & meF!Numfact

                meF!Cadre48.Visible = False

            End If

        End With

    '--------------------------------------------------------------------

        Set maBD = Nothing

        Set rstFact = Nothing

        Set meF = Nothing

    End Function

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire
  5. Anonyme
    2013-09-18T09:45:06+00:00

    Bonjour,

    Ce n'est pas très clair. Peux-tu poster le code ?

    Cordialement,

    Cette réponse vous a-t-elle été utile?

    0 commentaires Aucun commentaire