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

Algoritme sur des calculs de trajet

17 réponses
Avatar
Kolele
Salut et bonne année à toutes et à tous !
Dans ACCESS 2002, je cherche à déterminer des trajets de profs visitant en
entreprise leurs étudiants stagiaires (pour ensuite calculer leurs frais de
déplacement). Lorsque le prof visite un seul élève par jour, no problemo car
le départ et l'arrivée sont des constantes : CommuneDépart = le lycée ;
CommuneArrivée = l'entreprise.
La difficulté provient de ce que chaque prof visite plusieurs stagiaires le
même jour : ils partent du lycée visiter le premier stagiaire, mais ensuite
repartent de l'entreprise visitée pour se rendre dans l'entreprise du
deuxième stagiaire. La commune de départ change.

Soit une requête sélection reprenant, pour chaque prof, deux champs :
DateVisiteProf (la date où le prof effectue la visite du stagiaire) et
CommuneEntreprise (la commune de l'entreprise où il doit se rendre). Je
voudrais, par un algorithme simple, renvoyer les valeurs de deux champs
calculés de ma requête : CommuneDépart et CommuneArrivée.

- Pour CommuneDépart :
SI il n'y a pas d'autre visite le même jour, ALORS CommuneDépart = "THIAIS"
(le lycée).
SINON, CommuneDépart = CommuneArrivée de l'enregistrement précédent (la
visite précédente).

- Pour CommuneArrivée :
SI il y a déjà eu un déplacement le même jour et que la visite est la
dernière du jour, ALORS, CommuneArrivée = "THIAIS" (retour au lycée).
SINON, CommuneArrivée = CommuneEntreprise

J'arrive à faire ça sur EXCEL, par des fonction en SI ET OU enchâssées.
Sur ACCESS, dans une requête, je n'arrive pas à désigner la valeur de
l'enregistrement précédent. Et le VBA n'est pas ma langue maternelle. Merci
du coup de m

--
Pierre.

10 réponses

