Do While

Le
Gildo
Bonjour,
Je ne m’en sors pas ! Dans ce code je vois bien, grâce au débug print que le
champ « courante » contrôlé reste toujours le même pourtant la routine va
jusqu'à EOF
Avez vous une soluce pour que si le champ « courante » est <> active, les
champs cités dans le code, s'ils sont à blanc déclenchent le msgbox ?

Par avance merci.

Private Sub Form_Close()
DoCmd.SetWarnings False
Dim dbs As Database
Dim rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbltemp_1")
rst.MoveFirst
Do Until rst.EOF = True
If Me.Courante <> "active" Then
Debug.Print Me.Courante
Debug.Print Me![Date de dépose]
If IsNull(Me![Date de dépose]) Or IsNull(Me![Heures à la dépose]) _
Or IsNull(Me![Cycles à la dépose]) Then
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If
rst.MoveNext
Loop
DoCmd.SetWarnings True
End Sub
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thierry (ze Titi)
Le #6306271
Bonjour Gildo

Je pense qu'en remplaçant les Me par rst, ça fonctionnera mieux. Mais
j'ai quand même du mal à comprendre l'intérêt de cette procédure. Quel
est ton but ?

Dans ton message
Bonjour,
Je ne m’en sors pas ! Dans ce code je vois bien, grâce au débug print que le
champ « courante » contrôlé reste toujours le même pourtant la routine va
jusqu'à EOF
Avez vous une soluce pour que si le champ « courante » est <> active, les
champs cités dans le code, s'ils sont à blanc déclenchent le msgbox ?

Par avance merci.

Private Sub Form_Close()
DoCmd.SetWarnings False
Dim dbs As Database
Dim rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbltemp_1")
rst.MoveFirst
Do Until rst.EOF = True
If Me.Courante <> "active" Then
Debug.Print Me.Courante
Debug.Print Me![Date de dépose]
If IsNull(Me![Date de dépose]) Or IsNull(Me![Heures à la dépose]) _
Or IsNull(Me![Cycles à la dépose]) Then
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If
rst.MoveNext
Loop
DoCmd.SetWarnings True
End Sub


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Raymond [mvp]
Le #6306261
Bonjour.

un complément à la réponse de ze Titi qui convient.
1- ne jamais utiliser l'objet Me (formulaire sur lequel on se trouve) dans
l'événement Form_Close de ce même formulaire (formulaire fermé) sinon tu vas
obtenir n'importe quoi comme données.
2- toujours fermer les objets ouverts même en cas de fermeture du formulaire
(dbs et rst)
3- toujours tester la présence d'enregistrements dans le recordset, sinon
erreur system sur un MoveFirst.
4- un openrecordset réussi positionne le bookmark sur le premier
enregistrement valide, donc inutile de se positionner par movefirst après
l'ouverture
5- Toujours mettre une majuscule (initiale ? Rst au lieu de rst) dans les
noms d'objets, ceci permettant de voir immédiatement les erreurs de frappe
dans les procédures, vb réécrivant le nom avec l'orthographe de la
déclaration.
6- Indenter le code.

Ta procédure devrait s'écrire comme ceci si tu ne veux pas tomber sur des
erreurs:

Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset("tbltemp_1")
If Not Rst.EOF Then
Do Until Rst.EOF
' ici le traitement
Rst.MoveNext
Loop
End If
Set Dbs = Nothing
Set Rst = Nothing

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidp47a5ea-bce8-4da8-bb67-87e0c49c57e8


"Gildo"
| Bonjour,
| Je ne m'en sors pas ! Dans ce code je vois bien, grâce au débug print que
le
| champ « courante » contrôlé reste toujours le même pourtant la routine va
| jusqu'à EOF
| Avez vous une soluce pour que si le champ « courante » est <> active, les
| champs cités dans le code, s'ils sont à blanc déclenchent le msgbox ?
|
| Par avance merci.
|
| Private Sub Form_Close()
| DoCmd.SetWarnings False
| Dim dbs As Database
| Dim rst As Recordset
| Set dbs = CurrentDb
| Set rst = dbs.OpenRecordset("tbltemp_1")
| rst.MoveFirst
| Do Until rst.EOF = True
| If Me.Courante <> "active" Then
| Debug.Print Me.Courante
| Debug.Print Me![Date de dépose]
| If IsNull(Me![Date de dépose]) Or IsNull(Me![Heures à la dépose]) _
| Or IsNull(Me![Cycles à la dépose]) Then
| MsgBox "Veuillez renseigner les champs à blanc"
| Exit Sub
| End If
| End If
| rst.MoveNext
| Loop
| DoCmd.SetWarnings True
| End Sub
|
Gildo
Le #6306151
Merci de vos réponses,

