Condition en access
Résolu
SB
-
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
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
A voir également:
- Condition en access
- Excel cellule couleur si condition texte - Guide
- Acer quick access ✓ - Forum PC portable
- Désinstaller ACER QUICK ACCESS - Forum Logiciels
- Access appdata - Guide
- Excel condition ou - Guide
9 réponses
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.
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.
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
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
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.
- 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.
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
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
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.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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
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
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)
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)
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
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
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
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