OVH Cloud OVH Cloud

OrderBy et OpenArgs

9 réponses
Avatar
Xavier HUE
Bonjour la communaut=E9,

Access XP SP1, Win 2000 Pro SP3.

Je perds la d=E9finition de la propri=E9t=E9 OpenArgs dans un=20
formulaire si j'utilise la propri=E9t=E9 OrderBy.


Le probl=E8me est reproductible:
- Une base neuve contenant:

=3D> Formulaire1 avec un bouton de commande et le code:
Option Compare Database
Option Explicit

Private Sub CmdOuvrirFormulaire2_Click()
DoCmd.OpenForm "Formulaire2", acNormal, , ,=20
acFormPropertySettings, acWindowNormal, "Formulaire1"
Me.Visible =3D False
End Sub

=3D> Formulaire2, cr=E9=E9 par assistant, fond=E9 sur Table1, en=20
mode tabulaire, avec 2 boutons de commande.
Un pour fermer le formulaire, et un pour appliquer un=20
ordre de tri.
Le code:
Option Compare Database
Option Explicit

Private Sub CmdFermerFormulaire2_Click()
MsgBox "CmdFermer " & Me.OpenArgs
DoCmd.Close acForm, Me.Name, acSavePrompt
End Sub

Private Sub CmdAppliquerOrderBy_Click()
MsgBox "Avant OrderBy " & Me.OpenArgs
Me.OrderBy =3D "Lib"
Me.OrderByOn =3D True
MsgBox "Apres OrderBy " & Me.OpenArgs
End Sub

Private Sub Form_Close()
MsgBox "Form_Close" & Me.OpenArgs
Call AfficherFormulairePrecedent(Me.OpenArgs)
End Sub

=3D> Table1(Id#, Lib) les 2 champs sont Texte.

=3D> Module1 avec la proc=E9dure suivante
Option Compare Database
Option Explicit

Sub AfficherFormulairePrecedent(strNomForm As String)
Forms(strNomForm).Visible =3D True
End Sub

Ce qui se passe:
1) Ouvrir Formulaire1
2) Cliquer sur le bouton CmdOuvrirFormulaire2
=3D> Formulaire1 est rendu invisible
=3D> Formulaire2 s'ouvre
3) Cliquer sur le bouton CmdFermerFormulaire2
=3D> Formulaire2 est ferm=E9
=3D> Formulaire1 est rendu visible

4) Cliquer sur le bouton CmdOuvrirFormulaire2
=3D> Formulaire1 est rendu invisible
=3D> Formulaire2 s'ouvre
5) Cliquer sur le bouton CmdAppliquerOrderBy
=3D> Les infos sont tri=E9es sur le champ "lib"
6) Cliquer sur le bouton CmdFermerFormulaire2
=3D> Dans certain cas =E7a plante imm=E9diatement sur Call=20
AfficherFormulairePrecedent(Me.OpenArgs)
OpenArgs est pass=E9 =E0 Null??!!

7) Si ca marche, Cliquer sur le bouton=20
CmdOuvrirFormulaire2
=3D> Formulaire1 est rendu invisible
=3D> Formulaire2 s'ouvre
8) Cliquer DEUX FOIS sur le bouton CmdAppliquerOrderBy
=3D> Les infos sont tri=E9es sur le champ "lib"
9) Cliquer sur le bouton CmdFermerFormulaire2
=3D> L=E0 =E7a plante syst=E9matiquement sur Call=20
AfficherFormulairePrecedent(Me.OpenArgs)

Pourquoi????
O=F9 est mon erreur?
Bug Access?

Si vous avez des id=E9es, je suis preneur.
J'y suis depuis 2 jours... C'est horripilant!!

Merci.
Cordialement.

9 réponses