J’ai repris le code puis
J’ai renseigné le champ ‘courante’ la première ligne étant = à ‘TOTO’ la
2eme ‘TUTU’ etc…
J’ai 8 lignes toutes différentes mais en debug print ne sort que 8 fois
‘TOTO’,visiblement je ne traite que la première ligne et donc toujours pas
de msgbox car c’est à la 7 eme qu’il y a un enregistrement vide. Je ne vois
pas où je me plante ? peu être faut-il compter qq chose et mettre +1 après
chaque boucle ? mais là ça me dépasse.

Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Set Dbs = CurrentDb

‘de la table ("tbltemp_1")

Set Rst = Dbs.OpenRecordset("tbltemp_1")
If Not Rst.EOF Then
Do Until Rst.EOF

' ici le traitement
‘champ courant de la table tbltemp_1

If Courante <> "active" Then
Debug.Print Courante
Debug.Print [Date de dépose]
If IsNull([Date de dépose]) Or IsNull([Heures à la dépose]) _
Or IsNull([Cycles à la dépose]) Then
'Me.AllowAdditions = False
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If

Rst.MoveNext
Loop
End If
Set Dbs = Nothing
Set Rst = Nothing



Bonjour.

un complément à la réponse de ze Titi qui convient.
1- ne jamais utiliser l'objet Me (formulaire sur lequel on se trouve) dans
l'événement Form_Close de ce même formulaire (formulaire fermé) sinon tu vas
obtenir n'importe quoi comme données.
2- toujours fermer les objets ouverts même en cas de fermeture du formulaire
(dbs et rst)
3- toujours tester la présence d'enregistrements dans le recordset, sinon
erreur system sur un MoveFirst.
4- un openrecordset réussi positionne le bookmark sur le premier
enregistrement valide, donc inutile de se positionner par movefirst après
l'ouverture
5- Toujours mettre une majuscule (initiale ? Rst au lieu de rst) dans les
noms d'objets, ceci permettant de voir immédiatement les erreurs de frappe
dans les procédures, vb réécrivant le nom avec l'orthographe de la
déclaration.
6- Indenter le code.

Ta procédure devrait s'écrire comme ceci si tu ne veux pas tomber sur des
erreurs:

Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset("tbltemp_1")
If Not Rst.EOF Then
Do Until Rst.EOF
' ici le traitement
Rst.MoveNext
Loop
End If
Set Dbs = Nothing
Set Rst = Nothing

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidp47a5ea-bce8-4da8-bb67-87e0c49c57e8


"Gildo"
| Bonjour,
| Je ne m'en sors pas ! Dans ce code je vois bien, grâce au débug print que
le
| champ « courante » contrôlé reste toujours le même pourtant la routine va
| jusqu'à EOF
| Avez vous une soluce pour que si le champ « courante » est <> active, les
| champs cités dans le code, s'ils sont à blanc déclenchent le msgbox ?
|
| Par avance merci.
|
| Private Sub Form_Close()
| DoCmd.SetWarnings False
| Dim dbs As Database
| Dim rst As Recordset
| Set dbs = CurrentDb
| Set rst = dbs.OpenRecordset("tbltemp_1")
| rst.MoveFirst
| Do Until rst.EOF = True
| If Me.Courante <> "active" Then
| Debug.Print Me.Courante
| Debug.Print Me![Date de dépose]
| If IsNull(Me![Date de dépose]) Or IsNull(Me![Heures à la dépose]) _
| Or IsNull(Me![Cycles à la dépose]) Then
| MsgBox "Veuillez renseigner les champs à blanc"
| Exit Sub
| End If
| End If
| rst.MoveNext
| Loop
| DoCmd.SetWarnings True
| End Sub
|





Raymond [mvp]
Le #6306131
Thierry t'as dit de remplacer Me par rst.

If Rst!Courante <> "active" Then
Debug.Print Rst!Courante
Debug.Print Rst![Date de dépose]
If IsNull(Rst![Date de dépose]) Or IsNull(Rst![Heures à la dépose]) _
Or IsNull(Rst![Cycles à la dépose]) Then
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99


"Gildo"
| Merci de vos réponses,
|
| J'ai repris le code puis
| J'ai renseigné le champ 'courante' la première ligne étant = à 'TOTO' la
| 2eme 'TUTU' etc.
| J'ai 8 lignes toutes différentes mais en debug print ne sort que 8 fois
| 'TOTO',visiblement je ne traite que la première ligne et donc toujours
pas
| de msgbox car c'est à la 7 eme qu'il y a un enregistrement vide. Je ne
vois
| pas où je me plante ? peu être faut-il compter qq chose et mettre +1 après
| chaque boucle ? mais là ça me dépasse.
|
| Dim Dbs As DAO.Database
| Dim Rst As DAO.Recordset
| Set Dbs = CurrentDb
|
| 'de la table ("tbltemp_1")
|
| Set Rst = Dbs.OpenRecordset("tbltemp_1")
| If Not Rst.EOF Then
| Do Until Rst.EOF
|
| ' ici le traitement
| 'champ courant de la table tbltemp_1
|
| If Courante <> "active" Then
| Debug.Print Courante
| Debug.Print [Date de dépose]
| If IsNull([Date de dépose]) Or IsNull([Heures à la dépose]) _
| Or IsNull([Cycles à la dépose]) Then
| 'Me.AllowAdditions = False
| MsgBox "Veuillez renseigner les champs à blanc"
| Exit Sub
| End If
| End If
|
| Rst.MoveNext
| Loop
| End If
| Set Dbs = Nothing
| Set Rst = Nothing
|
Thierry (ze Titi)
Le #6306111
Bonjour Raymond,

