Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transformer champ texte en date

33 réponses
Avatar
Patexocet
Bonjour,


J'ai dans une requ=EAte un champ "Ann=E9e" au format texte qui contient
"2008", un autre champ texte "Mois" qui contient le nom des pois
"mars" par exemple, il n'y a pas de champ "Jour" car la date cr=E9=E9e
sera toujours le premier du mois.

Je veux cr=E9er dans cette requ=EAte un champ MaDate: qui cr=E9=E9e la date
sous la forme 01/03/2008

J'essaye avec Madate: S=E9rieDate ( "01"; [Mois]; [Ann=E9e]) mais sans
succ=E8s.

Merci

10 réponses

1 2 3 4
Avatar
Patexocet
Merci Michel, ça fonctionne presque.

Petite précision, la liste déroulante ou je prend le mois (Forms!
LeFormulaire!LeControleMois) est au format texte et contient les
chiffres 1,2,3 et pas les libellés janvier, février, mars. Cette
petite précision apportée,

la requête que tu m'as concoctée:
---------------------------------------
Entre AjDate("m";1;CDate("1" & [Forms]![LeFormulaire]![LeControleMois]
& " " & [Forms]![LeFormulaire]![LeControleAnnee]-1)) Et CDate("1 " &
[Forms]![LeFormulaire]![LeControleMois] & " " & [Forms]![LeFormulaire]!
[LeControleAnnee])

Pour une périodicité fin novembre (donc 11 dans ma liste déroulante
Forms!LeFormulaire!LeControleMois) pour 2008, la requête me retourne
les enregistrements des mois suivants:

2/2008 - 3/2008 - 4/2008 - 5/2008 - 6/2008 - 7/2008 - 8/2008 - 9/2008
- 10/2008 - 11/2008 - 12/2008 (pour que ce soit OK elle devrait me
retourner 12/2007 et 01/2008 en plus et 12/2008 en moins)
----------------------------------------

J'ai essayé de la modifier comme suit:
------------------------------------------
Entre AjDate("m";-1;CDate("1" & [Forms]![LeFormulaire]!
[LeControleMois] & " " & [Forms]![LeFormulaire]![LeControleAnnee]-1))
Et CDate("1 " & [Forms]![LeFormulaire]![LeControleMois] & " " &
[Forms]![LeFormulaire]![LeControleAnnee])

Pour une périodicité fin novembre (donc 11 dans ma liste déroulante
Forms!LeFormulaire!LeControleMois) pour 2008, la requête me retourne
les enregistrements des mois suivants:

12/2007 - 1/2008 - 2/2008 - 3/2008 - 4/2008 - 5/2008 - 6/2008 - 7/2008
- 8/2008 - 9/2008 - 10/2008 - 11/2008 - 12/2008 (pour que ce soit OK
elle devrait me retourner 12/2008 en moins)
--------------------------------------------

Merci pour ton aide, je continue à chipoter en ce jour mémorable.
Avatar
Michel__D
Bonjour,

Patexocet a écrit :
Merci Michel, ça fonctionne presque.

Petite précision, la liste déroulante ou je prend le mois (Forms!
LeFormulaire!LeControleMois) est au format texte et contient les
chiffres 1,2,3 et pas les libellés janvier, février, mars. Cette
petite précision apportée,

la requête que tu m'as concoctée:
---------------------------------------
Entre AjDate("m";1;CDate("1" & [Forms]![LeFormulaire]![LeControleMois]
& " " & [Forms]![LeFormulaire]![LeControleAnnee]-1)) Et CDate("1 " &
[Forms]![LeFormulaire]![LeControleMois] & " " & [Forms]![LeFormulaire]!
[LeControleAnnee])

Pour une périodicité fin novembre (donc 11 dans ma liste déroulante
Forms!LeFormulaire!LeControleMois) pour 2008, la requête me retourne
les enregistrements des mois suivants:

2/2008 - 3/2008 - 4/2008 - 5/2008 - 6/2008 - 7/2008 - 8/2008 - 9/2008
- 10/2008 - 11/2008 - 12/2008 (pour que ce soit OK elle devrait me
retourner 12/2007 et 01/2008 en plus et 12/2008 en moins)
----------------------------------------

J'ai essayé de la modifier comme suit:
------------------------------------------
Entre AjDate("m";-1;CDate("1" & [Forms]![LeFormulaire]!
[LeControleMois] & " " & [Forms]![LeFormulaire]![LeControleAnnee]-1))
Et CDate("1 " & [Forms]![LeFormulaire]![LeControleMois] & " " &
[Forms]![LeFormulaire]![LeControleAnnee])

Pour une périodicité fin novembre (donc 11 dans ma liste déroulante
Forms!LeFormulaire!LeControleMois) pour 2008, la requête me retourne
les enregistrements des mois suivants:

12/2007 - 1/2008 - 2/2008 - 3/2008 - 4/2008 - 5/2008 - 6/2008 - 7/2008
- 8/2008 - 9/2008 - 10/2008 - 11/2008 - 12/2008 (pour que ce soit OK
elle devrait me retourner 12/2008 en moins)
--------------------------------------------

Merci pour ton aide, je continue à chipoter en ce jour mémorable.



Tu as donc le contrôle mois sous la forme "1", "2", etc ...
et ton contrôle année contient une valeur numérique du style => 2008

Essaye avec ceci

Entre AjDate("m";1;CDate("1/" & [Forms]![LeFormulaire]![LeControleMois]
& "/" & [Forms]![LeFormulaire]![LeControleAnnee]-1)) Et CDate("1/" &
[Forms]![LeFormulaire]![LeControleMois] & "/" & [Forms]![LeFormulaire]![LeControleAnnee])
Avatar
Patexocet
Tu as donc le contrôle mois sous la forme "1", "2", etc ...
et ton contrôle année contient une valeur numérique du style =>
2008

Exact Michel et merci pour ton aide.

Mais avec ton nouveau code ça ne fonctionne pas, j'ai le message
Syntaxe trop complexe ou incorrecte ......

Entre AjDate("m";1;CDate("1/" & [Forms]![LeFormulaire]!
[LeControleMois]
& "/" & [Forms]![LeFormulaire]![LeControleAnnee]-1)) Et CDate("1/"
&
[Forms]![LeFormulaire]![LeControleMois] & "/" & [Forms]!
[LeFormulaire]![LeControleAnnee])
Avatar
Michel__D
Re,

Patexocet a écrit :
Tu as donc le contrôle mois sous la forme "1", "2", etc ...
et ton contrôle année contient une valeur numérique du style =>
2008

Exact Michel et merci pour ton aide.

Mais avec ton nouveau code ça ne fonctionne pas, j'ai le message
Syntaxe trop complexe ou incorrecte ......

Entre AjDate("m";1;CDate("1/" & [Forms]![LeFormulaire]!
[LeControleMois]
& "/" & [Forms]![LeFormulaire]![LeControleAnnee]-1)) Et CDate("1/"
&
[Forms]![LeFormulaire]![LeControleMois] & "/" & [Forms]!
[LeFormulaire]![LeControleAnnee])



Il faut que ce soit sur une seule ligne

Entre AjDate("m";1;CDate("1/" & [Forms]![LeFormulaire]![LeControleMois] & "/" & [Forms]![LeFormulaire]![LeControleAnnee]-1)) Et
CDate("1/" & [Forms]![LeFormulaire]![LeControleMois] & "/" & [Forms]![LeFormulaire]![LeControleAnnee])

Ou en mode SQL :

