Partager via

Access - Problème avec le code VBA d'un bouton Ajout d'un formulaire

Anonyme
2021-05-31T19:27:43+00:00

Bonjour,

Je travaille pour une congrégation religieuse et j'ai une base de données de gestion d'information sur les religieuses. Cette base de données a été créée sous Access 2003, migrée en Access 2010, puis en Access 2016 l'an dernier.

J'ai trois tables liées par le numéro de matricule de la nouvelle religieuse, avec une relation un-à-un avec intégrité référentielle :

  • Personne, qui donne les informations courantes d'une religieuse : nom, prénom, date de naissance, etc.
  • Histoire, qui donne les informations familiales;
  • Religion, qui donne les informations sur sa vie religieuse.

Quand j'ajoute une religieuse, l'information doit donc s'ajouter dans les trois tables. J'ai un formulaire qui permet d'ajouter un enregistrement dans les trois tables à partir des informations d'une autre table (Novice). Tout fonctionnait parfaitement depuis des années. Mon problème c'est que depuis que j'utilise Access 2016, le code VBA du bouton d'ajout du formulaire ne fonctionne plus. Je reçois le message que je ne peux ajouter un enregistrement dans la table Personne, car un enregistrement est requis dans la table Histoire.

Je ne comprends pas pourquoi cela fonctionnait sous Access 2010, et que ça ne marche plus sous Access 2016. Je n'avais pas touché au code VBA, ni aux relations entre les tables. J'utilise des recordsets pour copier les informations dans chacune des tables et une fonction « Addprofesse » avec la méthode Addnew pour ajouter le numéro de matricule que je demande à l'utilisateur.

Voici un extrait du code :

Private Sub Ajoutprofesse

*Déclarations

***

    Set bds = CurrentDb

    Set rst = bds.OpenRecordset("SELECT * FROM PERSONNE" & _

        " ORDER BY PERSONNE.NUM DESC;", dbOpenDynaset)

* Ici, il y a le message demandant le numéro de matricule à l'utilisateur.

    rst.MoveFirst

    Notemp = InputBox(Message, Titre)

    If Notemp = "" Then

        rst.Close

        bds.Close

        Exit Sub

    Else

        Nopers = Notemp

    End If

    Addprofesse rst, Nopers, Nompers

    With rst

        .Bookmark = .LastModified

        .Edit

        !PRENOM = Prenompers

        !DATE_NAIS = Nz(Me!DATE_NAIS)

        !DATE_TEMPO = Nz(Me!DATE_TEMPO)

        !PROV_ACT = Me!PROV_ACT

        !Remarque = Nz(Me!REM_CAND)

        .Update

    End With

    rst.Close

    Set rst = bds.OpenRecordset("SELECT * FROM HISTOIRE;", dbOpenDynaset)

    Addprofesse rst, Nopers, Nompers

    With rst

        .Bookmark = .LastModified

        .Edit

        !ASS_SOC = Nz(Me!ASS_SOC)

        !ASS_MAL = Nz(Me!ASS_MAL)

        !VILLE_NAIS = Nz(Me!VILLE_NAIS)

* Autres champs

        .Update

    End With

    rst.Close

    Set rst = bds.OpenRecordset("SELECT * FROM RELIGION;", dbOpenDynaset)

    Addprofesse rst, Nopers, Nompers

* Suite du code de la procédure Ajoutprofesse pour l'ajout des informations dans la table Religion.

***

bds.Close

Set Nomform = Me![Ajout professe SF]  
DoCmd.Requery Nomform.Name

End Sub

J'ai essayé de créer des recordsets avec un nom spécifique à chaque table pour que je puisse les mettre avant le « rst.Close » du recordset lié à la table PERSONNE, afin d'ajouter tout de suite le nouveau matricule qui est maintenant ajouté dans la table Personne, mais j'ai eu le même message d'erreur.

Merci de me conseiller, car je ne comprends vraiment pas pourquoi cela ne fonctionne plus et je n'ai pas envie d'entrer toutes les données manuellement dans les trois tables.

Microsoft 365 et Office | y accéder | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

2 réponses

  1. Anonyme
    2021-06-01T15:55:41+00:00

    Est-ce possible de nous fournir une version démo de votre base de données? Supprimer les données, téléchargé le site un répertoire tel OneDrive, GoogleDrive, Dropbox, puis nous fournir le lien.

    Normalement, il n'y a aucun besoin de pousser des données de tel manière. Si les tables et sous formulaires sont bien conçu, ils devraient être reliés par les clefs primaire des tables. C'est pour ceci qu'en voyant votre base de données il nous sera bien plus facile de vous aider.

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2021-05-31T21:45:54+00:00

    Nous utilisons un service de traduction pour assister nos utilisateurs. Veuillez nous excuser pour les éventuelles erreurs grammaticales.

    Salut Yvonne, je suis un conseiller indéte et je vais essayer d’aider.

    Ma première question est pourquoi la relation 1-1? Bien que de telles relations aient leur place, je ne les vois pas ici. Chaque religieuse n’aurait-elle pas un dossier dans les trois tables ? La principale raison d’utiliser un 1-1 est lorsque vous avez des enregistrements dans la table principale qui peuvent ne pas avoir d’enregistrements dans les tables enfants. Ainsi, en remplissant les trois tables en même temps, vous indiquez que vous n’avez pas besoin de plusieurs tables, mais que vous pouvez en utiliser une.

    Avec chaque version d’Access, la syntaxe VBA est renforcée. C’est ce que le code qui fonctionnait précédemment peut ne pas fonctionner dans une version plus récente. C’est peut-être ce qui cause votre problème. Bien que je vous recommande de refaire votre structure de table, vous pourrez peut-être réorganiser votre code.

    Utilisez-vous un formulaire lié ? Si c’est le cas, pourquoi ajoutez-vous un enregistrement à Person ? Le formulaire devrait le faire. En fait, vous n’avez besoin d’aucun code. Vous devriez être en mesure d’utiliser un formulaire principal Lié à la personne et des sous-formulaires liés à l’histoire et à la religion liés sur le numéro mautilite. Vous pouvez même faire en sorte que les sous-formulaires ressemblent à une partie du formulaire principal.

    Si vous avez besoin d’éclaircissements supplémentaires à ce sujet, n’hésitez pas à demander.

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

    0 commentaires Aucun commentaire