Code sur access

nad -  
 nad -
bonjour
j'ai un petit problème au niveau de mon formulaire de réception
voila
j'ai un formulaire qui affiche des dossiers et il y a une case à cocher qui me permet d'affecter la date du jour à mon champs qui est date de réception
je dois sécuriser
la petite cette case donc ce que j'ai fait :
If reception = True Then

Me![datereception] = Now()
Rdate = Me![datereception]

Else
Me![datereception] = ""
End If
reception c'est le nom de ma case et datereception c'est mon contrôle où il y a la date de reception
voila mais là ça ne sécurise pas donc j'ai rajouté
if isnull(Me![datereception]) then
blabla
else msgbox "vous ne pouvez pas modifier"
end if
et cela m'affecte à mon champs date de ma table lignecommande
une date du genre 29/12/1899
alors là je suis un peu larguée et j'aurai vraiment besoin d'aide
merci

22 réponses

  • 1
  • 2
  1. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    euuuh, ton problème, c'est quoi au juste ?
    c'est que tu n'arrive pas à protéger ta petite case ? C'est quoi "protéger" pour toi ?
    c'est la date qui n'est pas bonne ?
    ...

    j'ai un peu de mal à comprendre...:-)

    A+ Blux "Les cons, ça ose tout.
    C'est même à ça qu'on les reconnait"
    0
  2. nad
     
    en fait quand je dis "protéger" c'est pour pas qu'on la change à chaque fois
    0
  3. Pascal
     
    Salut nad,

    Ton problème peut se résoudre de la manière suivante:

    Pour la routinde reception_Click(), tu écris:

    Private Sub reception_Click()
    If reception.value = true Then
    Msgbox "Vous ne pouvez pas modifier ce champ"
    Exit Sub
    Else
    reception.value = true
    datereception.value = Now()
    Me.Refresh
    End If
    Exit Sub
    End Sub

    Ainsi une fois la case cochée, elle ne peut pas être décochée.

    :-)
    0
  4. nad
     
    alors ton code marche car effectivement quand la case est cochée je ne peux plus la décochée
    mais y a un hic, c'est que le massega box n'apparait pas quand j'essaie de modifier la case ça ne se décoche pas mais le message n'apparait pas
    puis il apparait au contraire quand je coche une cose qui n'est cochée il me prends la valeur mais il m'apparait le message
    et il m'affecte aussi la date 29/12/1899 à mon champs dans la tabe
    voila
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pascal
     
    Effectivement. J'ai testé et ceci marche:

    Private Sub reception_Click()
    If recept.Value = False Then
    MsgBox "Vous ne pouvez pas modifier ce champ"
    reception.Value = True
    Exit Sub
    Else
    recept.Value = True
    datereception.Value = Now()
    Me.Refresh
    End If
    Exit Sub
    End Sub

    Ne me demande pas pourquoi ça marche. J'avoue que j'ai du mal à comprendre la logique des True/False...

    :-)
    0
  7. Pascal
     
    nad,

    Pour ce qui est du 29/12/1899, to pc doit avoir un problème d'horloge interne.

    Je te conseil d'utiliser la fonction Date() au lieu de Now(). J'imagine que l'heure, les minutes et les secondes importent peu.

    :-)
    0
  8. nad
     
    oui mais recep je vais devoir le declarer comme varible ?
    Dim recep as date
    0
  9. Pascal
     
    Non, c'est une faute de frappe. Dans mon test recep = reception.
    recept.Value = True ==> reception.value = true

    :-)
    0
    1. nad
       
      oui oui excuse moi je m'en suis rendu compte après t avoir écris
      par contre le petit pb avec la date existe aussi quand je met date à la place de now
      en fait c'est dès que je veux modifier la case qui est déjà cochée mon message box apparait mais dans la table la date devient 29/12/1899
      j'espère que t as compris
      0
  10. Pascal
     
    Moi je n'ai pas ce problème!
    Essaye de débugger le pgm pour voir où cette modification a lieu.

    Vérifie si les modifs que tu effectue dans le formulaire sont bien reprises dans la table correspondante.
    :-)
    0
  11. nad
     
    ça n'est pas 1 bug au lieu de laisser la date qu'il y avait d'inscrite il met à la place 29/12/1899 dans le champ de la table qui concerne bien sûre la date de réception
    0
  12. Pascal
     
    Que tu le veuille ou non, c'est un bug....
    Le programme, quelque part modifie cette date après avoir affiché la MsgBox!

    As-tu vérifié si les données étaient modifiées dans la table?
    Le champ datereception doit être modifier quelque part...

    Pour pouvoir suivre la variable, tu te mets en mode "debug". Dans le menu "view" tu demande d'afficher "debug window". Dans longlet "Watch" tu clacs (clik droit) et tu sélectionne "Add watch". Dans le champ de saisie du tape "Datereception.value". A chaque fois que cette date sera modifiée, il te l'affichera.
    :-)
    0
  13. nad
     
    alors oui j'ai regardé dans la table et c'est seulement la date de réception qui est modifié
    par contre pour ce que tu m'a dis de faire je ne vois pas du tout comment faire
    0
  14. Pascal
     
    Quand tu ouvres la fenêtre de code (là où tu tapes ton code vb), à gauche, verticalement le long de l'écran, il y a une bande grise. Tu clicks dedans en face de l'instruction Public Sub reception_Click().
    Une boule rouge apparît. Quand tu passes en mode exécution (pour ton formulaire) et que tu clicks sur la case à cocher, le pgm s'arrête à l'endroit de la boule rouge. Tu peux alors exécuter ligne par ligne en appuyant sur la touche F8.

    Une fois que le pgm c'est arrêté, dans le menu view (barre de menu) tu sélectionne "Debug window". Une fenêtre apparaît. Cette fenêtre a deux onglets: "Locals" et "Watch". Tu click sur "Watch". Dans le cadre blanc, tu clicks avec le bouton DROIT de ta souris. Un menu déroulant apparaît dans lequel tu choisis "Add watch". Dans le champ de sélection tu tape "datereception.value".

    Un watch signale au débugger que tu veux être averti à chaque changement de la valeur spécifiée. Donc, à chaque fois que datereception.value changera, tu verras dans la fenêtre "Watch" la nouvelle valeur. Si tu regarde le code juste après un tel changement, tu sais que l'instruction précédente a modifié la valeur en question.

    Question: la case "à cocher" a-t-elle une référence dans ta table? Dans ta table, y-a-t-il un champ du type "yes/no" correspondant?

    :-)
    0
  15. nad
     
    alors
    au départ la date prens la valeur 00.00.00
    puis c'est seulement au premier exit sub qu'elle prend 29/12/1899
    pour tes questions
    la case à cocher se réfaire à la date oui dans la source de ce controle j'ai choisi la date (est ce ça qui bloque fut il obligatoirement un champ bool)
    et donc dans la table il n'y a pas de champs de type yes/no
    en fait j'ai fait cette case à cocher pour que ce soit plus facile à l'utilisateur dentrer la date oui au lieu qu'il la saisisse
    voila
    0
  16. Pascal
     
    Evidemment que c'est ça le problème!!!!
    Pour Access, si la case est cochée elle prend la valeur "-1". Donc, il converti "-1" en date qui pour lui correspond à la plus petite date qu'il puisse gérer (sa date de référence. En l'occurence le 29/12/1899.

    Ce que tu dois faire, c'est, dans ta table, créer un champ de type "Yes/No". Yes = "-1", no = "0" de manière fictive. Tu mets à jours (avec une "update query") ce champ de telle sorte que quand la date d'envoi est remplie il vaut "-1". Tu verras que le champ en question apparaît comme un case à cocher dans ta table.

    En suite, dans ton formulaire, tu lies ce champ avec la case à cocher.
    :-)
    0
    1. nad
       
      alors j'ai rajouté un champ dans ma table il a pour tupe oui/non
      puis j'ai mis comme source dans le controle de la case à cocher
      le nom de ce contrôle "recep"
      mais après je comprends plus rien
      0
  17. Pascal
     
    nad,
    On va procéder par étapes.

    Pour plus de facilité: je te conseil vivement de donner le même nom aux champs de tes tables qu'aux champs correspondants dans tes formulaires!

    1. Si tu viens d'ajouter le champ oui/non dans ta table, toutes les valeurs sont à "non" (décochée). Si tu n'as pas trop de lignes dans la table, coche toutes les cases pour lesquelles une date de reception est spécifiée. Si tu as trop de donnée, dis le moi je t'indiquerai comment procéder avec une "Update query".

    2. Ton formulaire doit être lié à la table (ou query) contenant au minimum le champ date (datereception) et le champ "oui/non".

    3. Ton formulaire contient les champs suivants (plus d'autres éventuellement):

    date reception: le champ qui affiche la date. Ce champ est lié au champ correspondant de la table. Met lui la propriété "non modifiable" et "non sélectionnable".

    reception: la "check box" lié au champ que tu viens de créer dans ta table.

    4. Tu sélectionnes la "check box" et tu demandes d'afficher les propriétés. Dans les "Events", tu sélctionnes "On click" et tu click sur les trois petits points. Tu choisi "Code builder". Les lignes:

    Public Sub reception_click()
    End sub

    apparaissent automatiquement. Entre ces deux lignes, tu copies et coles ceci:

    If recept.Value = False Then
    MsgBox "Vous ne pouvez pas modifier ce champ"
    reception.Value = True
    Exit Sub
    Else
    reception.Value = True
    datereception.Value = Date()
    Me.Refresh
    End If
    Exit Sub

    Et ça devrait marcher.

    ATTENTION: refait le point 4 entièrement pour être sûr qu'il sache quelle routine est attaché au click sur la "check box".

    PS: pour que je puisses te comprendre il faut que tu fasses un effort dans la formulation de tes phrases. Rien ne presses. Je serai là demain aussi si tu veux.

    :-)
    0
  18. Pascal
     
    nad,
    On va procéder par étapes.

    Pour plus de facilité: je te conseil vivement de donner le même nom aux champs de tes tables qu'aux champs correspondants dans tes formulaires!

    1. Si tu viens d'ajouter le champ oui/non dans ta table, toutes les valeurs sont à "non" (décochée). Si tu n'as pas trop de lignes dans la table, coche toutes les cases pour lesquelles une date de reception est spécifiée. Si tu as trop de donnée, dis le moi je t'indiquerai comment procéder avec une "Update query".

    2. Ton formulaire doit être lié à la table (ou query) contenant au minimum le champ date (datereception) et le champ "oui/non".

    3. Ton formulaire contient les champs suivants (plus d'autres éventuellement):

    date reception: le champ qui affiche la date. Ce champ est lié au champ correspondant de la table. Met lui la propriété "non modifiable" et "non sélectionnable".

    reception: la "check box" lié au champ que tu viens de créer dans ta table.

    4. Tu sélectionnes la "check box" et tu demandes d'afficher les propriétés. Dans les "Events", tu sélctionnes "On click" et tu click sur les trois petits points. Tu choisi "Code builder". Les lignes:

    Public Sub reception_click()
    End sub

    apparaissent automatiquement. Entre ces deux lignes, tu copies et coles ceci:

    If recept.Value = False Then
    MsgBox "Vous ne pouvez pas modifier ce champ"
    reception.Value = True
    Exit Sub
    Else
    reception.Value = True
    datereception.Value = Date()
    Me.Refresh
    End If
    Exit Sub

    Et ça devrait marcher.

    ATTENTION: refait le point 4 entièrement pour être sûr qu'il sache quelle routine est attaché au click sur la "check box".

    PS: pour que je puisses te comprendre il faut que tu fasses un effort dans la formulation de tes phrases. Rien ne presses. Je serai là demain aussi si tu veux.

    :-)
    0
  19. Pascal
     
    nad,
    On va procéder par étapes.

    Pour plus de facilité: je te conseil vivement de donner le même nom aux champs de tes tables qu'aux champs correspondants dans tes formulaires!

    1. Si tu viens d'ajouter le champ oui/non dans ta table, toutes les valeurs sont à "non" (décochée). Si tu n'as pas trop de lignes dans la table, coche toutes les cases pour lesquelles une date de reception est spécifiée. Si tu as trop de donnée, dis le moi je t'indiquerai comment procéder avec une "Update query".

    2. Ton formulaire doit être lié à la table (ou query) contenant au minimum le champ date (datereception) et le champ "oui/non".

    3. Ton formulaire contient les champs suivants (plus d'autres éventuellement):

    date reception: le champ qui affiche la date. Ce champ est lié au champ correspondant de la table. Met lui la propriété "non modifiable" et "non sélectionnable".

    reception: la "check box" lié au champ que tu viens de créer dans ta table.

    4. Tu sélectionnes la "check box" et tu demandes d'afficher les propriétés. Dans les "Events", tu sélctionnes "On click" et tu click sur les trois petits points. Tu choisi "Code builder". Les lignes:

    Public Sub reception_click()
    End sub

    apparaissent automatiquement. Entre ces deux lignes, tu copies et coles ceci:

    If recept.Value = False Then
    MsgBox "Vous ne pouvez pas modifier ce champ"
    reception.Value = True
    Exit Sub
    Else
    reception.Value = True
    datereception.Value = Date()
    Me.Refresh
    End If
    Exit Sub

    Et ça devrait marcher.

    ATTENTION: refait le point 4 entièrement pour être sûr qu'il sache quelle routine est attaché au click sur la "check box".

    PS: pour que je puisses te comprendre il faut que tu fasses un effort dans la formulation de tes phrases. Rien ne presses. Je serai là demain aussi si tu veux.

    :-)
    0
  20. Pascal
     
    nad,
    On va procéder par étapes.

    Pour plus de facilité: je te conseil vivement de donner le même nom aux champs de tes tables qu'aux champs correspondants dans tes formulaires!

    1. Si tu viens d'ajouter le champ oui/non dans ta table, toutes les valeurs sont à "non" (décochée). Si tu n'as pas trop de lignes dans la table, coche toutes les cases pour lesquelles une date de reception est spécifiée. Si tu as trop de donnée, dis le moi je t'indiquerai comment procéder avec une "Update query".

    2. Ton formulaire doit être lié à la table (ou query) contenant au minimum le champ date (datereception) et le champ "oui/non".

    3. Ton formulaire contient les champs suivants (plus d'autres éventuellement):

    date reception: le champ qui affiche la date. Ce champ est lié au champ correspondant de la table. Met lui la propriété "non modifiable" et "non sélectionnable".

    reception: la "check box" lié au champ que tu viens de créer dans ta table.

    4. Tu sélectionnes la "check box" et tu demandes d'afficher les propriétés. Dans les "Events", tu sélctionnes "On click" et tu click sur les trois petits points. Tu choisi "Code builder". Les lignes:

    Public Sub reception_click()
    End sub

    apparaissent automatiquement. Entre ces deux lignes, tu copies et coles ceci:

    If recept.Value = False Then
    MsgBox "Vous ne pouvez pas modifier ce champ"
    reception.Value = True
    Exit Sub
    Else
    reception.Value = True
    datereception.Value = Date()
    Me.Refresh
    End If
    Exit Sub

    Et ça devrait marcher.

    ATTENTION: refait le point 4 entièrement pour être sûr qu'il sache quelle routine est attaché au click sur la "check box".

    PS: pour que je puisses te comprendre il faut que tu fasses un effort dans la formulation de tes phrases. Rien ne presses. Je serai là demain aussi si tu veux.

    :-)
    0
  21. Pascal
     
    ???? Voila une curieuse chose. Mon message c'est affiché 4 fois.
    Ma connexion est vraiment merdique aujourd'hui!

    nad,

    Si tu as un email, je peux t'envoyer un exemple.

    :-)
    0
    1. nad
       
      alors oui ça marche je me suis affolée quand j'ai vu que tu parlais de "update query"
      sinon j'ai bien las date qui s'affiche et quand je decoche j'ai bien le massage et dans la table c'est bien l'ancienne date qui y est resté
      j'esère que ça ne clochera plus
      mais si j'ai un pb je te faits signe
      mon adresse email
      sab.lah@voila.fr
      je veux bien voir ton exemple
      voila merci
      0
  • 1
  • 2