Condition en access

Résolu
SB -  
 SB -
Bonjour,
Voila j'ai fait un code pour que Quand la date départ est passé, le code collaborateur est vidé!
Seulement voila mtn je voudrais faire un code pour que quand la date départ > 1 an, on supprime l'enregistrement!
Je pense que c'est pas long a changer mais je n'arrive pas..

Voici mon code pour que Quand la date départ est passé, le code collaborateur est vidé:

Private Sub Form_Load()

Dim db As Database
Dim rst As Recordset

On Error GoTo Erreur
Set db = CurrentDb
Set rst = db.OpenRecordset("salariés")
With rst
If Not .EOF Then
.MoveFirst
Do Until .EOF
If rst![date départ] < Now() Then
.Edit
rst![Code collaborateur] = "0"
.Update
End If
.MoveNext
Loop
End If

End With

Sortie:
On Error Resume Next
Set rst = Nothing
Set db = Nothing

Erreur:
MsgBox Err.Number & " : " & Err.Description
Resume Sortie

End Sub

Merci d'avance pour votre aide

9 réponses

SB
 
Tjs en attente...URGENT!!
SVP
merci d'avance
0
Jean_Jacques Messages postés 1040 Date d'inscription   Statut Membre Dernière intervention   112
 
Bonsoir,

Dans mon bric à brac, j'ai retrouvé une syntaxe qui correspond approximativement à ce que vous recherchez. En l'adaptant à votre besoin, ça devrait le faire. Un peu bourrin mais elle fonctionne bien ....

DoCmd.RunSQL "DELETE Transactions.RéfTransaction, Transactions.RéfValeur, Transactions.RéfOpération, Transactions.RéfStatut, Transactions.DateSaisie, Transactions.DateLimite, Transactions.DateSolde, DateDiff('d',[datesolde],Now()) AS [Dépassé > 1 an] FROM Transactions WHERE (((DateDiff('d',[datesolde],Now()))>365));"

Cordialement

La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
0
SB
 
Merci jean jacques je vais voir demain au boulot si sa le fait ou pas!
0
Jean_Jacques Messages postés 1040 Date d'inscription   Statut Membre Dernière intervention   112
 
Bonsoir SB,


En attendant le résultat des courses de demain,
j'y crois toujours à 23:03 , car les mêmes causes ont les mêmes effets ...

A+
AJJ
0
SB
 
Ben oé jespere bien !
Seulement j'ai juste une petite questio, : quelles sont tes champs dans ton code?
0
Jean_Jacques Messages postés 1040 Date d'inscription   Statut Membre Dernière intervention   112
 
Bonjour,

- Une fois élagué tout tient en une ligne !
- Le but est de supprimer les enregistrements de la table : <Table> en mesurant l'écart entre la date saisie dans le champ [<Champ_date>] et maintenant (aujourd'hui en fait).
- SI la différence qui sépare les deux dates est supérieure à 365 la condition est remplie et le (les) enregistrements concernés sont alors supprimés.



DoCmd.RunSQL "DELETE FROM <Table> WHERE (((DateDiff('d',[<Champ_date>],Now()))>365));"

Bonne journée
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
0
SB
 
Merci jean jacques mais ça ne marche tjs pas!
Voici mon code que j'ai mis :

Private Sub Form_Load()
DoCmd.RunSQL "DELETE * FROM salariés WHERE (((DateDiff('d',[date départ],Now()))>365));"
End Sub

Sa supprimer tout mes enregistrement et sa me met un message d'erreur quand je veux aller sur le 2eme enregistrement!
En gros je ne peux plus rien faire sur ma base!

Merci d'avance jean jacques
0
Jean_Jacques Messages postés 1040 Date d'inscription   Statut Membre Dernière intervention   112 > SB
 
Bonjour SB,

SQL n'aime pas les accents.
Je suggère de renommer le champ [date départ] en [Date_depart]
Pour faire carrré, et pour la même raison, renommer salariés

DoCmd.RunSQL "DELETE * FROM salariés WHERE (((DateDiff('d',[date départ],Now()))>365));"

