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

EOF dans un Formulaire = Argument non facultatif

2 réponses
Avatar
jack
Salut =E0 tous,
Encore merci =E0 eric pour l'info sur SetFocus et les Formulaires
Je pense que l'organigramme est bon mais j'ai un petit soucis avec le
*EOF*
-------- - > Comme pr=E9vu qui dit SetFocus dit DoCmd et acNext Donc EOF
=3D Bug
Msg -- - >"Erreur de compilation - Argument non facultatif"

Private Sub Nom_du_produit_Click()

' ---------------------D=E9claratino de variable
Dim ProduitSource As Integer
Dim ProduitDestin As Integer
' ----------------------Enregistrement des variables du Catalogue pour
copie dans la commande
ProduitSource =3D [Forms]![Jacky_Menu_Trie]![R=E9f Produit].Value
MsgBox ProduitSource, vbInformation, "R=E9f Produit CATALOGUE 2006"
'Test

' ----------------------Activation des Formulaires et du champ de
comparaison (Doublons)
DoCmd.OpenForm "Commandes"
Forms("Commandes")![Sous formulaire Commandes].SetFocus
Forms("Commandes")![Sous formulaire Commandes].Form![R=E9f
Produit].SetFocus

' ----------------------Placement au 1er Enregistrement de la commande
DoCmd.GoToRecord , , acFirst

' ----------------------Enregistrement de la variable Destination pour
comparaison
ProduitDestin =3D Forms("Commandes")![Sous formulaire
Commandes].Form![R=E9f Produit].Value
MsgBox ProduitDestin, vbMsgBoxHelpButton, "Ref Produit Commande"
'Test

' ----Debut Boucle-----
Do

' ----------------------Test Fin de Fichier
If **EOF** =3D True Then MsgBox "Fin de fichier", vbCritical, "TEST EOF"
If **EOF** =3D True Then Exit Sub

' ----------------------Test
If ProduitSource =3D ProduitDestin Then MsgBox "Doublon", vbCritical,
"Test Doublon"
If ProduitSource =3D ProduitDestin Then Exit Sub
DoCmd.GoToRecord , , acNext
=20
'----Fin de Boucle-----
Loop Until EOF =3D True
End Sub

2 réponses

Avatar
3stone
Salut,

"jack"

| Comme prévu qui dit SetFocus dit DoCmd et acNext Donc EOF= Bug


Le bug est souvent assit en le dossier de chaise et le clavier ;-)




' ----Debut Boucle-----
Do

' ----------------------Test Fin de Fichier
If **EOF** = True Then MsgBox "Fin de fichier", vbCritical, "TEST EOF"
If **EOF** = True Then Exit Sub

' ----------------------Test
If ProduitSource = ProduitDestin Then MsgBox "Doublon", vbCritical,
"Test Doublon"
If ProduitSource = ProduitDestin Then Exit Sub
DoCmd.GoToRecord , , acNext

'----Fin de Boucle-----
Loop Until EOF = True
End Sub



Non...

On teste le marqueur EOF sur un recordset :

rs.MoveNext
rs.EOF

ou un fichier :

Line Input #1, strLine
EOF(#1)

Pour un formulaire, le fait d'avancer au delà du dernier record
ne renvoie pas un EOF mais une erreur...
Erreur qu'il faut tester pour que Access n'envoie pas "son" MsgBox !


PS:
Désolé de le dire comme cela, mais ce n'est pas du code "propre"
que tu fait depuis le début... ce sont plutôt des commandes
misent en file comme le ferait un enregistreur de macro!
Si au final cela "peut" fonctionner, ce sera la croix et la bannière
à faire évoluer et maintenir.
Ceci dit sans méchanceté aucune...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Jacky
Pour mon problème, j'ai triché, puisque il me retourne erreur à la fin du
fichier, pourquoi lui demander alors qu'il me le dit, on erreur GOTO.

Désolé pour mes méthodes, mais j'ai commencé sur du basic. Pas idéal, mais
l'habitude quand je regarde une page de commande, je vois de suite
l'organigramme et 5 6 ans plus tard, je peux revenir comme si c'était hier.
En fait j'ai peu de programme à réaliser. La compléxité réside nettement
plus dans l'élaboration des tables et surtout dans la présentation aux
clients (qui doit etre le plus accessible possible, l'utilisation des
formulaires représente 99% du temps). Plus un logiciel doit être ouvert et
simple d'utilisation, plus le travail de conception en arriere est élaboré.
Mon but optimiser mon rendement de 30%.