Aide - Recherche - Membres - Calendrier
Version complète : alarme
Trucs et astuces Express > Discussions Informatique > Microsoft Office 2003 / 2007 > Access
Moi Mich
icon_fear.gif Bonjour besoin d'ide.
J'ai fait une base de données clients, avec plusieurs champs.
J'ai un champ nommé DDN date de naissance, je voudrais être
avisé 10 jours avant la date inscrite par une alarme, genre courrier
envoyé à mon adresse à moi. Bien attendu l'envoie devra aussi me donné le nom
de la personne à qui correspond la date.

ATTENTION, nouveau dans l'utilisation de Access, donc peu de connaissance.
Donc la patience vous es demandé dans votre aide.

Merci de votre aide si précieuse.

Mich icon_wink.gif
francishop
Bonjour,

CITATION(Moi Mich @ 30-07-2008 - 13:50) *
ATTENTION, nouveau dans l'utilisation de Access, donc peu de connaissance.
Donc la patience vous es demandé dans votre aide.
D'accord pour de l'aide.

CITATION(Moi Mich @ 30-07-2008 - 13:50) *
J'ai fait une base de données clients, avec plusieurs champs.

Trés bien. Quels sont ces champs?
L'idéal serait de faire voir une requête. A défaut les champs de table.

Cordialement.
Moi Mich
mai_applaudit.gif Merci de ton suivie, j'apprécie beaucoup.

Ma base de données clients a plusieurs champs (nom famille,prénom,date de naissance,adresse,ville,code postal, cellulaire,no de téléphone,fax,courrier@, prêteurs,terme,amortissement,assureur,renouvelleement,nom famille1,prénom1,cellulaire1,courrier@1)

sur le champ DDN , je voudrais avoir une alarme 10 jours avant la date inscrite.
alarme par courrier, le mien @ ou autre manière.

Merci de ton aide, tu sais je suis un peu perdu et en manque de connaissance.
Donc j'ai besoin d'exemple.

Michel ermm.gif
francishop
Bonsoir, (2 h 27 Paris)
CITATION(Moi Mich @ 05-08-2008 - 11:03) *
Merci de ton aide, tu sais je suis un peu perdu et en manque de connaissance.
Donc j'ai besoin d'exemple.

Exemple? Peut-être. Travailler? Certainement.

Remis dans une présentation <>"Acceptable" voici ton apport :
nom famille,
prénom,
date de naissance,
adresse,
ville,
code postal,
cellulaire,
no de téléphone,
fax,
courrier@,
prêteurs,
terme,
amortissement,
assureur,
renouvelleement,
nom famille1,
prénom1,
cellulaire1,
courrier@1

Ceci est un peu léger. Lorsqu'on propose d'aider, il faut que le bénéficiaire s'investisse.
En effet, notre aide ne consiste pas à faire le travail. Autant proposer des bases toutes faites.
Le sujet est d'aider chacun à progresser. Il aurait été souhaitable que tu indiques le type et longueur des champs.

Pour revenir au sujet.
Il est préférable de ne pas laisser d'espace dans les noms de champs en employant des tirets(Pas trait d'union) Utiliser des noms courts, suffisament explicites. Ne pas utiliser de mots réservés, exemple Date. On écrira pour un champ-->Dte et lors de besoin on employera-->Date ce qui équivaut à Date du jour.

En premier épisode on va aller jusqu'au calcul d'age.

La table : tblMich
....Nom.................Type
N°.......................Compteur
Civilité.................Texte.....(50)
Nom....................Texte.....(50)
Prénom................Texte.....(50)
Dte_Naissance......Date.....[Short Date]
Adresse...............Texte.....(50)
Ville.....................Texte.....(50)
CP........................Texte......(7)
Cellulaire..............Texte.....(15)
Telephon...............Texte.....(15)
fax........................Texte.....(15)
Courrier@..............Texte.....(50)
Prêteurs................Texte.....(50)
Terme...................Texte.....(50)
Amortissement.......Texte.....(50)
Assureur................Texte.....(50)
Renouvelleement....Texte.....(50) (Avec 2 ee?)
Civilité1..................Texte.....(50)
Nom1......................Texte.....(50)
Prénom1.................Texte.....(50)
Cellulaire1...............Texte.....(15)
Courrier@1..............Texte.....(15)

Pour Civilité et Civilité1
Zone de liste déroulante
Liste valeurs
Contenu :"Mr";"Monsieur";"Mme";"Madame";"Mlle";"Mademoiselle";"Mme et Mr";"Madame et Monsieur";"Mrs";"Messieurs"
Largeur colonnes : 1,9cm;3,403cm

Dans un module tout neuf on colle :

CODE
Function CalculAge(dateNaissance As Date, Optional dateReference As Date)
If dateReference = 0 Then dateReference = Date
CalculAge = Year(dateReference) - Year(dateNaissance) + _
(Format(dateNaissance, "mmdd") > Format(dateReference, "mmdd"))
If CalculAge > 1 Then
CalculAge = CalculAge & " ans"
Else
CalculAge = CalculAge & " an"
End If

End Function

'***************************************************************
Function CalculAge1(dateNaissance As Date, Optional dateReference As Date)
If dateReference = 0 Then dateReference = Date
CalculAge1 = Year(dateReference) - Year(dateNaissance) + _
(Format(dateNaissance, "mmdd") > Format(dateReference, "mmdd"))
End Function

