BASE : Propriété CONTROLS non trouvée

Bonjour,

Dans une base de données, j’ai un formulaire de saisie : SAISIE_ADH_LANGUES qui utilise un formulaire principal et un sous-formulaire. Or, j’ai besoin d’accéder aux champs du sous-formulaire pour effectuer des contrôles, et, dans les macros, je tombe toujours sur la même erreur : Propriété ou Méthode non trouvée : CONTROLS.

La bibliothèque ACCESS2BASE indique des solutions mais qui, dans mon contexte, ne fonctionnent pas :

  • utilisation de la propriété “COUNTS” pour compter le nombre de champs d’un sous-formulaire (et y accéder).
  • la propriété CONTROLS est utilisée dans l’exemple fourni avec la procédure “BrowseThruControls”

J’ai mis la base en annexe. Il suffit de lancer le formulaire SAISIE_ADH_LANGUES et de regarder la macro associée dans le module Saisie_LNG.

Problème : La taille de la base est trop volumineuse pour être en pièces jointes (alors que je l’ai réduite au strict minimum)!!! Je vais mettre au moins le fichier des macros ( voir Sub CTRL_NIV ).

J’en appelle aux experts ayant une compétence sur les macros et la bibliothèque ACCESS2BASE.

Grand merci à celui ou celle qui pourra m’aider. Je bloque sur ce problème depuis plusieurs jours et j’ai vu que d’autres avaient relevé également ce problème d’accès aux sous-formulaires.
Macros_SAISIE_LNG.docx
Cordialement,
Yves Gravot

Bonsoir @Yves-gravot

Sans être expert, loin de là, je suis surpris par ce bout de code :

oForm = oDrawpage.forms.getByName("MainForm")
oFieldID = oForm.getByName("fmtID_ADHERENT")
oSubForm = oDrawpage.forms.getByName("MainForm")

A mon sens, cela revient à “rater” le sous-formulaire qui ne devrait pas porter le même nom que le formulaire principal et tous les objets rattachés à oSubForm seront en fait ceux rattachés à “MainForm”, le formulaire principal.

Vous devriez remplacer le 2e MainForm par le nom du sous-formulaire, tel qu’il apparaît dans les Propriétés du formulaire, onglet Général, à Nom après avoir cliqué sur le sous-formulaire en cours d’édition.

Cordialement, Michel

Bonjour @YvesGravot, @mgl

Il y a bien une erreur à l’endroit indiqué par @mgl mais ce n’est pas celle indiquée : les sous-formulaires peuvent très bien avoir le même nom que le formulaire (même si cela n’aide pas à s’y retrouver). En revanche il faudrait remplacer

oSubForm = oDrawpage.forms.getByName("MainForm")

par

oSubForm = oForm.forms.getByName("MainForm")

Cela dit, il semble que ce n’est pas pour cette partie du code que la question est posée mais pour CTRL_NIV dans laquelle tu définis deux fois, différemment la variable oMainForm :

oMainForm = oDrawpage.forms.getByName("MainForm")

puis

Set oMainForm = Forms('MainForm')

Je ne connais Access2Base que de nom mais cette deuxième ligne me parait incorrecte : Forms n’a pas été définie (à moins que ce ne soit alimenté par Access2Base…) Cette ligne est en tout cas inutile puisque la variable est déjà définie.

Cordialement