SELECT SUM(LaTable.LeChampDepense) AS DepensesAnnuelle
FROM LaTable
WHERE LaTable.LeChampDate BETWEEN
DateAdd("m",1,CDate("1/" & [Forms]![LeFormulaire]![LeControleMois] & "/" & [Forms]![LeFormulaire]![LeControleAnnee] - 1))
And CDate("1/" & [Forms]![LeFormulaire]![LeControleMois] & "/" & [Forms]![LeFormulaire]![LeControleAnnee]);
Avatar
Patexocet
C'est bien sur une seule ligne dans les critères de la requête et
réponse "Syntaxe incorrecte ou trop complexe pour être évaluée ou
éléments trop compliqués. (PeriodiciteDepense = contrôle mois -
ImputeSaison = contrôle année)

Entre AjDate("m";1;CDate("1/" & [Forms]![FicheClient]!
[PeriodiciteDepense] & "/" & [Forms]![FicheClient]![ImputeSaison]-1))
Et CDate("1/" & [Forms]![FicheClient]![PeriodiciteDepense] & "/" &
[Forms]![FicheCliente]![ImputeSaison])

Si j'affiche cette requête en SQL ça donne ça:

SELECT TbleClient.IDClient, TbleDepense.DateImputation,
TbleDepense.ImputeSaison, [TbleClient]![Rue] & " " & [TbleClient]!
[Num] & " à " & [TbleClient]![Code] & " " & [TbleClient]![Commune] AS
LibelleAdresseClient, TbleDepense.DateDepense, TbleDepense.Montant,
TbleDepense.NumFacture, TbleDepense.NomFournisseur,
TbleDepense.Libelle, TbleDepense.TypeFrais
FROM TbleClient RIGHT JOIN TbleDepense ON TbleClient.IDClient =
TbleClient.IDClient
WHERE (((TbleClient.IDClient)=[Forms]![FicheDepense]![IDClient]) AND
((TbleDepense.DateImputation) Between DateAdd("m",1,CVDate("1/" &
[Forms]![FicheClient]![PeriodiciteDepense] & "/" & [Forms]!
[FicheClient]![ImputeSaison]-1)) And CVDate("1/" & [Forms]!
[FicheClient]![PeriodiciteDepense] & "/" & [Forms]![FicheClient]!
[ImputeSaison])))
ORDER BY TbleDepense.DateDepense DESC;

Encore merci pour ton aide.

Pat
Avatar
Michel__D
Bonjour,

Il y a une erreur dans la jointure (??????) sur le SQL fournis tu joins la même table :

SELECT T1.IDClient, T2.DateImputation, T2.ImputeSaison,
T1.Rue & " " & T1.Num & " à " & T1.Code & " " & T1.Commune AS LibelleAdresseClient,
T2.DateDepense, T2.Montant, T2.NumFacture, T2.NomFournisseur, T2.Libelle, T2.TypeFrais
FROM TbleClient AS T1 RIGHT JOIN TbleDepense AS T2 ON T1.IDClient = ??????.IDClient
WHERE (T1.IDClient=[Forms]![FicheDepense]![IDClient]) AND
(T2.DateImputation Between DateAdd("m",1,CDate("1/" &
[Forms]![FicheClient]![PeriodiciteDepense] & "/" &
[Forms]![FicheClient]![ImputeSaison]-1)) And CDate("1/" &
[Forms]![FicheClient]![PeriodiciteDepense] & "/" &
[Forms]![FicheClient]![ImputeSaison]))
ORDER BY T2.DateDepense DESC;



"Patexocet" a écrit dans le message de
news:
C'est bien sur une seule ligne dans les critères de la requête et
réponse "Syntaxe incorrecte ou trop complexe pour être évaluée ou
éléments trop compliqués. (PeriodiciteDepense = contrôle mois -
ImputeSaison = contrôle année)

Entre AjDate("m";1;CDate("1/" & [Forms]![FicheClient]!
[PeriodiciteDepense] & "/" & [Forms]![FicheClient]![ImputeSaison]-1))
Et CDate("1/" & [Forms]![FicheClient]![PeriodiciteDepense] & "/" &
[Forms]![FicheCliente]![ImputeSaison])