'***************************************************************
Function DernierJourDuMois(Optional dteDate As Date) As Date
' Cette fonction calcule le dernier jour du mois d'après une date donnée.
' Si aucune date n'est transmise, elle utilise la date du jour.
    If CLng(dteDate) = 0 Then
        dteDate = Date
    End If
    ' Recherche le premier jour du mois suivant, puis soustrait un jour.
    DernierJourDuMois = DateSerial(Year(dteDate), Month(dteDate) + 1, 1) - 1
End Function
'****************************************************************
'De notre ami PHILBEN
'****************************************************************
Public Function RoundUp(vValeur As Variant, Optional byNbDec As Byte) As Variant
   RoundUp = -Int(-vValeur * 10 ^ byNbDec) / 10 ^ byNbDec
End Function
'***************************************************************
'Toujours de notre ami PHILBEN
'****************************************************************
Public Function RoundDown(vValeur As Variant, Optional byNbDec As Byte) As Variant
   RoundDown = Int(vValeur * 10 ^ byNbDec) / 10 ^ byNbDec
End Function

Une requête :
CODE
SELECT N°, Civilité, Nom, Prénom,
[Civilité] & " " & [Nom] & " " & [Prénom] AS NP,
Dte_Naissance, CalculAge([Dte_Naissance]) AS Age,
CalculAge1([Dte_Naissance]) AS Compteur,
IIf(Day(DernierJourDuMois([Dte_Naissance]))=29,
RoundDown([Compteur]/4),[Compteur]) AS Anniversaires,
Adresse,Ville, CP, Cellulaire, Telephon, fax,[Courrier@],
Prêteurs,Terme,Amortissement,Assureur,Renouvelleement,
Nom1, Prénom1,Cellulaire1,[Courrier@1], Civilité1
FROM tblMich;


On doit obtenir quelque chose dans le genre :

..........NP.....................Age............Compteur....Anniversaires....
Mr Lamy Claude.........49 ans...............49.................49................21/12/1958
Mr Francis Hop...........60 ans...............60.................15................29/02/1948
Mme Romanof Anne...43 ans...............43.................43.................20/06/1965
Mlle Tradition Noémie.37 ans...............37.................37.................08/08/1970

Bonsoir. Je vais me coucher.

Cordialement
Moi Mich
CITATION(francishop @ 05-08-2008 - 20:27) *
Bonsoir, (2 h 27 Paris)

Exemple? Peut-être. Travailler? Certainement.

Remis dans une présentation <>"Acceptable" voici ton apport :
nom famille,
prénom,
date de naissance,
adresse,
ville,
code postal,
cellulaire,
no de téléphone,
fax,
courrier@,
prêteurs,
terme,
amortissement,
assureur,
renouvelleement,
nom famille1,
prénom1,
cellulaire1,
courrier@1

Ceci est un peu léger. Lorsqu'on propose d'aider, il faut que le bénéficiaire s'investisse.
En effet, notre aide ne consiste pas à faire le travail. Autant proposer des bases toutes faites.
Le sujet est d'aider chacun à progresser. Il aurait été souhaitable que tu indiques le type et longueur des champs.

Pour revenir au sujet.
Il est préférable de ne pas laisser d'espace dans les noms de champs en employant des tirets(Pas trait d'union) Utiliser des noms courts, suffisament explicites. Ne pas utiliser de mots réservés, exemple Date. On écrira pour un champ-->Dte et lors de besoin on employera-->Date ce qui équivaut à Date du jour.

En premier épisode on va aller jusqu'au calcul d'age.

La table : tblMich
....Nom.................Type
N°.......................Compteur
Civilité.................Texte.....(50)
Nom....................Texte.....(50)
Prénom................Texte.....(50)
Dte_Naissance......Date.....[Short Date]
Adresse...............Texte.....(50)
Ville.....................Texte.....(50)
CP........................Texte......(7)
Cellulaire..............Texte.....(15)
Telephon...............Texte.....(15)
fax........................Texte.....(15)
Courrier@..............Texte.....(50)
Prêteurs................Texte.....(50)
Terme...................Texte.....(50)
Amortissement.......Texte.....(50)
Assureur................Texte.....(50)
Renouvelleement....Texte.....(50) (Avec 2 ee?)
Civilité1..................Texte.....(50)
Nom1......................Texte.....(50)
Prénom1.................Texte.....(50)
Cellulaire1...............Texte.....(15)
Courrier@1..............Texte.....(15)

Pour Civilité et Civilité1
Zone de liste déroulante
Liste valeurs
Contenu :"Mr";"Monsieur";"Mme";"Madame";"Mlle";"Mademoiselle";"Mme et Mr";"Madame et Monsieur";"Mrs";"Messieurs"
Largeur colonnes : 1,9cm;3,403cm

Dans un module tout neuf on colle :

CODE
Function CalculAge(dateNaissance As Date, Optional dateReference As Date)
If dateReference = 0 Then dateReference = Date
CalculAge = Year(dateReference) - Year(dateNaissance) + _
(Format(dateNaissance, "mmdd") > Format(dateReference, "mmdd"))
If CalculAge > 1 Then
CalculAge = CalculAge & " ans"
Else
CalculAge = CalculAge & " an"
End If

End Function

