Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
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 02/10/2007, 14h12   #1
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Par défaut Comparaison de date entre formulaire et table indemandent



Voila j'ai une table "Tbl_Contrat" qui contien des réf de contrat (n°contrat, client, date début de contrat, date fin de contrat,...)

Dans un formulaire "Frm_Saisi" de saisi (donc viérge) indépendent, je saisi des information sur des contrats mais sans les enregistré sur la table de contrat "Tbl_Contrat".
Dans ce formulaire "Frm_Saisi", je saisi le n° du contrat et des conpléments et notamant des dates.
Je voudrais savoir si il est possible que lorsque je saisi une date, il puisse y avoir une comparaison de faite avec les date de debut et de fin de contrat de la table "Tbl_Contrat" qui contien les renseignement des contrats en fonction du n° de contrat taper dans le formulaire "Frm_Saisi".

En fait dans le formulaire "Frm_Saisi" de saisi je tape par exemple (contrat n°1234 et la date 02/10/2007) et un message d'erreur s'affiche si la date n'est pas comprise entre la date de debut du contrat et le date de fin de contrat dans la table "Tbl_Contrat" [ex : "Contrat pas commencer" ou "Contrat terminé"]

Je sais pas je me suis bien exprimé mais si quelqu'un a compris et peu m'aider ce serai cool

Merci
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 14h34   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 098
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 098
Points : 11 624
Points : 11 624
Bonjour,

tu peux utiliser Dlookup() pour récupérer chaque date.
sinon un recordset DAO (plus complexe à mettre en oeuvre mais plus rapide sur les grosses tables.)

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 14h46   #3
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Merci

Mais moi et les codes c'est pas trop sa alors si tu peu étre un peu plus explisite STP
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 16h44   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 098
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 098
Points : 11 624
Points : 11 624
Regarde la fonction dlookup.

la comparaison est simple :

Code :
if me.date1 <= dlookup(..) and me.date1>=dlookup() then
Cela fait 2 dlookup, sur une grosse table ça peut être lent.

Sinon un recordset est pas mal puisqu'il n'y a qu'une recherche.

Code :
1
2
3
4
5
dim rst as DAO.recordset
set rst = currentdb.openrecordset("contrat")
rst.findfirst "contrat=" & me.contrat
if not rst.nomatch then
   if me.date1 <= rst.fields("dateContrat") and me.date1 >= rst.fields("dateContrat") then
Regarde l'excellent tuto sur DAO.

PS : Il y a des choses qui rendent obligatoire l'utilisation du code VBA... il va falloir que tu t'y mette
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2007, 11h23   #5
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
tu peux aussi faire une zone de texte indépendante avec dans la propriété "Source Contrôle" la formule :
Code :
1
2
 
=iif(dlookup("[Date début contrat]","Tbl_Contrat","[N° Contrat]=" & [ChampContratDuFormulaire]) >[ChampDateDuFormulaire];"Pas Commencé";iif(dlookup("[Date fincontrat]","Tbl_Contrat","[N° Contrat]=" & [ChampContratDuFormulaire]) <[ChampDateDuFormulaire];"Terminé";"En Cours"))
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 18h46   #6
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Merci a vous

j'ai testé le code suivant:

Code :
1
2
3
4
5
6
7
8
9
10
Private Sub Date_de_declaration_AfterUpdate()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("contrat")
rst.FindFirst "Contrat=" & Me.n°contrat
If Not rst.NoMatch Then
If Me.Date_de_declaration <= rst.Fields("Date_début_contrat") And Me.Date_de_declaration >= rst.Fields("Date_fin_contrat") Then
MsgBox "Erreur sur date d'effet du contrat"
End If
End If
End Sub
Malheureusement sa ne marche pas : il y aurai une erreur sur la ligne en gras
J'ai mis en rouge le nom de la table ou sont enregistrés les contrat et en bleu les champs de cette table
et en vert les champs du formulaire

Merci de m'aider
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2007, 14h46   #7
Membre chevronné
 
Avatar de alassanediakite
 
Homme Alassane Diakité
Conseil - Consultant en systèmes d'information
Inscription : août 2006
Messages : 539
Détails du profil
Informations personnelles :
Nom : Homme Alassane Diakité
Âge : 34
Localisation : Mali

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information

Informations forums :
Inscription : août 2006
Messages : 539
Points : 604
Points : 604
Envoyer un message via Yahoo à alassanediakite
Salut
la ligne
Code :
rst.FindFirst "Contrat=" & Me.n°contrat
doit être corrigé en
Code :
rst.FindFirst "n°contrat=" & Me.n°contrat
__________________
Le monde est trop bien programmé pour être l’œuvre du hasard…
alassanediakite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 00h03   #8
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Hello !

Ta table s'appelle "Tbl_Contrat" (comme stipulé dans ton premier post) ou "Contrat" ? Je ne saisis pas très bien...
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 10h15   #9
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Tu as raison je vais remettre tout à plat :
Table des contrats : « Tbl_Contrat »
Champs dans la table : « Date_debut » et « Date_fin »
Formulaire de Saisi : « Frm_saisi »
Table liée au formulaire « Frm_saisi » : « Tbl_saisi »
Champs du formulaire : « Date_declaration »

Dans « Frm_saisi » je saisi le n° du contrat et j’y rentre la date de déclaration.

