IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Private Sub Form_Current() - Activation


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 341
    Points : 127
    Points
    127
    Par défaut Private Sub Form_Current() - Activation
    Bonjour,

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Current()
    If Me.[Chang_nom] Then MsgBox "Changement de nom !", vbExclamation, 
    If Me.[Pas en règle] Then MsgBox "Pas en règle de mutuelle - VOIR SI ATTESTATION !", vbExclamation, 
     
    End Sub
    J'ai besoin de mettre un code supplémentaire sur le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Current()
    Age = calculAge(DDN.Value, Now)
    End Sub

    Si je le mets à part et que je refais une nouvelle ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Form_Current()
    il y a conflit; donc je suppose qu'il faut combiner les 2 codes dans 1 seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Form_Current()
    Comment faire ?

    Merci.

    Bonne journée,

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 341
    Points : 127
    Points
    127
    Par défaut
    Une question que je me pose :

    Si on fait un sur le champ ,

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub DDN_AfterUpdate()
    c_age.Value = calculAge(DDN.Value, Now)
    End Sub

    le calcul se fait mais les infos ne sont pas tenues en mémoire lors de la prochaine ouverture de la base, et les anciens enregistrements ne se mettent pas à jour.

    Donc, le + facile, je pense est de trouver la solution à mon 1er problème, soit :

    mettre plusieurs lignes de codes dans

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 341
    Points : 127
    Points
    127
    Par défaut
    J'ai trouvé une parade .....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Load()
     
    c_age.Value = calculAge(DDN, Now)
     
    End Sub

    Mais erreur signalée lors d'un nouvel enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function calculAge(dateAnniv As Variant, dateM As Variant) As Variant
    Dim nbMois As Integer
    Dim nbJours As Integer
    
    nbMois = DateDiff("m", dateAnniv, dateM) + (Day(dateM) < Day(dateAnniv))
    
    If Day(dateM) < Day(dateAnniv) Then
    nbJours = DateDiff("d", dateAnniv, DateSerial(Year(dateAnniv), Month(dateAnniv) + 1, 0)) + Day(dateM)
    Else
    nbJours = Day(dateM) - Day(dateAnniv)
    End If
    
    calculAge = LTrim(Str(nbMois \ 12)) & " ans " & LTrim(Str(nbMois Mod 12)) & " mois " & LTrim(Str(nbJours)) & " jours"
    
    End Function
    Erreur d'exécution '94 : Utilisation incorrecte de Null

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Bonjour,

    Attention à l'utilisation des événements. Ils ont un ordre de déclenchement et peuvent trouver un formulaire qui n'est pas encore abondé.

    Il y a un tuto et un utilitaire pour apprendre, comprendre et maitriser cette partie incontournable de Access.

    C'est ici :

    https://loufab.developpez.com/tutori...ss/evenements/

    Concernant ton code je vois une grosse incohérence dans la logique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function calculAge(dateAnniv As Variant, dateM As Variant) As Variant
    Dim nbMois As Integer
    Dim nbJours As Integer
     
    nbMois = DateDiff("m", dateAnniv, dateM) + (Day(dateM) < Day(dateAnniv))

    Tu indiques des paramètres variant c'est donc que tu t'attends à avoir des paramètres à Null. Ce qui est bien le cas puisque ta ligne passe en erreur.

    Si c'est bien le cas, tu considères que ton calculAge ne peut rien renvoyer donc il te faut sortir avant l'exécution.

    Teste tes 2 paramètres avant ton datediff et si l'un des 2 est à null tu fais un Exit Function.

    L'indentation de code n'est pas une option. Il faut que tu la fasses aussi pour toi que pour ceux qui vont te lire.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 341
    Points : 127
    Points
    127
    Par défaut
    Si je comprends bien, cela pose problème à cause du champ vide dans un nouvel enregistrement.

    Il faut sûrement préciser que à l'ouverture d'un nouvel enregistrement, le champ peut être null....

    Par contre, les 2 codes fonctionnent sans conflit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Current()
    c_age.Value = calculAge(DDN, Now)
    If Me.[Chang_nom] Then MsgBox "Changement de nom !", vbExclamation
    If Me.[Pas en règle] Then MsgBox "Pas en règle de mutuelle - VOIR SI ATTESTATION !",vbExclamation
     
    End Sub

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 341
    Points : 127
    Points
    127
    Par défaut
    Un grand merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Private Sub Form_Current() - Activation
    Par Olivierporcinet dans le forum Access
    Réponses: 1
    Dernier message: 12/09/2024, 17h47
  2. Activer un private sub par la touche ESC
    Par gds35 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 26/03/2009, 18h22
  3. [VBA] Goto faisant référence en-dehors d'un Private Sub?
    Par Oceliane dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/03/2007, 15h57
  4. Réponses: 9
    Dernier message: 06/06/2006, 22h05
  5. mettre plusieurs private sub sur un bouton ?
    Par juju33 dans le forum Access
    Réponses: 2
    Dernier message: 26/03/2006, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo