Boucle Do While

Résolu
Signaler
Messages postés
119
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
10 janvier 2014
-
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
-
Bonjour



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




J’ai une [tbl Adhérents] dont les champs « case à cocher Départ » et « DateDépart » sont vide jusqu’au 31/08,



 






1)     
A partir du 01/09 je voudrais mettre à jour ces champs automatiquement, et que la condition se remplit que le 01/09 de chaque année.



 




2)  Pourquoi j’ai l’erreur « Elément non trouvé » lorsque j’écris :


rs(« Départ « ).value = true ou


rs.Fields(« Départ « ).value = true ou


rs ![Départ].value = true



      Et que je suis obligé d’écrice cela




    
 rs.Fields(3).Value = True






 






   Mon code qui ne fonctionne pas et qui me fait une boucle sans fin.



 





   rq = "SELECT [tbl Adhérents].*, [tbl Adhérents].DateDépart, [tbl Adhérents].Départ, [tbl " & _



           "Adhérents].MillLicence FROM [tbl Adhérents] " & _



            "WHERE ((([tbl Adhérents].DateDépart) Is Null) " & _



           "AND (([tbl Adhérents].Départ)=False) " & _



         "AND [tbl Adhérents].MillLicence=" & Year(FinSaison) - 1 & ";"



        




    Set rs = db.OpenRecordset(rq, dbOpenDynaset)






 






‘--- Condition






  
  
 If Month(Date) >= 1 And Month(Date) <= 9 Then






 





'---Boucle sur la table rs



 
 
  
Do While Not rs.EOF






 







     rs.FindFirst "[Date]<>0 AND [DateFin]=Null"






  
 
 if rs.NoMatch Then






 







    rs.Edit






      rs.Fields(2).Value = lstr_datedépart






      rs.Fields(3).Value = True






    rs.Update






    rs.MoveNext






   
<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??>
<st1:place w:st="on">Loop</st1:place>







End if






 






Merci pour votre aide.






 






Salutations

5 réponses

Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
Les reponses ont elles solutionné ton probleme ? si oui merci de valider "reponse accepter" afin faciliter les recherches et recompenser les gentils utilisateurs

:)

E.B.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Pour le Value, je pense que si tu nommes les champs avec l'un de tes trois syntaxes qui me semblent correctes (sans l'espace entre rs et ! ), on ne peut pas utiliser de   .Value   derrière (rien derrière en fait)
Pour le reste, je n'ai rien compris à la question (1 notamment)
Les autres, faut respecter le type du champ [Date] tel que tu l'as défini dans ta DB: Est-il de type Date ?
Si oui, il y a des règles :
On ne peut pas comparer une date avec 0 et la comparaison avec Null se fait avec "Is Null" (et pas = Null)
Date est un mot clé dans beaucoup de langages : à bannir ou alors vraiment faire attention de toujours utiliser les [ et ], même (et surtout) à l'intérieur d'une fonction de ce langage.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut,


pour la boucle il suffit de parcourir ton rs
et comparer Day et Month du champ avec les valeurs critère.
Donc pas besoin de FindFirst.


(après avoir renommer ton champ Date)
With rs
Do While Not .EOF


If (Not IsNull(![Dat]) )And (Day(![Dat]) >= 1) And (Month(![Dat]) <= 9) Then
    .Edit
    .Fields(2)= lstr_datedépart
    .Fields(3) = True
    .Update
End If
    .MoveNext


Loop
End With




 













 
Messages postés
119
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
10 janvier 2014

Bonjour,


Merci pour vos réponses  et toutes mes excuses pour mes erreurs de frappes, en effet comme indiqué dans ma requête les deux champs à mettre à jour son "Départ" (Type case à cocher) et "DateDépart" (Type Champ date).

Pour la 2ème question j'ai supprimé le (.value) :
  rs("Départ") = ou rs("DateDépart")=
  rs.Fields("Départ")= ou rs.Fields("Départ")=
  rs![Départ] = ou  rs![DateDépart] =

Et que je suis toujour être obligé d'écrice cela :
  rs.Fields(2).Value  pour Date et Fields(3).Value pour DateDépart.

Avez-vous une explication à cela ?

Pour la deuxième question j'ai modifié la condition suivant le champ "DateDépart" et lorsque je met un espion sur DateDépart (J'ai Elément non trouvé).

If (Not IsNull(![DateDépart]) )And (Day(![DateDépart]) >= 1) And (Month(![DateDépart]) <= 9) Then

Par ailleur est-ce que la condition me permet d'exécuter la boucle  (remplir les deux champs) uniquement après le 31/08 ?

Merci pour votre aide.

Salutations
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Bonjour,


>Réponse 1 :
Personnellement je ne met jamais de .Value


En plus voici les différentes synthaxex correctes :
rs.Fields("DateDepart") =...
ou  rs.Fields(2)=...
ou rs![DateDepart] =...


Avec rs.Fields il faut toujours des accollades et
soit le nom du champ et des double quotes
Soit l' index du champ (sa position dans la table -1)


Avec rs!  ( et donc sans .Fields ) il faut des crochet et le nom
du champ sans les double quotes.


>Réponse 2
Pour l' erreur de l' élément non trouvé, plusieurrs causes possibles :
- rs!["DateDépart"]
- ou rs.Fields(DateDepart)
- ou rs![DateDepart] ou rs.Fields("DateDepart") ( ce qui est correct)
   mais l' orthographe du nom  de chmp est incorecte
- ou l' index spécifié est supérieur à l' index du dernier champ de la table.


>Réponse 3
Pour remplir les deux champs) uniquement après le 31/08  il faut mettre
If (Not IsNull(![DateDépart]) )And (Day(![DateDépart]) >= 1) And (Month(![DateDépart]) > 8) Then  ===> mois 9, 10 , 11 et 12

Pour avoir uniquement le mois 9 il faut mettre
If (Not IsNull(![DateDépart]) ) And (Day(![DateDépart]) >= 1) And (Month(![DateDépart]) = 9) Then