Boucle Do While

Résolu
DAVIMIKA Messages postés 119 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 10 janvier 2014 - 12 juin 2007 à 21:35
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 - 27 juil. 2007 à 11:38
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

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
27 juil. 2007 à 11:38
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.
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
12 juin 2007 à 23:38
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)
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
13 juin 2007 à 00:08
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




 













 
0
DAVIMIKA Messages postés 119 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 10 janvier 2014
13 juin 2007 à 10:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
13 juin 2007 à 13:08
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



0