Avatar
Paul
Bonjour Xavier,
Je n'ai pas tout lu, mais il me semble que le formulaire 1 est fermé et non
rendu invisible à l'ouverture du formulaire 2.
Paul
Avatar
Paul
ooups, j'ai été bcp trop vite, ne tenez pas compte de ma remarque.
Paul
Avatar
Paul
Rebonjour
Finalement, je pense qu'il vaudrait mieux rendre visible le formulaire 1
avant de fermer le formulaire 2.
C'est-à-dire ne pas mettre la commande
Call AfficherFormulairePrecedent(Me.OpenArgs)
dans l'événement Close du formulaire
mais la mettre avant la ligne
DoCmd.Close acForm, Me.Name, acSavePrompt

Paul
Avatar
Xavier HUE
Bonjour Paul,

J'ai contourné facilement le problème en mémorisant le
contenu de OpenArgs au chargement du formulaire, mais ce
que je ne comprends pas c'est pourquoi cette propriété est
réinitialisée à Null dans l'évènement Form_Close Si et
Seulement Si j'ai attribué une valeur à OrderBy??

Merci tout de même pour ta réponse

Cordialement.
Avatar
J-Pierre
Essaie sur évènement Unload

J-Pierre

"Xavier HUE" a écrit dans le message de news:098001c3ae9d$cf3bff20$
Bonjour Paul,

J'ai contourné facilement le problème en mémorisant le
contenu de OpenArgs au chargement du formulaire, mais ce
que je ne comprends pas c'est pourquoi cette propriété est
réinitialisée à Null dans l'évènement Form_Close Si et
Seulement Si j'ai attribué une valeur à OrderBy??

Merci tout de même pour ta réponse

Cordialement.
Avatar
Xavier HUE
Re Paul,

Déjà testé. Symptôme identique.

Je ne m'explique pas le phénomène.
Ca se contourne sans problème, mais pour mon information
personnelle, j'aimerais comprendre.
Jusqu'à cette semaine, je n'avais jamais eu à utiliser
OrderBy. Pas de bol. J'innove est paf!

Je suppose que si Philippe Pham Minh n'intervient pas
c'est que ça n'est pas référencé chez Microsoft.

Une façon détournée d'attirer ton attention Philippe ;-)
Une idée?

Cordialement.
Avatar
Xavier HUE
Ooops!

Bonjour Paul,


Lire "Bonjour J-Pierre,"

Cordialement.

Avatar
Paul
Bonsoir Xavier,
J'ai fait un essai sans table du tout dans le formulaire 2 (et donc sans
Orderby).
Si on utilise OpenArgs dans l'événement Close du formulaire, il y a une
erreur : il me dit que la valeur est Null.
C'est un comportement qui paraît somme toute logique : à la fermeture du
formulaire, pourquoi y aurait-il besoin de savoir les caractéristiques de
son ouverture ?
Paul
Avatar
Xavier HUE
Bonjour Paul,

Je te confirme que si on n'active pas OrderBy, la valeur
de la propriété OpenArgs est disponible dans Form_Close et
Form_UnLoad.
Je viens de retester à l'instant.

Je ne comprends pas pourquoi Access se comporte ainsi chez
moi et pas chez toi. Peut être l'application d'un SP. Je
suis en SP1. Et toi?

Ceci dit, j'utilise OpenArg pour passer différents
paramètres au formulaire appelé, dont, le nom du
formulaire appelant, pour pouvoir réafficher ce dernier à
la fermeture dudit formulaire appelé. Tout simplement.

J'ai résolu mon prob en stockant la valeur de OpenArgs
dans une variable du formulaire dans Open_Form, mais je
voulais juste comprendre pourquoi j'ai 2 comportements
différents. Un coup ça marche! Un coup ça marche pas!
Savoir si je commets une erreur grossière, ou si celà est
lié à un bug Access. Savoir pourquoi cette "satanée"
propriété se trouve mise à Null si on applique OrderBy? ;-)

Merci quand même de t'intêresser à ce problème.
Pour le moment, je vais me "satisfaire" de ma résolution.

Cordialement.