Access: Différence de date en nombre de jour

Asmojulien Messages postés 6 Date d'inscription vendredi 20 mars 2009 Statut Membre Dernière intervention 18 novembre 2011 - 20 mars 2009 à 12:00
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 20 mars 2009 à 21:00
Bonjour,

Je fais mes premiers pas sous Access, et mal grès une formation de deux jours j'ai des lacunes.

Je me retrouver confronter a un problème qui semblera basique pour tout les experts Access mais qui me retourne le cerveau.

Je voudrais intégrer dans un formulaire deux cases :

La première permettant de saisir une date ou un numéro la seconde renvoyant automatiquement la correspondance du numéro, ou la date correspondante au numéro.

Je m'explique :

disons que le 01/01/2009 corresponde au numéro 1
que le 02/01/2009 corresponde au numéro 2 etc ..etc..

Je voudrais dans une case de mon formulaire pouvoir:
saisir dans la première case 05/01/2009 et que ca me mette automatiquement dans la seconde le chiffre 5.
inversement si je saisis le chiffre 5 je veux que dans la seconde case case s'affiche 05/01/2009.
Sachant que réellement je vais travailler avec mon numéro 1 au 09/11/1976 . et nous sommes aujourd'hui au numéro 11820 (20/03/2009)

Merci de votre aide.

Configuration: Windows 2000
Access 2000

3 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
20 mars 2009 à 15:41
Bonjour

Pour tester le code ci-dessous, crée un formulaire avec deux zones de texte nommés champ1 et champ2. Pour chacune de ces zones, dans la Feuille de Propriétés / onglet Evenement / ligne Après MAJ, sélectionne [Procédure événementielle]



Private Sub champ1_AfterUpdate()
    champ2.Value = conversion(champ1, champ2)
End Sub



Private Sub champ2_afterupdate()
        champ1.Value = conversion(champ2, champ1)
End Sub



Private Function conversion(z1 As Control, z2 As Control) As Variant
    Dim dRef As Date
    dRef = CDate("09/11/1976")
    On Error GoTo errSaisie
    If InStr(1, z1.Value, "/") <> 0 Then
        conversion = DateDiff("d", dRef, z1.Value) + 1
    Else
        conversion = DateAdd("d", dRef, z1.Value - 1)
    End If
    Exit Function
errSaisie:
    MsgBox "Saisie erronée, ré-essayez"
    conversion = IIf(IsNull(z2.Value), "", z2.Value)
End Function



Quand tu modifie le contenu d'une zone de texte, la fonction conversion() est appelée et retourne la valeur à afficher dans la seconde zone de texte. Deux cas particuliers : 1) si tu effaces complètement le contenu d'une zone de texte, le paramètre z1 de la fonction conversion() est Null, et celle-ci renvoie Null ; cela efface donc le contenu de l'autre zone de texte. 2) Si tu saisis une donnée incorrecte, une erreur est générée, et un message s'affiche ; la fonction conversion() renvoie alors le contenu de la seconde zone de texte, qui reste donc inchangée. Cela simplifie le code des procédures événementielles, en évitant d'avoir à gérer l'erreur à leur niveau.

Amicalement
0
Asmojulien Messages postés 6 Date d'inscription vendredi 20 mars 2009 Statut Membre Dernière intervention 18 novembre 2011
20 mars 2009 à 16:32
Wow !!!

Bon déjà je suis rassuré, j'avais peur qu'on me donne une réponse du genre 3 mots une fonction toute simple.

J'aurais jamais pu trouver tout seul...

J'ai essayé la petite manip (a l'exception près que je n'ai pas champ 1 et champ 2 mais texte0 et texte2.

Ce qui me donne
[quote]
Private Sub Texte0_AfterUpdate()
    Texte0.Value = conversion(Texte0, Texte2)
End Sub

Private Sub Texte2_afterupdate()
        Texte2.Value = conversion(Texte2, Texte0)
End Sub

Private Function conversion(z1 As Control, z2 As Control) As Variant
    Dim dRef As Date
    dRef = CDate("09/11/1976")
    On Error GoTo errSaisie
    If InStr(1, z1.Value, "/") <> 0 Then
        conversion = DateDiff("d", dRef, z1.Value) + 1
    Else
        conversion = DateAdd("d", dRef, z1.Value - 1)
    End If
    Exit Function
errSaisie:
    MsgBox "Saisie erronée, ré-essayez"
    conversion = IIf(IsNull(z2.Value), "", z2.Value)
End Function
{/quote]
Cela ne fonctionne pas tout a fait.

Je tape par exemple 9456 dans le champ 1, le curseur passe automatiquement dans le champ 2 (le champ 1 m'affiche la conversion) mais le champ deux reste vide.
Voir la photo ci jointe
Etape 1:
http://www.servimg.com/image_preview.php?i=10&u=11355707

Etape 2:
http://www.servimg.com/image_preview.php?i=11&u=11355707

Ou est mon erreur ???

Encore merci cela m'aide déjà énormement.
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
20 mars 2009 à 21:00
Le code n'est pas bien long ; il serait plus court si tu utilisais la méthode habituelle : une zone de texte dédiée à la date et une autre au numéro.
De toute évidence les procédures événementielles Texte0_AfterUpdate() et Texte2_AfterUpdate() ne sont pas exécutées quand tu entres des données (voir début de mon précédent message).

Cordialement
0
Rejoignez-nous