j'allais le dire... Tu m'enlèves les mots de la bouche, ou plutôt des
doigts...

Message du lundi 16/07/2007

Thierry t'as dit de remplacer Me par rst.

If Rst!Courante <> "active" Then
Debug.Print Rst!Courante
Debug.Print Rst![Date de dépose]
If IsNull(Rst![Date de dépose]) Or IsNull(Rst![Heures à la dépose]) _
Or IsNull(Rst![Cycles à la dépose]) Then
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99


"Gildo"
Merci de vos réponses,

J'ai repris le code puis
J'ai renseigné le champ 'courante' la première ligne étant = à 'TOTO' la
2eme 'TUTU' etc.
J'ai 8 lignes toutes différentes mais en debug print ne sort que 8 fois
'TOTO',visiblement je ne traite que la première ligne et donc toujours pas
de msgbox car c'est à la 7 eme qu'il y a un enregistrement vide. Je ne vois
pas où je me plante ? peu être faut-il compter qq chose et mettre +1 après
chaque boucle ? mais là ça me dépasse.

Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Set Dbs = CurrentDb

'de la table ("tbltemp_1")

Set Rst = Dbs.OpenRecordset("tbltemp_1")
If Not Rst.EOF Then
Do Until Rst.EOF

' ici le traitement
'champ courant de la table tbltemp_1

If Courante <> "active" Then
Debug.Print Courante
Debug.Print [Date de dépose]
If IsNull([Date de dépose]) Or IsNull([Heures à la dépose]) _
Or IsNull([Cycles à la dépose]) Then
'Me.AllowAdditions = False
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If

Rst.MoveNext
Loop
End If
Set Dbs = Nothing
Set Rst = Nothing



--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info


Gildo
Le #6306081

Bonjour Raymond,

j'allais le dire... Tu m'enlèves les mots de la bouche, ou plutôt des
doigts...

Message du lundi 16/07/2007

Thierry t'as dit de remplacer Me par rst.

If Rst!Courante <> "active" Then
Debug.Print Rst!Courante
Debug.Print Rst![Date de dépose]
If IsNull(Rst![Date de dépose]) Or IsNull(Rst![Heures à la dépose]) _
Or IsNull(Rst![Cycles à la dépose]) Then
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If

--
@+
Raymond Access MVP http://www.OfficeSystemAccess.com/
http://officesystem.access.over-blog.com/
http://officesystem.access.free.fr/wiki/
Pour débuter sur le forum: http://www.mpfa.info/

Cet été, j'en ai rien à coder, je me forme : les devoirs de vacances
http://www.comscamp.com/Tracker/Redirect.ashx?linkidJd96883-a859-4212-b4a0-bce47c8e0d99


"Gildo"
Merci de vos réponses,

J'ai repris le code puis
J'ai renseigné le champ 'courante' la première ligne étant = à 'TOTO' la
2eme 'TUTU' etc.
J'ai 8 lignes toutes différentes mais en debug print ne sort que 8 fois
'TOTO',visiblement je ne traite que la première ligne et donc toujours pas
de msgbox car c'est à la 7 eme qu'il y a un enregistrement vide. Je ne vois
pas où je me plante ? peu être faut-il compter qq chose et mettre +1 après
chaque boucle ? mais là ça me dépasse.

Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Set Dbs = CurrentDb

'de la table ("tbltemp_1")

Set Rst = Dbs.OpenRecordset("tbltemp_1")
If Not Rst.EOF Then
Do Until Rst.EOF

' ici le traitement
'champ courant de la table tbltemp_1

If Courante <> "active" Then
Debug.Print Courante
Debug.Print [Date de dépose]
If IsNull([Date de dépose]) Or IsNull([Heures à la dépose]) _
Or IsNull([Cycles à la dépose]) Then
'Me.AllowAdditions = False
MsgBox "Veuillez renseigner les champs à blanc"
Exit Sub
End If
End If

Rst.MoveNext
Loop
End If
Set Dbs = Nothing
Set Rst = Nothing



--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info


OUPS la PATOUILLE
il fallait donc rester sur la table !

Merci à vous deux ça marche impec.



Publicité
Poster une réponse
Anonyme