'***************************************************************
Function CalculAge1(dateNaissance As Date, Optional dateReference As Date)
If dateReference = 0 Then dateReference = Date
CalculAge1 = Year(dateReference) - Year(dateNaissance) + _
(Format(dateNaissance, "mmdd") > Format(dateReference, "mmdd"))
End Function

'***************************************************************
Function DernierJourDuMois(Optional dteDate As Date) As Date
' Cette fonction calcule le dernier jour du mois d'après une date donnée.
' Si aucune date n'est transmise, elle utilise la date du jour.
    If CLng(dteDate) = 0 Then
        dteDate = Date
    End If
    ' Recherche le premier jour du mois suivant, puis soustrait un jour.
    DernierJourDuMois = DateSerial(Year(dteDate), Month(dteDate) + 1, 1) - 1
End Function
'****************************************************************
'De notre ami PHILBEN
'****************************************************************
Public Function RoundUp(vValeur As Variant, Optional byNbDec As Byte) As Variant
   RoundUp = -Int(-vValeur * 10 ^ byNbDec) / 10 ^ byNbDec
End Function
'***************************************************************
'Toujours de notre ami PHILBEN
'****************************************************************
Public Function RoundDown(vValeur As Variant, Optional byNbDec As Byte) As Variant
   RoundDown = Int(vValeur * 10 ^ byNbDec) / 10 ^ byNbDec
End Function

Une requête :
CODE
SELECT N°, Civilité, Nom, Prénom,
[Civilité] & " " & [Nom] & " " & [Prénom] AS NP,
Dte_Naissance, CalculAge([Dte_Naissance]) AS Age,
CalculAge1([Dte_Naissance]) AS Compteur,
IIf(Day(DernierJourDuMois([Dte_Naissance]))=29,
RoundDown([Compteur]/4),[Compteur]) AS Anniversaires,
Adresse,Ville, CP, Cellulaire, Telephon, fax,[Courrier@],
Prêteurs,Terme,Amortissement,Assureur,Renouvelleement,
Nom1, Prénom1,Cellulaire1,[Courrier@1], Civilité1
FROM tblMich;


On doit obtenir quelque chose dans le genre :

..........NP.....................Age............Compteur....Anniversaires....
Mr Lamy Claude.........49 ans...............49.................49................21/12/1958
Mr Francis Hop...........60 ans...............60.................15................29/02/1948
Mme Romanof Anne...43 ans...............43.................43.................20/06/1965
Mlle Tradition Noémie.37 ans...............37.................37.................08/08/1970

Bonsoir. Je vais me coucher.

Cordialement
Moi Mich
wink.gif Merci àtoi mon ami de si loin.

Regarde ma base de données est faite avec tous les champs. Ce que je demandais ces de l'aide pour avoir une alarme sur le champ date de daissance, être avisé 10 jours avant la date inscrite, alrme par courrier ou autre moyen.

Je vais essauer ce que tu ma laissé comme code, je te redonne un suivie.

Merci
Michel closedeyes.gif
Moi Mich
CITATION(Moi Mich @ 05-08-2008 - 23:04) *
wink.gif Merci àtoi mon ami de si loin.

Regarde ma base de données est faite avec tous les champs. Ce que je demandais ces de l'aide pour avoir une alarme sur le champ date de daissance, être avisé 10 jours avant la date inscrite, alrme par courrier ou autre moyen.

Je vais essauer ce que tu ma laissé comme code, je te redonne un suivie.

Merci
Michel closedeyes.gif
Moi Mich
Bonsoir à toi

