Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 21h22   #1
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut calcul nombre de date

Bonsoir,
Alors je vais essayé d'être clair... et ça va pas être simple !!
j'ai une table dans laquelle se trouve deux colonnes "date" et "statut"
la date reprends toutes les dates (du 01/012001 31/12/2015) et la colonne statut j'ai soit un "T" pour travaillé, soit "PT" pour non travaillé
Dans une autre table, tout un tas de données dont 2 dates :
1- la date de confirmation de l'ordre de transfert
2- la date de l'extraction
Dans une requête je calcul la différence entre (date de confirmation) et (date d'extraction): j'obtiens le nombre de jour global entre ce deux dates, ça c'est plutôt facile...
Par contre gros souci, l'idée c'est de pouvoir soustraire les jours "non travaillés" (PT) pour chaque date
Alors quel lien utiliser entre les deux tables (si c'est la solution) ou quel est éventuellement la formule a utiliser dans la requête ?
J'espère avoir été clair.

D'avance merci
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 21h35   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Méthode butale : compter le nombre de jour PT entre tes deux dates. Un truc du genre

Code sql :
SELECT count([Statut]) FROM TaTableCalendrier WHERE [TaDate] BETWEEN [prmDateDebut] AND [prmDateFin] AND [Statut]="PT"

où prmDateDebut et prmDateFin son les dates de début et de fin choisies.

autre méthode plus directe mais toujours aussi brutale : compter les jours travaillés dans la table calendrier :

Code sql :
SELECT count([Statut]) FROM TaTableCalendrier WHERE [TaDate] BETWEEN [prmDateDebut] AND [prmDateFin] AND [Statut]="T"

cela évite d'avoir à soustraire les PT.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 22h29   #3
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut Calcul date

Merci marot_r,

La requête donne un nombre total.

pour la table "date_T_PT"

date Statut
02/01/2010 PT
03/01/2010 T
04/01/2010 T
05/01/2010 PT
06/01/2010 T
07/01/2010 PT

Ce que je voudrais obtenir c'est un truc dans ce genre là...

Date début date fin Ecart Nombre de jour PT
01/01/2010 05/01/2010 4 2
01/01/2010 07/01/2010 6 3

C'est faisable ?
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 22h35   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Tu pourrais simplement utiliser la fonction DCount(), l'équivalent de la requête Count que j'ai écrite. En donnant comme critère la date de début, de fin et le type PT, cela devrait faire l'affaire.

Regarde l'aide de DCount() en VBA pour la façon de l'utiliser.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 11h44   #5
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut "Compte" de date suivant critères

Merci marot_r,

J'ai trouvé un tutoriel de cafeine(http://cafeine.developpez.com/access...echerchemulti/)
Malheureusement mon niveau ne me permet pas de "répliquer" ce type de code.
Je produit des requetes uniquement en mode création et je ne sais pas comment, ni où, insérer ces codes ?
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 13h50   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Oui c'est bien mais un peu "Over Killing" pour ton problème.

Tu as juste à créer un champ calculé dans ta requête dont la valeur va être quelque chose comme :

Code :
DCount("Statut";"NomTaTable";[prmDateDebut] & "<=[DateStatut] and [DateStatut]<=" & [prmDateFin] & " and [Statut]=""PT"")
qui va compter le nombre de PT dans ta table qui sont compris entre la date de début et la date de fin.

En changeant PT par T tu peux, sur le même principe, compter le nombre de jours travaillés entre deux dates.

Note : Access va traduire Dcount() en français automatiquement.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 14h22   #7
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut compte date suivant critères

Merci marot_r,

Débutant je suis débutant je reste !!!
J'ai tapé la ligne de code suivante dans la requête dans le "Champ":
pour
T00_calendrier :table avec date calendrier et statut (Date et Travaillé_pas_travaillé)
T011_Cumul_lx03 :table avec l'ensemble des donnèes et les deux colonnes (Dern_entr et Date_extraction)

Code :
compte: DCount("T00_Calendrier";"T011_Cumul_lx03"; [T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] et [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " et  [T00_Calendrier]![Travaillé_pas_travaillé] =""PT"")
le code ne fmarche pas et "il disparait" (pas de message d'erreur).

Tu vois quelque chose qui cloche ?
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 14h43   #8
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut compte date suivant critères

PS :
J'ai un message d'erreur :
"Une chaîne de l'expression entrée n'est pas valide.
Une chaîne peut comporter jusqu'à 2048 caractères, y compris les guillemets initiaux et finaux."
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h46   #9
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Code :
compte: DCount("T00_Calendrier";"T011_Cumul_lx03"; [T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] et [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " et  [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
Il manquait un " à la fin.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h57   #10
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut compte date suivant critères

Aïe aïe aïe !!!

Il me met "#Erreur"
Et quand je clique sur la case erreur :
Erreur de synthaxe (opérateur absent) dans l'expression
<<
Code :
22/07/2011 <=[T00_Calendrier]![Date] et [T00_Calendrier]![Date]<=26/01/2012 et [T00_Calendrier]![Travaillé_pas_travaillé]="PT"
>>.
C'est quoi le problème ? Le format date ?
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 19h13   #11
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Essaye

Code :
compte: DCount("T00_Calendrier";"T011_Cumul_lx03"; [T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] and [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " and  [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
Aussi, pour éviter les ennuis renomme ton champ [date] en [dateCalendrier] ou quelque chose de ce genre. Date est un mot réservé de Access (la fonction uqi donne la date et l'utiliser autrement est source de problème vicieux.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 19h26   #12
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut compte date par rpport a critère

Je viens d'essayer le code
Code :
1
2
 
compte: CpteDom("T00_Calendrier";"T011_Cumul_lx03";[T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] and [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " and  [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
me donne erreur sur toutes les lignes de nouveau mais quand je clic sur une des lignes le message d'erreur à changé :
"l'expression entrée comme paramètre de requête est à l'origine de l'erreur suivante: "L'objet ne contient pas d'objet Automation "T00_Calendrier""
Qu'est ce que cela veut dire ?
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 22h31   #13
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Peux-tu poster les noms et la structure des tables impliquées ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 09h55   #14
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut compte date suivant critères

Désolé mais je n'arrive pas à poster mes tables. J'ai éssayé d'envoyer mon projet mdb mais il me "jète" malgrè une grosse cure d'amégrissement.

Comment fait-on ?
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h18   #15
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut compte date suivant critères

J'éssaie avec du pdf...Présentation_pour_marot_r.pdf
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 13h52   #16
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Code :
compte: CpteDom("Travaillé_pas_travaillé";"T00_Calendrier";[T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] and [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " and  [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 14h09   #17
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Au fait tu peux calculer avec une requête les valeurs de Jour, Semaine, mois et année à partir de Date

en utilisant :

Jour : Format([date];"jjj")
Semaine : Format([date];"aaaa\-ww";2;1)
Mois : Format([date];"aaaa\-mm")
Annee : Year([date])

Tu n'es donc pas obligé d'avoir des champs dans ta table pour cela.

Il est recommandé de ne pas stocker le résultat de calcul dans une table SAUF si tu as des problème de performance. Les calculs devraient toujours, dans la mesure du possible, être fait dans des requêtes.

Ta structure de table pourait être :

T00_Caldendrier :
[DateCalendrier], type DateHeure, clef primaire
[EstTravaille], Type booléen (champ pouvant prendre seulement 2 valeurs : vrai ou faux).

Note que le booléen te limite à deux choix et que ta solution est très bonne si tu peux avoir plus de deux choix comme par exemple (Travaillé, Férié, Pas travaillé).

Autre remarque, il semblerai que tu n'ai pas défini de clef primaire sur ta table T011_Cumul_lx03. C'est généralement recommandé d'avoir une clef primaire sur une table car cela permet des jointures plus efficaces.

Je t'invite aussi à créer des relations entre tes tables au fur et à mesure de ton développement même si tu as très peu de tables, les ajouter à postériori peut s'avérer vraiment long et pénible.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 21h04   #18
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut compte date par rpport a critère

Un grand merci M.Marot.

En effet ma table date est un peu "lourde", je vais y remédier.
Pour la clé j'ai toujours été échaudé par les clés qui sont restrictives !! Je fais des ajouts via requête "sans correspondance" sachant que je n'ai pas d'info unique. En même temps je pourrais en créer une clé en concaténant la date du jour avec mon "concaténer" Actuel, mais je me demande si, quand je vais faire une requête ajout et que access va vérifier chaque ligne pour voir si il n'y a pas de doublon cela risque d'être un peu long (une semaine d'extraction c'est plus de 600.000 lignes !!)
A voir.

Concernant le code
Code :
compte: CpteDom("Travaillé_pas_travaillé";"T00_Calendrier";[T011_Cumul_lx03]![Dern_entr] & "<=[T00_Calendrier]![Date] and [T00_Calendrier]![Date]<=" & [T011_Cumul_lx03]![Date_extraction] & " and  [T00_Calendrier]![Travaillé_pas_travaillé] =""PT""")
Alors plus de méssage d'erreur, c'est déjà ça. Par contre le résultat sur chaque ligne c'est toujours zéro ??
No comprendo !!
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 18h32   #19
Candidat au titre de Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42

Informations forums :
Inscription : janvier 2010
Messages : 88
Points : 12
Points : 12
Par défaut Merci

Boujour Marot,

J'ai trouvé une solution sur le forum dans requêtes et SQL.
C'est nico84.
L'exemple que je lui avait donné était certainement plus clair
quoi qu'il en soit dans mon exemple il m'a donné cette ligne de code.
Code :
(select count(*) from T00_calendrier where Travaillé_pas_travaillé='PT' and Date>=T011_Cumul_lx03.Dern_entr and Date<=T011_Cumul_lx03.Date_extraction)
Un grand merci à vous deux et encore merci pour ce forum.
totor92290 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 17h49   #20
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Citation:
600.000 lignes
Hum attention Access ne gére pas les BD de plus de 2 Go.

Tu vas peut-être avoir des problèmes de place et il serait raisonnable de regarder du côté d'une GROSSE BD comme Oracle, MS-SQL Server ou DB2.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h39.


 
 
 
 
Partenaires

Hébergement Web