(Je vais m'absenter pour plusieurs heures)
A+

La science ne fait que trouver ce qui existe depuis toujours.
HUBERT Reeves.
0
SB
 
Re-bonjour jean jacques,
Voila j'ai inséré mon code au lancement de ma base de données mais j'ai un message d'erreur qui s'affiche au lancement : Vous allez supprimer 0 ligne(s) de la table spécifié.
Donc voila, je en comprend pas vraiment pourquoi il me met se message d'erreur parce que je pense que mon code est cohérent!
Voici mon code :

Private Sub Form_Load()
DoCmd.RunSQL "DELETE [Code Société], [No salarie], [Code collaborateur], Titre, nom, prénom, [Nom jeune fille], Assistante, [Code secteur], [Type contrat], [% Temps CO], [% Temps FI], [% Temps AC], [% Temps AE], [% Temps CGAF], [Tel Prof], [Tel Fax], [No Fax], E-mail, Remarque, [% Temps Total], [Date départ], DateDiff('d',[Date départ],Now()) AS [Dépassé > 1 an], [Date d'embauche], [Nom Responsable Hierarchique], Site, [Code Site], [Nom Societe], [Temps CO], [Temps FI], [Temps AC], [Temps AE], [Temps CGAF], Direction, [Temps 6], [%Temps 6], Fonction1, Fonction2, Secteur, [No Port], [Code Bureau], [Code Statut] FROM salariés WHERE (((DateDiff('d',[date départ],Now()))>365));"
End Sub

Donc voila mon code, si quelqu'un a une chose a me dire nesité pas!

Merci d'avance
0

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

Posez votre question
bnb
 
Salut SB,

2 ou 3 petites choses

Primo le message retourné indique que ton code est bien executé( Vous allez supprimer 0 ligne(s)...) Cela signifie qui n'il y a pas d'enregistrement correspondant à tes critères. Si ce n'est pas le cas (il y en a mais, ils n'ont pas été pris en compte), cela veut dire que tu as mal conçu ton code!

Secundo que fais-tu des années bissextiles? datediff ("d",... >365) Les années bissextiles ont 366 jours donc faudrait que tu modifies ton codes!

Tertio: Dans TON (???) code tu dis que le code collaborateur est vidé... Moi je vois plutôt que si la condition est remplie tu y mets une valeur 0 de type string! Si tu veux vraiment "vider" ce champs remplace plutôt "0" par vbnullstring

x= "0" returns 0
x = vbnullstring returns
0
SB
 
Bonjour bnb,
Tu t'es trompé de post!mon post avec mon code est juste au dessus du post que tu m'a envoyé!voila!
Cela dit mon code marche bien mais j'ai un message d'erruer qui s'ouvre quand jouvre ma base de données : Vous allez supprimer 0 ligne(s) de la table spécifié!
Je voudrais juste l'enlever pour que ça fasse mieux!
Donc voila...
Merci d'avance
0
SB
 
Bonjour bnb,
Tu t'es trompé de post!mon post avec mon code est juste au dessus du post que tu m'a envoyé!voila!
Cela dit mon code marche bien mais j'ai un message d'erruer qui s'ouvre quand jouvre ma base de données : Vous allez supprimer 0 ligne(s) de la table spécifié!
Je voudrais juste l'enlever pour que ça fasse mieux!
Donc voila...
Merci d'avance
0
bnb
 
Ok Au lieu d'uiliser la commande docmd.runsql
crée plutôt un querydef; le résultat est le même sauf qu'il n'envoie pas de message de modification d'enregistrement!

dim qd as querydef

set qd = db.createquerydef("")
qd.sql = "tu places ici ton code sql"
qd.execute

doevents

PS: pour tenir compte des années bissextiles remplate ton datediff ("d",..., >365) par date ("y",...,>1)
0
SB > bnb
 
Re bnb,
J'ai fait ce que tu m'as dit mais j'ai un probleme!
En fait comme tu le s'est tu m'as aidé hier pour faire un bout de code et avec le code que j'ai fait auj, je dois mettre ces deux bout de code au démarrage de ma base de données donc au final j'ai ralié les deux bout de code mais la suppression ne marche plus!