Encore une fois merci pour ton aide.
comme je te disais ma base de données est faite.
Dans ton suivie, tu me dis:
Dans le module tout neuf on colle:
Module veut dire quoi.........................
(j'ai pas besoin du champ civilité)

Le requête, je la fait en mode construction. Besoin plus d'explication.Voir avec exemple.

Merci de ta patience et de ton aide.

Michel
francishop
Bonjour, (Paris 9 h)

Il est inutile de reprendre l'intégralité du post de chacun si ce n'est pour en extraire ce qu'on veut commenter. Exemple :
CITATION
Regarde ma base de données est faite avec tous les champs.

Une "méchante" table et la base est faite?

CITATION
Ce que je demandais ces de l'aide pour avoir une alarme sur le champ date de daissance, être avisé 10 jours avant la date inscrite, alrme par courrier ou autre moyen.


Ho Ho! Ceci ressemble fort à une demande d'utilisateur.
_ " Je veux être avisé 10 jours chaque anniversaire"

L'utilisateur se moque royalement du comment et pourquoi ça fonctionne. Seul le résultat compte.
Si c'est le cas, je t'invite à faire une demande de devis. Il y a l'embarras du choix pour trouver un prestataire.

Par contre une demande concepteur est : " Comment peut-on faire pour avoir une alarme , être avisé 10 jours avant la date inscrite, alarme par courrier ou autre moyen."

Là je veux bien intervenir. Le sens même de ce Forum.

CITATION( @ 06-08-2008 - 15:43) *
Dans ton suivie, tu me dis:
Dans le module tout neuf on colle:
Module veut dire quoi.........................
(j'ai pas besoin du champ civilité)

Le requête, je la fait en mode construction. Besoin plus d'explication.Voir avec exemple.

Exactement ce que je soupçonnais.... Il faut faire du ba-->BA

Si j'ai ajouté le champ civilité, ce n'est pas innocent.
D'une part, on est en programmation. Tout ce qui a un caractère répétitif, on a le devoir de le faciliter.(Plus tard on est appellé à voir ceci pour CP<-->Ville : On rentre l'un, l'autre s'affiche automatiquement. Et vice versa.)
Je veux te faire voir comment inclure une liste déroulante autrement qu'en allant chercher les données dans une table.
Tu vas inclure ce champ civilité. Je "travaille" pour essayer de te guider. Ce n'est pas que "marrant" d'imaginer comment le faire afin que ceci te soit accessible. J'irai plus vite en faisant directement une petite base.
Mais il faut que je fasse de mon côté exactement ce que je vais te proposer.

Bon, je n'ai pas tellement le temps ce matin, on verra pour les requêtes ce soir.

Pour les modules : Objets-->Modules-->Nouveau et on colle mon envoi juste en dessous de :
CODE
Option Compare Database


Courage!

Cordialement.
Moi Mich
CITATION(francishop @ 07-08-2008 - 3:32) *
Bonjour, (Paris 9 h)

Il est inutile de reprendre l'intégralité du post de chacun si ce n'est pour en extraire ce qu'on veut commenter. Exemple :

Une "méchante" table et la base est faite?



Ho Ho! Ceci ressemble fort à une demande d'utilisateur.
_ " Je veux être avisé 10 jours chaque anniversaire"

L'utilisateur se moque royalement du comment et pourquoi ça fonctionne. Seul le résultat compte.
Si c'est le cas, je t'invite à faire une demande de devis. Il y a l'embarras du choix pour trouver un prestataire.

Par contre une demande concepteur est : " Comment peut-on faire pour avoir une alarme , être avisé 10 jours avant la date inscrite, alarme par courrier ou autre moyen."

Là je veux bien intervenir. Le sens même de ce Forum.


Exactement ce que je soupçonnais.... Il faut faire du ba-->BA

Si j'ai ajouté le champ civilité, ce n'est pas innocent.
D'une part, on est en programmation. Tout ce qui a un caractère répétitif, on a le devoir de le faciliter.(Plus tard on est appellé à voir ceci pour CP<-->Ville : On rentre l'un, l'autre s'affiche automatiquement. Et vice versa.)
Je veux te faire voir comment inclure une liste déroulante autrement qu'en allant chercher les données dans une table.
Tu vas inclure ce champ civilité. Je "travaille" pour essayer de te guider. Ce n'est pas que "marrant" d'imaginer comment le faire afin que ceci te soit accessible. J'irai plus vite en faisant directement une petite base.
Mais il faut que je fasse de mon côté exactement ce que je vais te proposer.

Bon, je n'ai pas tellement le temps ce matin, on verra pour les requêtes ce soir.

Pour les modules : Objets-->Modules-->Nouveau et on colle mon envoi juste en dessous de :
CODE
Option Compare Database


Courage!

Cordialement.
Moi Mich
mai_chinese.gif Bon matin à toi, 5h.50 am ici Ville de Terrebonne

Regarde, je me suis surement mal exprimé dans ma demande. Tu sais je travaille fort dans cette réalisation, j'essaie, sans résultat positif.

Dis moi, voudrais-tu que je refasse une nouvelle base de données avec les champs
que tu ma envoyé dans un de tes messages (avec civilité).

Ca parait si simple pour toi, mais moi qui es débutant, alors la je me perds facilement.

Merci de ton aide que j'apprécie beaucoup.J'attend ton suivier ce soir comme tu la souligné. whistling.gif
Moi Mich
CITATION(Moi Mich @ 07-08-2008 - 5:54) *
mai_chinese.gif Bon matin à toi, 5h.50 am ici Ville de Terrebonne

Regarde, je me suis surement mal exprimé dans ma demande. Tu sais je travaille fort dans cette réalisation, j'essaie, sans résultat positif.

Dis moi, voudrais-tu que je refasse une nouvelle base de données avec les champs
que tu ma envoyé dans un de tes messages (avec civilité).

Ca parait si simple pour toi, mais moi qui es débutant, alors la je me perds facilement.

Merci de ton aide que j'apprécie beaucoup.J'attend ton suivie ce soir comme tu la souligné. whistling.gif