Le but est :
Si « Date_declaration » (du formulaire « Frm_saisi ») > à « Date_fin » (de la table « Tbl_Contrat ») alors message « Contrat terminé »
Si « Date_declaration » (du formulaire « Frm_saisi ») < à « Date_debut » (de la table « Tbl_Contrat ») alors message « Contrat pas commencé »
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 10h43   #10
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Citation:
Envoyé par FCL31 Voir le message
Tu as raison je vais remettre tout à plat :
Table des contrats : « Tbl_Contrat »
Champs dans la table : « Date_debut » et « Date_fin »
Formulaire de Saisi : « Frm_saisi »
Table liée au formulaire « Frm_saisi » : « Tbl_saisi »
Champs du formulaire : « Date_declaration »

Dans « Frm_saisi » je saisi le n° du contrat et j’y rentre la date de déclaration.

Le but est :
Si « Date_declaration » (du formulaire « Frm_saisi ») > à « Date_fin » (de la table « Tbl_Contrat ») alors message « Contrat terminé »
Si « Date_declaration » (du formulaire « Frm_saisi ») < à « Date_debut » (de la table « Tbl_Contrat ») alors message « Contrat pas commencé »
Il manque encore dans ton descriptif de tes tables les références aux N° de contrats. J'ai remédié à cela dans mon exemple en inventant :
  • Dans la table TBL_Contrat un : "IdContrat"
  • Dans la table TBL_Saisi un : "NumContrat"
Je n'ai bien évidemment pas essayé le code suivant mais, à priori, il ne devrait pas poser trop de problème...
Code :
1
2
3
4
5
6
7
8
Dim DateStart       As Date
Dim DateEnd         As Date
 
DateStart = DLookup("Date_debut", "TBL_Contrat", "IdContrat = " & Me!NumContrat)
DateEnd = DLookup("Date_fin", "TBL_Contrat", "IdContrat = " & Me!NumContrat)
 
If DateStart < Me!Date_declaration Then MsgBox "Contrat pas commencé"
If DateEnd > Me!Date_declaration Then MsgBox "Contrat terminé"
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 13h30   #11
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Merci

mais malheureusement je ne m'en sort pas alors j'ai fait une petite base reprend le principe voulu
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 15h06   #12
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Alors voilà... avec 1 ou 2 retouches d'ajustement
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 15h29   #13
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Je te remerci bernardmichel mais le probléme c'est qu'au lieu d'une liste déroulent je voudrais simplement une zone de texte car il y a environ 3000 contrat et avec une liste déroulante, c'est impossible si tu a une autre solus ce seai cool
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 16h11   #14
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Alors, tu ouvres ton form en "Création", tu sélectionnes la liste déroulante (1 seul clic), tu déroules le menu "Format", tu sélectionnes "Remplacer par..." et tu choisis "Zone de texte"... et le tour est joué, tu peux saisir ce que tu veux !
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 17h13   #15
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
deja fait mais sa marche pas
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 21h03   #16
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Ah ???

Alors chez-moi ça marche ... !
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 20h44   #17
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
Comme je n'y arrive pas, je préfaire fournir ma base avec le code que j'ai mis. A savoir que l'idée du bouton est bien mais je préfairerai que les message s'affiche quand j'appi sur "entrée" aprés avoir renté la date.
Sur les message précédents, je n'avit pas mis les vrai nom des tables des formulairs,etc,... tous simplement parceque les données fournies sont confidentielle mais la je galaire donc je préfaire faire paser la base avec les noms "originaux". Bien sur la base est simplifé mais pour ce que je veu l'essentiel est là.

En content sur une bonne ame Merci
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 23h39   #18
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Finalement, je crois que compter sur une bonne âme était le bon plan...Pièce jointe 20273

Allez, à bientôt et portes-toi bien
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 14h09   #19
Débutant
 
Avatar de FCL31
 
Inscription : août 2007
Messages : 672
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : août 2007
Messages : 672
Points : 184
Points : 184
Envoyer un message via MSN à FCL31
En se moment malheureusement j'ai beauxoup de chose qui déconne

Je galaire.

J'avai changer les noms de données car confidentiel mais je pense qu'ils vous sera plus facile de peut étre trouver une solution a mon probléme avec les bons noms même ci sela est toujour confidentiel (aprés tout je ne fourni pas les données)

J'ai les contrat dans une table : "Presses" avec "Date_debut_d'effet" , "Date_fin_de_garantie" , "N°Contrat".
Et sur un formulaire "Sinistre" : une zone de texte : "Date_de_la_panne" , une autre zone de texte où je saisi le n° du contrat "n°Police".

Donc le but et de comparer "Date_de_la_panne" du formulaire "Sinistre" avec "Date_debut_d'effet" et "Date_fin_de_garantie" de la table "Presses" en fonction de "n°Police" du formulaire qui correspond à "N°Contrat" de la table.

Je sais si tout le monde à bien compris mais voici le code que j'ai fait :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Date_de_la_panne_AfterUpdate()
Dim DateStart       As Date
Dim DateEnd         As Date
 
DateStart = DLookup("Date_debut_d'effet", "Presses", "N°Contrat = " & Me!n°Police)
DateEnd = DLookup("Date_fin_de_garantie", "Presses", "N°Contrat = " & Me!n°Police)
 
    If Me!Date_de_la_panne < DateStart Then
        MsgBox "Contrat pas commencé"
        Exit Sub
    ElseIf Me!Date_de_la_panne > DateEnd Then
        MsgBox "Contrat terminé"
        Exit Sub
    Else
        MsgBox "Contrat en cours"
    End If
 
End Sub
SVP
FCL31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2007, 14h35   #20
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Très cher...

As-tu lu le post que je t'ai envoyé juste avant ton dernier... Il y a un MDB où tout cela est déjà résolu depuis le 10....
bernardmichel 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 21h31.


 
 
 
 
Partenaires

Hébergement Web