Voici le code :

Private Sub Form_Load()

Dim db As Database
Dim rst As Recordset
Dim qd As QueryDef

Set db = CurrentDb
Set rst = db.OpenRecordset("salariés")
With rst
If Not .EOF Then
.MoveFirst
Do Until .EOF
If rst![date départ] < Now() Then
.Edit
rst![Code collaborateur] = " "
.Update
End If
.MoveNext
Loop
End If

End With

Sortie:
On Error Resume Next
Set rst = Nothing
Set db = Nothing

Resume Sortie

Set qd = db.CreateQueryDef("")
qd.SQL = "DELETE [Code Société], [No salarie], [Code collaborateur], Titre, nom, prénom, [Nom jeune fille], Assistante, [Code secteur], [Type contrat], [% Temps CO], [% Temps FI], [% Temps AC], [% Temps AE], [% Temps CGAF], [Tel Prof], [Tel Fax], [No Fax], E-mail, Remarque, [% Temps Total], [Date départ], Date('y',[Date départ],Now()) AS [Dépassé > 1 an], [Date d'embauche], [Nom Responsable Hierarchique], Site, [Code Site], [Nom Societe], [Temps CO], [Temps FI], [Temps AC], [Temps AE], [Temps CGAF], Direction, [Temps 6], [%Temps 6], Fonction1, Fonction2, Secteur, [No Port], [Code Bureau], [Code Statut] FROM salariés WHERE (((Date('y',[date départ],Now()))>1));"
qd.Execute

End Sub

J'ai placé "Dim qd As QueryDef" au début du code comme tu peux le voir et j'ai placé le code de la suppression aprés le resume sortie.

Merci d'avance bnb
0
bnb
 
Fais plutôt un copy/paste de ce code et teste le!

Private Sub Form_Load()
On errror GoTo Erreur
Dim db As Database
Dim rst As Recordset
Dim qd As QueryDef

Set db = CurrentDb
Set rst = db.OpenRecordset("salariés")
With rst
If Not .EOF Then
.MoveFirst
Do Until .EOF
If rst![date départ] < Now() Then
.Edit
rst![Code collaborateur] = vbNullString
.Update
End If
.MoveNext
Loop
End If
End With
Set qd = db.CreateQueryDef("")
qd.SQL = "DELETE [Code Société], [No salarie], [Code collaborateur], " & _
"Titre, nom, prénom, [Nom jeune fille], Assistante, [Code secteur], " & _
"[Type contrat], [% Temps CO], [% Temps FI], [% Temps AC], [% Temps AE], " & _
"[% Temps CGAF], [Tel Prof], [Tel Fax], [No Fax], E-mail, Remarque, " & _
"[% Temps Total], [Date départ], " & _
"datediff(""yyyy"",[Date départ],Now()) AS [Dépassé > 1 an], " & _
"[Date d'embauche], [Nom Responsable Hierarchique], Site, [Code Site], " & _
"[Nom Societe], [Temps CO], [Temps FI], [Temps AC], [Temps AE], " & _
"[Temps CGAF], Direction, [Temps 6], [%Temps 6], Fonction1, Fonction2, " & _
"Secteur, [No Port], [Code Bureau], [Code Statut] " & _
"FROM salariés " & _
"WHERE (DateDiff(""yyyy"",[Date départ],Now())>=1));"
qd.Execute
DoEvents

Sortie:
On Error Resume Next
Set rst = Nothing
Set qd = Nothing
Set db = Nothing

Erreur:
MsgBox Err.Number & " : " & Err.Description
Resume Sortie

End Sub
0
SB
 
Ben bnb j'ai que une chose a te dire!!
C'est MERCI vraiment parce que ça marche nikel, j'ai juste fait quelques petites modif mais sa marche bien!
Vraimenr merci bnb!
Bonne fin de journé et j'espere que j'aurais plus a faire a toi!
0