Si j'affiche cette requête en SQL ça donne ça:

SELECT TbleClient.IDClient, TbleDepense.DateImputation,
TbleDepense.ImputeSaison, [TbleClient]![Rue] & " " & [TbleClient]!
[Num] & " à " & [TbleClient]![Code] & " " & [TbleClient]![Commune] AS
LibelleAdresseClient, TbleDepense.DateDepense, TbleDepense.Montant,
TbleDepense.NumFacture, TbleDepense.NomFournisseur,
TbleDepense.Libelle, TbleDepense.TypeFrais
FROM TbleClient RIGHT JOIN TbleDepense ON TbleClient.IDClient TbleClient.IDClient
WHERE (((TbleClient.IDClient)=[Forms]![FicheDepense]![IDClient]) AND
((TbleDepense.DateImputation) Between DateAdd("m",1,CVDate("1/" &
[Forms]![FicheClient]![PeriodiciteDepense] & "/" & [Forms]!
[FicheClient]![ImputeSaison]-1)) And CVDate("1/" & [Forms]!
[FicheClient]![PeriodiciteDepense] & "/" & [Forms]![FicheClient]!
[ImputeSaison])))
ORDER BY TbleDepense.DateDepense DESC;

Encore merci pour ton aide.

Pat
Avatar
Patexocet
Bonjour Michel,

L'erreur ne vient pas de là, il s'agissait d'une erreur de
transcription de ma part et je m'excuse pour cette perte de temps.

Il fallait lire "RIGHT JOIN TbleDepense ON TbleClient.IDClient =
TbleDepense.IDClient " ce qui donne le code ci-dessous. J'ai remarqué
que tu avais remplacé le ON par AS mais Access est pas d'accord .

En bref, la requête que tu as concoctée fonctionnait presque (avec les
remarques indiquées, concernant les enregistrements retournés dans mon
post ci-dessus) mais depuis que j'ai rajouté les quatre slash (4 /)
comme tu me le suggérais elle ne fonctionne plus.

-----------------------------------------------
SELECT TbleClient.IDClient, TbleDepense.DateImputation,
TbleDepense.ImputeSaison, [TbleClient]![Rue] & " " & [TbleClient]!
[Num] & " à " & [TbleClient]![Code] & " " & [TbleClient]![Commune] AS
LibelleAdresseClient, TbleDepense.DateDepense, TbleDepense.Montant,
TbleDepense.NumFacture, TbleDepense.NomFournisseur,
TbleDepense.Libelle, TbleDepense.TypeFrais
FROM TbleClient RIGHT JOIN TbleDepense ON TbleClient.IDClient =
TbleDepense.IDClient
WHERE (((TbleClient.IDClient)=[Forms]![FicheDepense]![IDClient]) AND
((TbleDepense.DateImputation) Between DateAdd("m",1,CVDate("1/" &
[Forms]![FicheClient]![PeriodiciteDepense] & "/" & [Forms]!
[FicheClient]![ImputeSaison]-1)) And CVDate("1/" & [Forms]!
[FicheClient]![PeriodiciteDepense] & "/" & [Forms]![FicheClient]!
[ImputeSaison])))
ORDER BY TbleDepense.DateDepense DESC;
---------------------------------------------------------------
Avatar
Michel__D
Re,

Alors dans ce cas voici la requête qui devrait marcher

SELECT T1.IDClient, T2.DateImputation, T2.ImputeSaison,
T1.Rue & " " & T1.Num & " à " & T1.Code & " " & T1.Commune AS LibelleAdresseClient,
T2.DateDepense, T2.Montant, T2.NumFacture, T2.NomFournisseur, T2.Libelle, T2.TypeFrais
FROM TbleClient AS T1 RIGHT JOIN TbleDepense AS T2 ON T1.IDClient = T2.IDClient
WHERE (T1.IDClient=[Forms]![FicheDepense]![IDClient]) And (T2.DateImputation Between
DateAdd("m",1,CDate("1/" & [Forms]![FicheClient]![PeriodiciteDepense] & "/" & [Forms]![FicheClient]![ImputeSaison]-1))
And CDate("1/" & [Forms]![FicheClient]![PeriodiciteDepense] & "/" & [Forms]![FicheClient]![ImputeSaison]))
ORDER BY T2.DateDepense DESC;