Je viens de faire ce que tu m'avais demandé :
Une nouvelle table enrg tblMich, j'ai copié le code dans le module sous module 1,
(note dans ma base j'ai modifié telephon en ajoutant un e, et la taille de certain champ, tu avais oublié un champ Dte_Naissance1)
J'ai copié le code requète dans une nouvelle requete, enrg :requeteMich
On me donne un message d'erreur :
Nom Ambigu dans l'expression 'calculAge([Dte_Naissance])'

Encore merci de ton aide.
francishop
Bonsoir, (20 h)

CITATION
j'ai copié le code dans le module sous module 1

Donne des noms explicites. Pour ce module par exemple-->mdl_Temps
Et dedans il faudra entreposer toutes les fonctions concenant les dates, heures, soit d'une façon générale ce qui a rapport au temps.
Ensuite viendra un module pour les calculs, un pour les conversions, etc..

CITATION( @ 07-08-2008 - 6:32) *
tu avais oublié un champ Dte_Naissance1
J'ai copié le code requète dans une nouvelle requete, enrg :requeteMich

A ce sujet : Ta table concerne une personne-->OK
Une deuxième personne sur le même enregistrement-->Quelle est cette personne?
Le "max" accolé à la personne principale ne peut jamais être supérieur à 1?
Pas d'enfants?

Ce point est à voir de suite. Si plusieurs personnes peuvent être accolées au principal, autant faire de suite une table "enfants". Et si c'est le cas nous ferons une troisième table-->Dte_Naissance
Idem pour le téléphone. Pourquoi en limiter le nombre. Il serait normal de créer une table à cette fin.
Tout ceci serait nettement plus "sain" au point de vue conception. Ta table actuelle semble nous promettre quelque difficultés futur.


CITATION
Nom Ambigu dans l'expression 'calculAge([Dte_Naissance])'

Le code a été enregistré deux fois. Il faut en effacer un.

CITATION( @ 07-08-2008 - 6:32) *
Une nouvelle table enrg tblMich, enrg :requeteMich

Non non. Enregistre avec des noms explicites.(tblMich était un exemple.) Je copierais tes noms d'objets. Mais en contrepartie préfixe les objets. Exemple :
tbl_Client
qry_Client
frm_Client
fsub_Client
rpt_Client
rsub_Client

Et pour les modules la norme est-->bas_Client
Je me permets quelque extravagance par -->mdl_Client

Cordialement.
Moi Mich
CITATION(francishop @ 07-08-2008 - 14:26) *
Bonsoir, (20 h)


Donne des noms explicites. Pour ce module par exemple-->mdl_Temps
Et dedans il faudra entreposer toutes les fonctions concenant les dates, heures, soit d'une façon générale ce qui a rapport au temps.
Ensuite viendra un module pour les calculs, un pour les conversions, etc..


A ce sujet : Ta table concerne une personne-->OK
Une deuxième personne sur le même enregistrement-->Quelle est cette personne?
Le "max" accolé à la personne principale ne peut jamais être supérieur à 1?
Pas d'enfants?

Ce point est à voir de suite. Si plusieurs personnes peuvent être accolées au principal, autant faire de suite une table "enfants". Et si c'est le cas nous ferons une troisième table-->Dte_Naissance
Idem pour le téléphone. Pourquoi en limiter le nombre. Il serait normal de créer une table à cette fin.
Tout ceci serait nettement plus "sain" au point de vue conception. Ta table actuelle semble nous promettre quelque difficultés futur.



Le code a été enregistré deux fois. Il faut en effacer un.


Non non. Enregistre avec des noms explicites.(tblMich était un exemple.) Je copierais tes noms d'objets. Mais en contrepartie préfixe les objets. Exemple :
tbl_Client
qry_Client
frm_Client
fsub_Client
rpt_Client
rsub_Client

Et pour les modules la norme est-->bas_Client
Je me permets quelque extravagance par -->mdl_Client

Cordialement.
Moi Mich
icon_rolleyes.gif Bonjour à toi l'ami de si loin.
Merci de ta patience.

Comme je te disais, je cherche et je travaille pour trouver.

Requète avec message d'erreur : Non la table na pas été enrg. 2 fois.

J'ai enrg. ma table de donnés, tblMich à ce nom car dans l'instruction ou code que
tu mas envoyé et bien ça finissait par ce nom.Mon formulaire est enrg. formulaire complet (car pour moi il contient tous les champs que je veux, donc complet)

Requète, pour moi elle dépend de ma table et du formulaire.
dans mon cas j'ai plusieurs clients, chacun a sa date de naissance .

Je vais refaire une nouvelle table avec les champs que tu me suggère.Je vais faire un nouveau module et la requète en collant les codes que tu ma envoyés et je vais voir.

INFO : Comment je fais pour supprimer un message ici.....dommage que nous soyons si éloigné, car tu pourrais voir ou j'en suis rendu de façon plus précise.

Bonne soirée, encore une fois merci. innocent.gif

francishop
Bonjour,
CITATION(Moi Mich)
icon_rolleyes.gif Bonjour à toi l'ami de si loin.
Nenni. Je suis ici. C'est toi qui es loin. Il m'a fallu l'aide de Goole Map afin de situer ta localité. Chapeau. Tu parles très bien le Français. Et sans accent! icon_mrgreen.gif

CITATION(Moi Mich)
Requète avec message d'erreur : Non la table na pas été enrg. 2 fois.
Dans le Module, pas la table. Pour le vérifier on ferme et ouvrons la base. On regarde si on a pas 2 modules. Si non, on vérifie dans le module.

CITATION(Moi Mich)
dans mon cas j'ai plusieurs clients, chacun a sa date de naissance .
Félicitations. Avoir plusieurs clients c'est bien et généralement il faut mieux.
Ma question concernait le xxxxxxx1 Quel est son rôle. Idem pour Prêteurs. Ce dernier est immuable?

Cordialement.
Moi Mich
biggrin.gif Bonjour à toi

Tu es de quelle région.................

Module ,je l'ai enlevé pour l'instant. J'ai une table avec mes champs et un formulaires qui se rapporte avec ma table et ses champs..

Les champs avec les ...1, regarde quand un client fait un emprunt, je l'enregistre sous les champs sans le 1 afin de le connaitre, si le client achète avec une autre personne je remplie les champs avec les 1..........

Date de naissance avec ou sans ...1 . Je veux être avisé 10 jours avant la date inscrite
pour un moyen ..X.. afin de pouvoir lui envoyer une carte de fête, ce qui me permet de garder ccontact et ces flateurs pour le client.

Champ renouvellement, la aussi je veux être avisé 45 jours avant la date inscrite afin
de lui envoyer une lettre ou un courrier que son renouvellement arrive à terme.

Champs prêteurs, il me dit avec quelle prêteurs il a fait affaire. Ce qui me permet de vérifier si ce prêteur aura le meilleur taux pour mon clients au renouvellement ou si je dois voir ailleurs (autres prêteurs).

Question plus facile pour toi je suis certain. Plus facile pour moi qui va le faire après tes explications, je l'avoue ces pas facile, mais je vais réussir avec ton aide , je voudrais faire un bouton de recherche dans mon formulaire,Genre de bouton comme sur le net (RECHERCHE) qui me permet en tappant le nom de famille, va me donner toutes ses informations se rapportant è lui dans mon formulaire. Le bouton je veux le placer dans mon formulaire.

A bientôt l'ami. Bonne fin de semaine. smile.gif



Moi Mich
mai_applaudit.gif Bonjour à toi

J'ai fait un bouton de recherche dans mon formulaire. Quand je clique dessus.
Un tableau s'ouvre, ou je peux inscrire un nom de famille, en cliquant dessus,
j'arrive aux info. concernant ce client dans mon formulaire. Ces ok.

Pourrais-tu me dire comment faire, pour avoir à coté de mon bouton recherche,
un rectangle blanc comme dans un champ, pour taper le nom que je recherche et en cliquant sur mon bouton recherche arriver aux info. de mon client dans mon formulaire.

J'ai laissé de coté pour l'instant le sujet Alarme. Je voulais faire autre chose de moins compliqué. Cependant je veux continuer pour l'alarme, ces important.

Merci l'ami.

Michel ptdr.gif
francishop
Bonjour, (8 h Paris-->Ah!.. Ce décalage d'heures, il faudrait régler ta montre!)
CITATION(Moi Mich)
comment faire, pour avoir à coté de mon bouton recherche,
un rectangle blanc comme dans un champ, pour taper le nom que je recherche et en cliquant sur mon bouton recherche arriver aux info. de mon client dans mon formulaire.

Pour faire un trie trés simplement :

Un formulaire-->frm_Trie
Pour la source de ce formulaire on va lui mettre la requete qry_Client (ou autre)
Mais vu qu'on est en phase d'essais on va modifier la source de ce formulaire-->Propriétés--> Source-->Bouton à droite(3 petits points)
On arrive sur la requête en mode création. -->Affichage-->Mode Sql et on copie tout ce beau Laïus.
On retourne sur notre formulaire et collons ceci dans la source. On enregistre.
(Maintenant,si on fait une erreur-->Aucune conséquence sur notre requête)

On inscrit deux ou trois champs sur notre formulaire qui est en mode Formulaire unique.
Exemple : Nom, Prénom et N°
Affichage-->En-Tête/Pied de formulaire

Dans l'en-tête on inscrit un champ texte qu'on baptiste promptement :txt_Recherche. (On lui demande pas son avis..)
On retourne dans la source de notre formulaire et inscrivons comme critère sur le champ de trie(Le nom par exemple) :
CODE
Like "*" & [Formulaires]![frmTrie]![txt_Recherche] & "*"

Ou, selon les préférences :
CODE
Comme "*" & [Formulaires]![frmTrie]![txt_Recherche] & "*"

De retour sur notre formulaire, txt_Recherche-->Propriétés--Sur changement :

CODE
Private Sub txt_Recherche_Change()
    Me.Requery
End Sub


Autre possibilité :

Dans la barre d'outils, nous annulons les assistants de contrôles(Baguette magique)
Et oui, je vais te faire travailler. icon_mrgreen.gif

Dans l'En-Tête nous inscrivons une liste déroulante toute neuve et lui donnons le joli nom de : cbo_Recherche
Propriétés-->Onglet données-->Contenu-->Bouton de droite(3 petits points...Ceci pour ceux qui débutent)
Et on inscrit la table-->tbl_Mich

Ce qu'il faut retenir : Par défaut Access pour une liste se réfère à la colonne de gauche-->La première colonne(Qui sera-->Column(0) La deuxième colonne-->Column(1) etc.)

En première colonne nous mettons-->N° (Qui présente l'avantage d'être unique-->Pas de doublons)
Ce N° nous le rendrons, si besoin invisible à l'utilisateur.
Pour la partie visible de ce dernier, la deuxième colonne, nous allons faire une concaténation :
CODE
NP: [Civilité] & " " & [Nom] & " " & [Prénom]

Ce qui doit donner en mode Sql :
CODE
SELECT tblMich.N°,
[Civilité] & " " & [Nom] & " " & [Prénom] AS NP
FROM tblMich;


Nous fermons et revenons sur le formulaire (Access demande si on veut enregistrer? Allez, soyons sympa-->Oui!)

On revient sur-->cbo_Recherche. On laisse vide sa Source contrôle et colonne liée à 1.
Onglet format-->Nbre colonnes = 2
Largeur colonnes-->0cm;3cm
Largeur-->3cm

Un peu de vba :
Propriété-->Onglet évenements-->Après mise à jour :
CODE
Private Sub cbo_Recherche_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
  Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[N°] = " & Str(Nz(Me![cbo_Recherche], 0))
'Si [N°] était de type String-->Texte
  'rs.FindFirst "[N°] = '" & Me![cbo_Recherche] & "'"
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub


A part ça, je n'arrive toujours pas à situer exactement la destination de ta base.
Agence immobilière? Préts?
Le principal est un client-->Ok
Le secondaire?

La stucture de ta base me préoccupe. Sa conception est "empirique". Il serait trés simple et très rapide d'y remédier maintenant.
Pour celà il est indispensable de connaître le pourquoi du comment.

Bon, je me diriges vers "mes vacances" selon la conception de ma femme :
Installer le nouveau frigo-->Prise de terre-->Depuis piquet-->Donc en profiter pour mettre quelques prises au passage. Le frigo est trop grand? Tu coupes, modifie, déplace. Ah oui-->un peu de faïence
Et puis le papier-->Il faut le changer. Quand tu auras fini il faut une douche digne de ce nom, et patati. Et patata...

Ce que femme veut...J'y retournes.

Cordialement.
francishop
Bonsoir,( Paris 0h 15)

CITATION(Moi Mich)
J'ai laissé de coté pour l'instant le sujet Alarme. Je voulais faire autre chose de moins compliqué. Cependant je veux continuer pour l'alarme, ces important.

Evidemment qu'on continue. Ceci est l'objet de ce post.


Pour aller jusquà une alarme directe ou indirecte, c'est à dire message directs ou selon volonté de l'utilisateur, il nous faut franchir X étapes dont :
Trier les données selon date d'échéance.
Choisir le mode d'alerte :
Solution 1--->Par un bouton sur un formulaire invitant à l'envoi.
Solution 2--->Automatique sans intervention d'utilisateur.

1--> Va nous permettre de vérifier, modifier l'envoi
2--> A l'avantage de l'envoi automatique ainsi que les inconvénients.

On va être amené à choisir le mode d'envoi de courrier électronique :
-->Send objet
-->Outlook

-->Pièce jointe ou pas

Pièce jointe :
Format HTLM?
fichier.rtf?
Word?
PDF?
Snapshot?
Etc.?

Il nous faut commencer par le commencement-->Trier les données selon les dates. Nous allons nous en cantonner à la date de naissance du client. Il suffira de reproduire, selon besoin pour les autres dates d'échéance.

On commence par voir quelques fonctions. On va se contenter dans un premier temps d'éxécuter toutes les fontions proposées par le truchement d'une requête

La principale problématique rencontrée est ce fameux message disgracieux "erreur" affiché si la date de naissance est vide. Nous allons y parer de diverses façons :

La fonction de base pour calculer une différence entre deux dates est :
Date Diff(). En Français-->DiffDate().
Cette fonction gére le passage d'un mois à l'autre, d'une année à l'autre, ainsi que les années bissextiles(Comme la plupart des fonctions dates..)
Cette fonction comprend cinq arguments

1-->Code entre "" déclinant l'intervalle de temps
---------------------------Intervalle Français/US
---------------------------Année : "aaaa" / "yyyy"
---------------------------Mois : "m" / "m"
---------------------------Jour : "j" / "d"
---------------------------Heure : 'h" / "h"
---------------------------Minute : "n" / "n"
---------------------------Seconde : "s" / "s"
---------------------------Trimestre : "t" / "q"
---------------------------Semaine : "ee" / "ww"
---------------------------Jour de la semaine : "e" / "w"
---------------------------Jour de l'année : "a" / "y"
2-->Date de début
3-->Date de fin
4-->Valeur numérique indiquant le premier jour de la semaine (En Fance 2 = Lundi)
5-->Valeur numérique indiquant la première semaine de l'année ( Semaine de 4 jours = 2)

Ce qui va nous donner dans une requête :
CODE
SELECT DateDiff("yyyy",[Dte_Naissance],Date(),2,2) AS AgeDiffDate
FROM tblMich;

Qu'on peut simplifier par :
CODE
SELECT DateDiff("yyyy",[Dte_Naissance],Date()) AS AgeDiffDate
FROM tblMich;



Allez..On complique un peu. Dans note module concernant les dates, qu'on a baptisé bas_Date on colle :

CODE
Function AgeAnnéeMois(DateNaissance As Date, _
                    Cejour As Date, _
                    Optional Numérique As Boolean = True) As Variant
    'cette fonction calcule l'âge en années et mois
    'retourne soit une valeur numérique soit alpha
    Dim AnnéeCejour As Integer, AnnéeNaissance As Integer, _
        MoisCejour As Integer, MoisNaissance As Integer
    Dim strAn As String
    
    MoisCejour = Month(Cejour)
    AnnéeCejour = Year(Cejour)
    MoisNaissance = Month(DateNaissance)
    AnnéeNaissance = Year(DateNaissance)
    If Day(DateNaissance) > Day(Cejour) Then
        MoisNaissance = MoisNaissance + 1
    End If
    If MoisNaissance > MoisCejour Then
        AnnéeNaissance = AnnéeNaissance + 1
        MoisCejour = MoisCejour + 12
    End If
    If Numérique Then
        AgeAnnéeMois = (AnnéeCejour - AnnéeNaissance) _
        + ((MoisCejour - MoisNaissance) / 12)
    Else
        If (AnnéeCejour - AnnéeNaissance) > 1 Then
            AgeAnnéeMois = (AnnéeCejour - AnnéeNaissance) _
                 & " ans, " & (MoisCejour - MoisNaissance) & " mois"
            Else
        AgeAnnéeMois = (AnnéeCejour - AnnéeNaissance) _
                 & " an, " & (MoisCejour - MoisNaissance) & " mois"
    End If
    End If
End Function



Et dans une requête :
CODE
SELECT IIf([Dte_Naissance]>#1/1/1900#,AgeAnnéeMois([Dte_Naissance],Date())) AS AgeMois
FROM tblMich;


On disséque la requête:
Pour ne pas voir s'afficher #erreur on a opté pour demander une réponse qu'aprés le premier Janvier 1900(Attention avant cette date-->Risque de Bug..)
La Fonction :
Le côté option est l'intérêt de cette dernière. Par défaut, sans précision nous aurons du numérique.
Nous pouvons obtenir du texte en le précisant dans la requête :

CODE
SELECT IIf([Dte_Naissance]>#1/1/1900#,AgeAnnéeMois([Dte_Naissance],Date(),0)) AS AgeMois
FROM tblMich;

Un "Gadget" pour cette fonction est de voir s'afficher an et non ans pour un an et moins.


On va regarder pour arriver à un résultat similaire par une autre fonction :
Dans notre module bas_Dates :
CODE
Function AgePourMich(DateDebut As Date, DateFin As Date) As String
' DateDebut = date de naissance, DateFin = date que l'on veut
     Dim A1 As Integer, A0 As Integer, m1 As Integer, m0 As Integer
     Dim d1 As Integer, d0 As Integer
     d1 = Day(DateFin)
     m1 = Month(DateFin)
     A1 = Year(DateFin)
     d0 = Day(DateDebut)
     m0 = Month(DateDebut)
     A0 = Year(DateDebut)
     If d0 > d1 Then m0 = m0 + 1
     If m0 > m1 Then
         A0 = A0 + 1
         m1 = m1 + 12
     End If
     AgePourMich = (A1 - A0) & " ans, " & (m1 - m0) & " mois"
End Function


Dans une requête :
CODE
SELECT IIf([Dte_Naissance]>#1/1/1900#,AgePourMich([Dte_Naissance],Date())) AS AgeActuel
FROM tblMich;


Maintenant on va inscrire la date du prochain anniversaire.
Dans notre module :
CODE
Function Anniversaire(dteDate As Date) As Date
' Cette fonction recherche le prochain anniversaire d'une date.
' Si la date est déjà passée pour l'année en cours, elle renvoie
' la date anniversaire de l'année suivante.
    Dim DateCetteAnnée As Date
    ' Recherche la date correspondante dans l'années en cours.
    DateCetteAnnée = DateSerial(Year(Date), Month(dteDate), Day(dteDate))
    ' Détermine si cette date est déjà passée.
    If DateCetteAnnée < Date Then
        Anniversaire = DateAdd("yyyy", 1, DateCetteAnnée)
    Else
        Anniversaire = DateCetteAnnée
    End If
End Function


Dans une requête :
CODE
SELECT IIf([Dte_Naissance]>#1/1/1900#,Anniversaire([Dte_Naissance])) AS Anniversaire
FROM tblMich;

Et là on commence à voir la possibilité de calculer la prochaine échéance.
C'est exactement à ce moment que je te laisse l'initiative de ce calcul mon Cher Moi Mich.

Comment? Encore une autre fonction? Bon, d'accord. Je suis bon prince. Je te mâche le travail :
Dans notre module :
CODE
Public Function NbJoursAvantAnniversaire _
                (DateNaissancee As Date) As Integer
    Dim DateCetteAnnee As Date
    DateCetteAnnee = DateSerial(Year(Date), _
                     Month(DateNaissancee), _
                     Day(DateNaissancee))
    If DateCetteAnnee < Date Then _
               DateCetteAnnee = DateAdd("yyyy", 1, DateCetteAnnee)
    NbJoursAvantAnniversaire = DateDiff("d", Date, DateCetteAnnee)
End Function


Notre requête :
CODE
SELECT IIf([Dte_Naissance]>1/1/1900,(NbJoursAvantAnniversaire([Dte_Naissance]))) AS AnniversaireProchain
FROM tblMich;


Maintenant,en retour, fais moi voir la requête qui donne le nombre de jours restants avant le prochain anniversaire - 10 jours.

Non!!! On ne souffle pas! C'est à Moi Mich de répondre.

Cordialement.
Moi Mich
icon_cool.gif Bonsoir à toi, l'ami

Regarde, je suis en retard dans ce que tu demandé ,je me suis absenté.
De un je suis un peu perdu dans les commandes form_trie. J'ai de la
difficulté à comprendre. Aurais-tu un exemple plus détaillé ????

Pour l'alrme, je vfais attednre d'avoir terminé le form-trie.

Merci de ta gentilesse et de ta patience. biggrin.gif
francishop
Bonjour, (Paris, 19 h 15)
CITATION(Moi Mich)
De un je suis un peu perdu dans les commandes form_trie. J'ai de la
difficulté à comprendre. Aurais-tu un exemple plus détaillé ????

Pour pouvoir t'aider, fais voir ce que tu essayes de faire.

Cordialement.
Moi Mich
icon_rolleyes.gif Bon matin

Ne pouvant réaliser ma demande, (Alarme dans un champd DDN) je laisse tomber.
J'ai essayer sans résultat. MERCI à ceux qui ont pris le temps de m'aider. J'ai
grandement apprécié. mai_applaudit.gif

A la prochainne,............

J'ai demandé à retirer ma demande dans le forum......

Michel


Ceci une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquez ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.