Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

GotoControl : quoi c'est qu'c' truc ?

2 réponses
Avatar
Gloops
Bonjour tout le monde,

Ma base me fait des mis=E8res pour ex=E9cuter un DoCmd.GotoControl

Dans un premier temps, lorsqu'on me disait que le contr=F4le n'existait=20
pas, et que je me retrouvais en mode arr=EAt dans le code, je n'avais qu'=
=E0=20
appuyer sur F5 et comme par magie on le retrouvait tout de suite, la=20
fantaisie =E9tant reproductible =E0 volont=E9.

Alors, je me suis dit que le fait qu'un code soit en cours d'ex=E9cution =

pouvait mettre la zizanie, et j'ai report=E9 la suite =E0 Form_Timer. Ben=
=20
ni=EBt, c'est pareil.

Le plus =E9trange est que maintenant on me dit qu'il n'y a pas de champ=20
nomm=E9 comme cela dans le jeu d'enregistrements sous-jacent, or l'aide d=
e=20
GotoControl ne parle pas du tout d'enregistrement, on peut m=EAme dire qu=
e=20
=E7a lui est compl=E8tement =E9tranger : elle parle bien de nom de contr=F4=
le,=20
dans un formulaire, pas dans un jeu d'enregistrements.

Alors finalement, c'est le nom du contr=F4le, qu'il faut mettre, ou celui=
=20
du champ de la requ=EAte source du formulaire ? De toute mani=E8re, on ne=
=20
veut ni de l'un ni de l'autre.

C'est m=EAme au point qu'on me refuse :

DoCmd.GotoControl Screen.ActiveForm(2).Name

En me disant qu'il n'y a pas de contr=F4le qui s'appelle comme =E7a, apr=E8=
s=20
m'avoir trouv=E9 le nom quand m=EAme. Fort, non ?


Je finis pas laisser tomber, et =E0 la place du FindRecord, passer par le=
=20
RecordsetClone. Quand m=EAme, =E7a serait bien de savoir, ne serait-ce=20
qu'histoire de mourir moins b=EAte.


Une petite pr=E9cision : le bouton qui a ouvert le formulaire d'o=F9 est =

d=E9clench=E9 le code, est dans un sous-formulaire de quatri=E8me niveau,=
dans=20
le formulaire sur lequel je cherche =E0 d=E9clencher un GotoControl. Le=20
contr=F4le vis=E9 est dans le formulaire principal, j'ai pris soin de le =

rendre actif, au pr=E9alable, avec un SetFocus, et de v=E9rifier le r=E9s=
ultat=20
par Debug.Print Screen.ActiveControl.Name

Access 2003 SP2 sur Windows XP Pro SP2 2002,
base au format Access 2000.

2 réponses

Avatar
C15
Bonjour,

Et DoCmd.GotoControl "mon controle", cela ne marche pas ?
en prenant la précaution que le nom de ton contrôle dans ton formulaire soit
différent du nom du champ de ta source.

A+

C15


"Gloops" a écrit dans le message de news:

Bonjour tout le monde,

Ma base me fait des misères pour exécuter un DoCmd.GotoControl

Dans un premier temps, lorsqu'on me disait que le contrôle n'existait
pas, et que je me retrouvais en mode arrêt dans le code, je n'avais qu'à
appuyer sur F5 et comme par magie on le retrouvait tout de suite, la
fantaisie étant reproductible à volonté.

Alors, je me suis dit que le fait qu'un code soit en cours d'exécution
pouvait mettre la zizanie, et j'ai reporté la suite à Form_Timer. Ben
niët, c'est pareil.

Le plus étrange est que maintenant on me dit qu'il n'y a pas de champ
nommé comme cela dans le jeu d'enregistrements sous-jacent, or l'aide de
GotoControl ne parle pas du tout d'enregistrement, on peut même dire que
ça lui est complètement étranger : elle parle bien de nom de contrôle,
dans un formulaire, pas dans un jeu d'enregistrements.

Alors finalement, c'est le nom du contrôle, qu'il faut mettre, ou celui
du champ de la requête source du formulaire ? De toute manière, on ne
veut ni de l'un ni de l'autre.

C'est même au point qu'on me refuse :

DoCmd.GotoControl Screen.ActiveForm(2).Name

En me disant qu'il n'y a pas de contrôle qui s'appelle comme ça, après
m'avoir trouvé le nom quand même. Fort, non ?


Je finis pas laisser tomber, et à la place du FindRecord, passer par le
RecordsetClone. Quand même, ça serait bien de savoir, ne serait-ce
qu'histoire de mourir moins bête.


Une petite précision : le bouton qui a ouvert le formulaire d'où est
déclenché le code, est dans un sous-formulaire de quatrième niveau, dans
le formulaire sur lequel je cherche à déclencher un GotoControl. Le
contrôle visé est dans le formulaire principal, j'ai pris soin de le
rendre actif, au préalable, avec un SetFocus, et de vérifier le résultat
par Debug.Print Screen.ActiveControl.Name

Access 2003 SP2 sur Windows XP Pro SP2 2002,
base au format Access 2000.
Avatar
Gloops
C15 a écrit, le 26/11/2007 06:12 :
Bonjour,

Et DoCmd.GotoControl "mon controle", cela ne marche pas ?
en prenant la précaution que le nom de ton contrôle dans ton formul aire soit
différent du nom du champ de ta source.

A+

C15



Tu penses bien que j'ai essayé ça.
Il y a un truc qui m'a échappé, il me semblait que même à suppose r que
j'aie commis une erreur, le message ne s'appliquait pas.
J'ai essayé aussi bien le nom du champ que celui du contrôle.

Je crains que cette affaire demeure mystérieuse ; merci quand même
d'avoir essayé.

Je me demande si, au contraire, ça n'aurait pas marché mieux avec un
contrôle qui porte le même nom que le champ.

Pour finir, je n'ai pas essayé car j'ai réalisé que l'emploi de cet te
instruction ne pouvait de toute manière pas s'appliquer pour ce que je
veux faire, puisque j'ai fini par interdire l'ajout d'enregistrement à
partir du sous-formulaire, donc la zone réservée à ce sous-formulai re
est remplacée par un rectangle bleu si aucun enregistrement n'existe
déjà dans la table du sous-formulaire, pour l'enregistrement au-dessu s.

Du coup ça m'a rafraîchi les idées. Quand on a plusieurs
sous-formulaires imbriqués et que les enregistrements doivent être cr éés
simultanément, qu'il faut donc interdire la création par le formulair e,
pas de GotoControl, mais plutôt quelque chose du style

Set Rs = Qdf.OpenRecordset()

Rs.AddNew
Rs!UnChamp = UneValeur
memClef = Rs!LaClef 'surtout si NuméroAuto
Rs.Update
Rs.Close

Me.Requery ' Très important ;)

Set Rs = Me.RecordsetClone
Rs.FindFirst("LaClef = " & memClef)
Me.Bookmark = Rs.Bookmark
Rs.Close
Set Rs = Nothing

et je dis "du style", parce qu'il faut jouer à ça sur plusieurs table s
liées entre elles, donc avec report de clef externe d'un enregistrement
créé sur un autre.

Et pour finir, ça marche.