1 2
Avatar
db
Kolele a écrit :
Salut et bonne année à toutes et à tous !
[...]
Soit une requête sélection reprenant, pour chaque prof, deux champs :
DateVisiteProf (la date où le prof effectue la visite du stagiaire) et
CommuneEntreprise (la commune de l'entreprise où il doit se rendre). Je
voudrais, par un algorithme simple, renvoyer les valeurs de deux champs
calculés de ma requête : CommuneDépart et CommuneArrivée.


> [...]

Dans Access, la notion d'enregistrement précédent n'a de sens que si une
donnée permet de préciser ce qu'on entend par "précédent" !
En l'occurrence, il va vous falloir - au moins - indiquer l'ordre dans
lequel les visites se sont effectuées.

Si on a, par exemple, une table Déplacements avec les colonnes suivantes
: idprof, datevisite, ordre, commune alors dans une requête qui affiche
les 4 champs, on affichera un 5ème champ communedépart qui contiendra :
départ:
VraiFaux([ordre]=1;"Thiais";RechDom("commune";"Déplacements";"idprof=" &
[idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1))

Testé avec une table Déplacements contenant les lignes suivantes :

id idprof datevisite ordre commune
11 10 01/01/2010 1 paris
12 10 01/01/2010 3 thiais
13 10 01/01/2010 2 orly
14 10 21/12/2009 1 orly
15 11 01/01/2010 1 arcueil



db
Avatar
Kolele
merci db. J'ai essayé ta table et la requête avec la fonction Rechdom, ça
marche et ça m'ouvre des horizons.
Je cherche maintenant à automatiser le champ "ordre" de la visite. Faire en
sorte que, automatiquement, la première saisie d'une visite du prof "10" ait
valeur 1 pour "ordre", la deuxième 2, etc.… Une espèce de Type de données
"numéroauto" qui ne s'incrémente qu'avec le même prof et la même date, et qui
se remette à zéro ensuite.
Mais déjà, j'ai de quoi m'occuper tout le week-end pour digérer ton rechdom.
Merci encore.

--
Pierre.


"db" a écrit :

Kolele a écrit :
> Salut et bonne année à toutes et à tous !
> [...]
> Soit une requête sélection reprenant, pour chaque prof, deux champs :
> DateVisiteProf (la date où le prof effectue la visite du stagiaire) et
> CommuneEntreprise (la commune de l'entreprise où il doit se rendre). Je
> voudrais, par un algorithme simple, renvoyer les valeurs de deux champs
> calculés de ma requête : CommuneDépart et CommuneArrivée.
> [...]

Dans Access, la notion d'enregistrement précédent n'a de sens que si une
donnée permet de préciser ce qu'on entend par "précédent" !
En l'occurrence, il va vous falloir - au moins - indiquer l'ordre dans
lequel les visites se sont effectuées.

Si on a, par exemple, une table Déplacements avec les colonnes suivantes
: idprof, datevisite, ordre, commune alors dans une requête qui affiche
les 4 champs, on affichera un 5ème champ communedépart qui contiendra :
départ:
VraiFaux([ordre]=1;"Thiais";RechDom("commune";"Déplacements";"idprof=" &
[idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1))

Testé avec une table Déplacements contenant les lignes suivantes :

id idprof datevisite ordre commune
11 10 01/01/2010 1 paris
12 10 01/01/2010 3 thiais
13 10 01/01/2010 2 orly
14 10 21/12/2009 1 orly
15 11 01/01/2010 1 arcueil



db
.



Avatar
Kolele
Rebonjour à tous
J'ai des problèmes avec la fonction RechDom, sur le meme projet. Quand je
reprends la syntaxe de db, ça marche :

communedépart:
VraiFaux([ordre]=1;"Thiais";RechDom("commune";"9-DéplacementsEssai";"idprof="
& [idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1))

mais quand je pointe la fonction sur une requête
([11-PlannificationVisiteSousForm]), aucun résultat n'est renvoyé :
CommuneDépart:
VraiFaux([OrdreTrajet]=1;"THIAIS";RechDom("[NomCommune]";"11-PlannificationVisiteSousForm";"[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" & [DateVisiteProf] & "# and
[OrdreTrajet]=" & [OrdreTrajet]-1))

RechDom ne fonctionnerait pas sur une requête, ou autre syntaxe ?
J'aimerais bien aussi comprendre la syntaxe de la fonction (le sens des
guillemets, des & et des dièses. L'aide n'est pas toujours très claire.
Merci à tous.

--
Pierre.


"db" a écrit :

Kolele a écrit :
> Salut et bonne année à toutes et à tous !
> [...]
> Soit une requête sélection reprenant, pour chaque prof, deux champs :
> DateVisiteProf (la date où le prof effectue la visite du stagiaire) et
> CommuneEntreprise (la commune de l'entreprise où il doit se rendre). Je
> voudrais, par un algorithme simple, renvoyer les valeurs de deux champs
> calculés de ma requête : CommuneDépart et CommuneArrivée.
> [...]

Dans Access, la notion d'enregistrement précédent n'a de sens que si une
donnée permet de préciser ce qu'on entend par "précédent" !
En l'occurrence, il va vous falloir - au moins - indiquer l'ordre dans
lequel les visites se sont effectuées.

Si on a, par exemple, une table Déplacements avec les colonnes suivantes
: idprof, datevisite, ordre, commune alors dans une requête qui affiche
les 4 champs, on affichera un 5ème champ communedépart qui contiendra :
départ:
VraiFaux([ordre]=1;"Thiais";RechDom("commune";"Déplacements";"idprof=" &
[idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1))

Testé avec une table Déplacements contenant les lignes suivantes :

id idprof datevisite ordre commune
11 10 01/01/2010 1 paris
12 10 01/01/2010 3 thiais
13 10 01/01/2010 2 orly
14 10 21/12/2009 1 orly
15 11 01/01/2010 1 arcueil



db
.



Avatar
db
Kolele a écrit :
Rebonjour à tous
J'ai des problèmes avec la fonction RechDom, sur le meme projet. Quand je
reprends la syntaxe de db, ça marche :

communedépart:
VraiFaux([ordre]=1;"Thiais";RechDom("commune";"9-DéplacementsEssai";"idprof="
& [idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1))

mais quand je pointe la fonction sur une requête
([11-PlannificationVisiteSousForm]), aucun résultat n'est renvoyé :
CommuneDépart:
VraiFaux([OrdreTrajet]=1;"THIAIS";RechDom("[NomCommune]";"11-PlannificationVisiteSousForm";"[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" & [DateVisiteProf] & "# and
[OrdreTrajet]=" & [OrdreTrajet]-1))

RechDom ne fonctionnerait pas sur une requête, ou autre syntaxe ?
J'aimerais bien aussi comprendre la syntaxe de la fonction (le sens des
guillemets, des & et des dièses. L'aide n'est pas toujours très claire.
Merci à tous.




Bonsoir,

Je ne sais pas si ça vient de là, mais j'ai effectivement oublié que la
date doit être passée au format SQL , c'est-à-dire américain :
..." and [DateVisiteProf]=#" & Format([DateVisiteProf];"mm/jj/aaaa") & ...


La syntaxe de RechDom attend 3 paramètres : le champ renvoyé
([NomCommune], la table/requête ([11-PlannificationVisiteSousForm]) et
la condition de recherche ("[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" &
Format([DateVisiteProf];"mm/jj/aaaa") & "# and
[OrdreTrajet]=" & [OrdreTrajet]-1))


Sur une ligne où les champs [CléPersonnel], [DateVisiteProf] et
[OrdreTrajet] contiendraient respectivement 9, 13/1/2001 et 4,
cette condition de recherche pourrait s'écrire :
"[CléPersonnel]=9 and [DateVisiteProf]=#01/13/2010# and [OrdreTrajet]=3"
(une date doit être encadrée de 2 #)

mais les trois critères 9, 01/13/2010, 2 dépendent de la ligne de la
requête, il faut donc les remplacer par les champs correspondants, et
les "sortir" de la chaîne de caractères :

"[CléPersonnel]=" & [CléPersonnel] : à l'exécution, ça donne :
[CléPersonnel]=9

"[DateVisiteProf]=#" & Format([DateVisiteProf];"mm/dd/aaaa") & "#" : à
l'exécution, ça donne : [DateVisiteProf]=#13/01/2001"

"[OrdreTrajet]=" & [OrdreTrajet]-1 : à l'exécution, ça donne :
[OrdreTrajet]=3

Le symbole & sert à la concaténation. Il ne reste plus qu'à lier les
critères avec l'opérateur logique "and" :

"[CléPersonnel]=" & [CléPersonnel] & " and [DateVisiteProf]=#" &
Format([DateVisiteProf];"mm/dd/aaaa") & "# and [OrdreTrajet]=" &
[OrdreTrajet]-1"

Hum... Est-ce plus clair ?

db
Avatar
Kolele
Ça maaaarche !

Ça ne venait pas du format SQL de la date : la première fonction qui
fonctionnait hier avec la table DEPLACEMENT renvoyait un message d'erreur
avec ce format.
Ça a mis du temps à devenir stable, en revanche. La même expression s'est
mise à fonctionner dans une copie de la base, alors qu'elle ne fonctionnait
dans la base initiale.

Un grand merci, en tout cas, db. Je m'attaque à la commune d'arrivée. Il me
faut gérer le retour du prof : après avoir fait une ou plusieurs visites en
entreprise, il doit revenir à la case départ (le lycée), ce qui génère un
nouveau trajet. J'ai quelques idées.

Côté syntaxe, un dernier truc me chiffonne : les &, les # fonctionnent par
paires, encadrant une expression ; bizarrement, pas les guillemets. A quoi
servent les guillemets dans RechDom ?

--
Pierre.


"db" a écrit :

Kolele a écrit :
> Rebonjour à tous
> J'ai des problèmes avec la fonction RechDom, sur le meme projet. Quand je
> reprends la syntaxe de db, ça marche :
>
> communedépart:
> VraiFaux([ordre]=1;"Thiais";RechDom("commune";"9-DéplacementsEssai";"idprof="
> & [idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1))
>
> mais quand je pointe la fonction sur une requête
> ([11-PlannificationVisiteSousForm]), aucun résultat n'est renvoyé :
> CommuneDépart:
> VraiFaux([OrdreTrajet]=1;"THIAIS";RechDom("[NomCommune]";"11-PlannificationVisiteSousForm";"[CléPersonnel]="
> & [CléPersonnel] & " and [DateVisiteProf]=#" & [DateVisiteProf] & "# and
> [OrdreTrajet]=" & [OrdreTrajet]-1))
>
> RechDom ne fonctionnerait pas sur une requête, ou autre syntaxe ?
> J'aimerais bien aussi comprendre la syntaxe de la fonction (le sens des
> guillemets, des & et des dièses. L'aide n'est pas toujours très claire.
> Merci à tous.
>

Bonsoir,

Je ne sais pas si ça vient de là, mais j'ai effectivement oublié que la
date doit être passée au format SQL , c'est-à-dire américain :
...." and [DateVisiteProf]=#" & Format([DateVisiteProf];"mm/jj/aaaa") & ...


La syntaxe de RechDom attend 3 paramètres : le champ renvoyé
([NomCommune], la table/requête ([11-PlannificationVisiteSousForm]) et
la condition de recherche ("[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" &
Format([DateVisiteProf];"mm/jj/aaaa") & "# and
[OrdreTrajet]=" & [OrdreTrajet]-1))


Sur une ligne où les champs [CléPersonnel], [DateVisiteProf] et
[OrdreTrajet] contiendraient respectivement 9, 13/1/2001 et 4,
cette condition de recherche pourrait s'écrire :
"[CléPersonnel]=9 and [DateVisiteProf]=#01/13/2010# and [OrdreTrajet]=3"
(une date doit être encadrée de 2 #)

mais les trois critères 9, 01/13/2010, 2 dépendent de la ligne de la
requête, il faut donc les remplacer par les champs correspondants, et
les "sortir" de la chaîne de caractères :

"[CléPersonnel]=" & [CléPersonnel] : à l'exécution, ça donne :
[CléPersonnel]=9

"[DateVisiteProf]=#" & Format([DateVisiteProf];"mm/dd/aaaa") & "#" : à
l'exécution, ça donne : [DateVisiteProf]=#13/01/2001"

"[OrdreTrajet]=" & [OrdreTrajet]-1 : à l'exécution, ça donne :
[OrdreTrajet]=3

Le symbole & sert à la concaténation. Il ne reste plus qu'à lier les
critères avec l'opérateur logique "and" :

"[CléPersonnel]=" & [CléPersonnel] & " and [DateVisiteProf]=#" &
Format([DateVisiteProf];"mm/dd/aaaa") & "# and [OrdreTrajet]=" &
[OrdreTrajet]-1"

Hum... Est-ce plus clair ?

db
.



Avatar
db
Kolele a écrit :
Ça maaaarche !



Tant mieux :-)

Ça ne venait pas du format SQL de la date : la première fonction qui
fonctionnait hier avec la table DEPLACEMENT renvoyait un message d'erreur
avec ce format.



Etrange...

Ça a mis du temps à devenir stable, en revanche. La même expression s'est
mise à fonctionner dans une copie de la base, alors qu'elle ne fonctionnait
dans la base initiale.

Un grand merci, en tout cas, db. Je m'attaque à la commune d'arrivée. Il me
faut gérer le retour du prof : après avoir fait une ou plusieurs visites en
entreprise, il doit revenir à la case départ (le lycée), ce qui génère un
nouveau trajet. J'ai quelques idées.



Il me semble que je traiterais ça dans la même requête avec une UNION.

Côté syntaxe, un dernier truc me chiffonne : les &, les # fonctionnent par
paires, encadrant une expression ; bizarrement, pas les guillemets. A quoi
servent les guillemets dans RechDom ?



Les # et les guillemets fonctionnent par paire :
RechDom("[NomCommune]";"11-PlannificationVisiteSousForm";"[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" & [DateVisiteProf] & "# and
[OrdreTrajet]=" & [OrdreTrajet]-1))

Si je compte bien, il y a 6 guillemets dans le RechDom et deux #. Les guillemets servent à constituer la chaîne de la condition de recherche.

Les & ne fonctionnent pas par paire : il y en a 5 !

db
Avatar
Kolele
Bonjour db et vous tous,
Je crois que j'ai été présomptueux pour croire que je pouvais rédiger tout
seul.
Je rappelle que le projet consiste à déterminer les trajets de profs qui
visitent leurs élèves en stage en entreprise. Tout fonctionne (la commune de
départ, d'arrivée), il reste maintenant la commune de retour : le dernier
trajet de la journée est celui qui ramène mon prof au lycée.

Dans ma requête sur les trajets, je créé un nouveau champ calculé
[CommuneRetour] et je recherche la valeur suivante : SI pour le même prof, à
la même date, la visite est la dernière de la journée; ALORS la valeur
="THIAIS" ; SINON la valeur = "" (rien).
La formule devrait donc être constituée par une fonction VRAIFAUX, le
problème va être de traduire le premier terme. Il faudrait une fonction
RechDom qui renverrait une valeur NULL :
CommuneRetour:
VraiFaux(RechDom("[OrdreTrajet]";"11-PlannificationVisiteSousForm";
"[CléPersonnel]=" & [CléPersonnel] & "
and [DateVisiteProf]=#" & [DateVisiteProf] & "#
and [OrdreTrajet]=" & [OrdreTrajet]+1)) RENVOIE UNE VALEUR NULLE;
"THIAIS";
"")
Bon dimanche à tous et merci de votre aide si précieuse.
--
Pierre.


"db" a écrit :

Kolele a écrit :
> Ça maaaarche !

Tant mieux :-)

> Ça ne venait pas du format SQL de la date : la première fonction qui
> fonctionnait hier avec la table DEPLACEMENT renvoyait un message d'erreur
> avec ce format.

Etrange...

> Ça a mis du temps à devenir stable, en revanche. La même expression s'est
> mise à fonctionner dans une copie de la base, alors qu'elle ne fonctionnait
> dans la base initiale.
>
> Un grand merci, en tout cas, db. Je m'attaque à la commune d'arrivée. Il me
> faut gérer le retour du prof : après avoir fait une ou plusieurs visites en
> entreprise, il doit revenir à la case départ (le lycée), ce qui génère un
> nouveau trajet. J'ai quelques idées.

Il me semble que je traiterais ça dans la même requête avec une UNION.

> Côté syntaxe, un dernier truc me chiffonne : les &, les # fonctionnent par
> paires, encadrant une expression ; bizarrement, pas les guillemets. A quoi
> servent les guillemets dans RechDom ?

Les # et les guillemets fonctionnent par paire :
RechDom("[NomCommune]";"11-PlannificationVisiteSousForm";"[CléPersonnel]="
& [CléPersonnel] & " and [DateVisiteProf]=#" & [DateVisiteProf] & "# and
[OrdreTrajet]=" & [OrdreTrajet]-1))

Si je compte bien, il y a 6 guillemets dans le RechDom et deux #. Les guillemets servent à constituer la chaîne de la condition de recherche.

Les & ne fonctionnent pas par paire : il y en a 5 !

db


.



Avatar
db
Kolele a écrit :
Bonjour db et vous tous,
Je rappelle que le projet consiste à déterminer les trajets de profs qui
visitent leurs élèves en stage en entreprise. Tout fonctionne (la commune de
départ, d'arrivée), il reste maintenant la commune de retour : le dernier
trajet de la journée est celui qui ramène mon prof au lycée.




Bonjour,

En fait, chaque ligne de la requête actuelle est un trajet d'une ville à une autre. Le trajet de retour est donc une ligne (et non une colonne) supplémentaire. C'est pour cela que je parlais d'une requête UNION dans mon post précédent.

A partir de l'exemple de la table Déplacements déjà cité, je ferais une requête dans ce genre :

SELECT idprof, datevisite,ordre, IIf([ordre]=1,"Thiais",DLookUp("commune","Déplacements","idprof=" & [idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1)) AS communedépart, commune
FROM Déplacements

union

select idprof,datevisite,ordre+1,commune,"Thiais"
from Déplacements D1
where ordre=(select max(ordre) from Déplacements D2 where D2.idprofÑ.idprof and D2.datevisiteÑ.datevisite)

qui crée une ligne supplémentaire par prof et datevisite avec le trajet retour.

Evidemment, quand la dernière visite est à Thiais, ça rajoute une ligne Thais-Thiais, mais avec un kilométrage à 0, ça ne reviendra pas cher :-)

db
Avatar
Michel__D
Bonjour,

Kolele a écrit :
Salut et bonne année à toutes et à tous !
Dans ACCESS 2002, je cherche à déterminer des trajets de profs visitant en
entreprise leurs étudiants stagiaires (pour ensuite calculer leurs frais de
déplacement). Lorsque le prof visite un seul élève par jour, no problemo car
le départ et l'arrivée sont des constantes : CommuneDépart = le lycée ;
CommuneArrivée = l'entreprise.
La difficulté provient de ce que chaque prof visite plusieurs stagiaires le
même jour : ils partent du lycée visiter le premier stagiaire, mais ensuite
repartent de l'entreprise visitée pour se rendre dans l'entreprise du
deuxième stagiaire. La commune de départ change.

Soit une requête sélection reprenant, pour chaque prof, deux champs :
DateVisiteProf (la date où le prof effectue la visite du stagiaire) et
CommuneEntreprise (la commune de l'entreprise où il doit se rendre). Je
voudrais, par un algorithme simple, renvoyer les valeurs de deux champs
calculés de ma requête : CommuneDépart et CommuneArrivée.

- Pour CommuneDépart :
SI il n'y a pas d'autre visite le même jour, ALORS CommuneDépart = "THIAIS"
(le lycée).
SINON, CommuneDépart = CommuneArrivée de l'enregistrement précédent (la
visite précédente).

- Pour CommuneArrivée :
SI il y a déjà eu un déplacement le même jour et que la visite est la
dernière du jour, ALORS, CommuneArrivée = "THIAIS" (retour au lycée).
SINON, CommuneArrivée = CommuneEntreprise

J'arrive à faire ça sur EXCEL, par des fonction en SI ET OU enchâssées.
Sur ACCESS, dans une requête, je n'arrive pas à désigner la valeur de
l'enregistrement précédent. Et le VBA n'est pas ma langue maternelle. Merci
du coup de m





Voici une autre solution en 2 requêtes et avec une table [LaTable] qui
possède les champs suivants :
[IdEnr], [IdProf], [DateVisite], [Commune]

Le champ [DateVisite] doit par contre contenir la date et l'heure de la
visite.

Voici la 1ère requête "LaRequete" qui énumère le nombre de visites par
jour et par prof :

SELECT T1.IdEnr, T1.IdProf, Format(T1.DateVisite,"yyyy/mm/dd") AS
DateVisite,
T1.Commune, Count(T2.IdEnr) AS Ordre
FROM LaTable AS T1 INNER JOIN LaTable AS T2 ON
(T1.DateVisite>=T2.DateVisite)
AND (Format(T1.DateVisite,"dd/mm/yyyy")=Format(T2.DateVisite,"dd/mm/yyyy"))
AND (T1.IdProf=T2.IdProf)
GROUP BY T1.IdEnr, T1.IdProf, Format(T1.DateVisite,"yyyy/mm/dd"),
T1.Commune;


Et la requête qui fournit le résultat (avec départ à "Origine" et retour
à "Origine") :

PARAMETERS [Quel Prof ?] Long, [Quelle Date ?] DateTime;
SELECT T.IdProf, T.DateVisite, "Origine" AS Depart, T.Commune AS Arrivee
FROM LaTable AS T INNER JOIN LaRequete AS R1 ON T.IdEnr = R1.IdEnr
WHERE R1.Ordre=1 And R1.IdProf=[Quel Prof ?]
And R1.DateVisite = Format([Quelle Date ?], "yyyy/mm/dd")
ORDER BY T.IdProf, Format(T.DateVisite,"yyyy/mm/dd hh:mm:ss")
UNION SELECT T.IdProf, T.DateVisite, R2.Commune, R1.Commune
FROM LaTable AS T INNER JOIN (LaRequete AS R1 INNER JOIN LaRequete AS R2
ON R1.IdProf = R2.IdProf And R1.DateVisite = R2.DateVisite
And R1.Ordre = R2.Ordre+1) ON T.IdEnr = R1.IdEnr
WHERE R1.Ordre>1 And R1.IdProf=[Quel Prof ?]
And R1.DateVisite = Format([Quelle Date ?], "yyyy/mm/dd")
UNION SELECT T.IdProf, DateAdd("s",1,T.DateVisite) AS DateVisite,
T.Commune AS Depart,
"Origine" AS Arrivee
FROM LaTable AS T INNER JOIN LaRequete AS R1 ON T.IdEnr=R1.IdEnr
WHERE R1.Ordre=(SELECT TOP 1 R.Ordre FROM LaRequete AS R
WHERE R.IdProf = [Quel Prof ?] And R.DateVisite = Format([Quelle Date
?], "yyyy/mm/dd")
ORDER BY R.Ordre DESC) And R1.IdProf = [Quel Prof ?]
And R1.DateVisite = Format([Quelle Date ?], "yyyy/mm/dd");
Avatar
Kolele
Aie, c'est vertigineux ! Basculer en mode SQL pour moi, c'est comme basculer
dans l'univers de Matrix). Je viens de trouver un tutoriel sur les requêtes
union, je me l'avale et je reviens.
Est-ce à dire que mon idée de gérer la CommuneRetour par une colonne
supplémentaire et une fonction VraiFaux et RechDom n'est pas réalisable ?
C'est demain la rentrée et, avec la période des comptes financiers, je vais
devoir consacrer moins de temps à mon application.
--
Pierre.


"db" a écrit :

Kolele a écrit :
> Bonjour db et vous tous,
> Je rappelle que le projet consiste à déterminer les trajets de profs qui
> visitent leurs élèves en stage en entreprise. Tout fonctionne (la commune de
> départ, d'arrivée), il reste maintenant la commune de retour : le dernier
> trajet de la journée est celui qui ramène mon prof au lycée.
>

Bonjour,

En fait, chaque ligne de la requête actuelle est un trajet d'une ville à une autre. Le trajet de retour est donc une ligne (et non une colonne) supplémentaire. C'est pour cela que je parlais d'une requête UNION dans mon post précédent.

A partir de l'exemple de la table Déplacements déjà cité, je ferais une requête dans ce genre :

SELECT idprof, datevisite,ordre, IIf([ordre]=1,"Thiais",DLookUp("commune","Déplacements","idprof=" & [idprof] & " and datevisite=#" & [datevisite] & "# and ordre=" & [ordre]-1)) AS communedépart, commune
FROM Déplacements

union

select idprof,datevisite,ordre+1,commune,"Thiais"
from Déplacements D1
where ordre=(select max(ordre) from Déplacements D2 where D2.idprofÑ.idprof and D2.datevisiteÑ.datevisite)

qui crée une ligne supplémentaire par prof et datevisite avec le trajet retour.

Evidemment, quand la dernière visite est à Thiais, ça rajoute une ligne Thais-Thiais, mais avec un kilométrage à 0, ça ne reviendra pas cher :-)

db
.



1 2