PS1:Et non je n'ai pas remplaçé le ON par un AS, par contre j'utilise des alias pour
identifier les tables afin de raccourcir les expressions.

PS2:Au passage j'utilise CDate au lieu de CVDate.

PS3:Si cela ne fonctionne plus avec les "/", vérifie que tu as bien des valeurs "1", "2", etc ...
pour les mois.


"Patexocet" a écrit dans le message de
news:
Bonjour Michel,

L'erreur ne vient pas de là, il s'agissait d'une erreur de
transcription de ma part et je m'excuse pour cette perte de temps.

Il fallait lire "RIGHT JOIN TbleDepense ON TbleClient.IDClient TbleDepense.IDClient " ce qui donne le code ci-dessous. J'ai remarqué
que tu avais remplacé le ON par AS mais Access est pas d'accord .

En bref, la requête que tu as concoctée fonctionnait presque (avec les
remarques indiquées, concernant les enregistrements retournés dans mon
post ci-dessus) mais depuis que j'ai rajouté les quatre slash (4 /)
comme tu me le suggérais elle ne fonctionne plus.

-----------------------------------------------
SELECT TbleClient.IDClient, TbleDepense.DateImputation,
TbleDepense.ImputeSaison, [TbleClient]![Rue] & " " & [TbleClient]!
[Num] & " à " & [TbleClient]![Code] & " " & [TbleClient]![Commune] AS
LibelleAdresseClient, TbleDepense.DateDepense, TbleDepense.Montant,
TbleDepense.NumFacture, TbleDepense.NomFournisseur,
TbleDepense.Libelle, TbleDepense.TypeFrais
FROM TbleClient RIGHT JOIN TbleDepense ON TbleClient.IDClient TbleDepense.IDClient
WHERE (((TbleClient.IDClient)=[Forms]![FicheDepense]![IDClient]) AND
((TbleDepense.DateImputation) Between DateAdd("m",1,CVDate("1/" &
[Forms]![FicheClient]![PeriodiciteDepense] & "/" & [Forms]!
[FicheClient]![ImputeSaison]-1)) And CVDate("1/" & [Forms]!
[FicheClient]![PeriodiciteDepense] & "/" & [Forms]![FicheClient]!
[ImputeSaison])))
ORDER BY TbleDepense.DateDepense DESC;
---------------------------------------------------------------
Avatar
Patexocet
Le champ contenant le mois est bien "11" mais en format texte, j'ai
donc modifié la table pour que "11" soit au format numérique, 2008
étaitt au format numérique mais ça ne change rien, j'ai toujours le
même message d'erreur.

Lors de ce test j'ai bien CDate.

Il n'y a que les / qui posent problème, si je les enlève ça
fonctionne.

Désolé de te prendre ton temps.
Avatar
Michel__D
Re,

Mouais chez moi cela fonctionne avec un "/" ou un " " comme séparateur
probablement un paramêtrage spécifique des options régionales mais
si cela fonctionne avec un " " il n'y a pas de problème.

PS:Autre remarque je pense que tu peux remplacer ta jointure RIGHT JOIN
par une classique jointure INNER JOIN.


"Patexocet" a écrit dans le message de
news:
Le champ contenant le mois est bien "11" mais en format texte, j'ai
donc modifié la table pour que "11" soit au format numérique, 2008
étaitt au format numérique mais ça ne change rien, j'ai toujours le
même message d'erreur.

Lors de ce test j'ai bien CDate.

Il n'y a que les / qui posent problème, si je les enlève ça
fonctionne.

Désolé de te prendre ton temps.
1 2 3 4