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 :

Formulaire : controler le resultat d'un calcul sur champ verrouillé


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 13
    Points
    13
    Par défaut Formulaire : controler le resultat d'un calcul sur champ verrouillé
    Bonjour à tous,

    je suis en train de batir un formulaire de saisie pour entrer les données d'un bilan financier. J'ai donc des données à saisir et des calculs automatiques qui fonctionnent sans probleme (les calculs sont réactualisés à chaque saisie d'une nouvelle valeur - fonction Nz).

    En plus des calcul j'ai besoin de controles sur les valeurs car comme dans tout bon bilan qui se respecte le total du passif doit par exemple être forcément égal au total de l'actif.

    J'arrive sans probleme a mettre en place les controles pour les champs de saisie avec ValideSi mais pas pour les champs calculés automatiquement que j'ai par ailleurs verrouillés pour empecher l'utilisateur de réécrire sur les resultats et donc d'ecraser la valeur du calcul. Pour courronner le tout je ne vois pas ou placer ce controle TOTAL PASSIF = TOTAL ACTIF car d'un bilan à l'autre il y a des valeurs à certains endroits et pas à d'autres.

    Bref apres des heures cumulées de recherches je m'en remet à vos lumières

    Pouvez vous me dire où et comment mettre en place ce controle de valeur ?

    merci à tous
    Arno

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Si j'ai bien compris ce que tu veux faire, je ne vois que la programmation VBA. C'est-à-dire une fonction qui vérifies si le passif est = à l'actif par exemple, et qui te renverrait vrai ou faux. Ensuite, il te faut un bouton (btn_fermer) qui servira à fermer le formulaire. Sur l’événement clic du bouton, il faut vérifier grâce à la fonction précédente si l'actif est égal au passif et fermer ou non le formulaire en fonction de la réponse de l'utilisateur.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub btn_fermer_Click()
        If Not ActifEgalPassif Then
            If MsgBox("Le passif est <> de l'actif, voulez-vous fermer le form? Les données ne seront pas enregistrées.", vbYesNo) = vbYes Then
                Me.Undo
                DoCmd.Close
            End If
        Else
            DoCmd.Close
        End If
    End Sub
     
    Private Function ActifEgalPassif() As Boolean
        ActifEgalPassif = (SommeDesChampsDesActifs = SommeDesChampsDesPassifs)
    End Function
    Il faudra bien penser aussi à désactiver le bouton Fermer du formulaire(la petite croix Windows) pour forcer l'utilisateur à utiliser notre bouton personnalisé. Pour cela, il faut aller dans les propriétés du formulaire et mettre la propriété "Bouton Fermer" sur "Non"
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Bonjour et merci pour votre reponse


    je vais tester et reviens vers vous

    merci encore

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Bonjour Paidge

    j'ai testé (surement mal) et je sèche...
    Sur mon formulaire en bas de page j'ai un bouton suivant qui permet de passer à la saisie de la page suivante sur un autre formulaire

    En definitive ce que je voudrais faire c'est de bloquer l'accès à cette page suivante tant que la condition TOTAL PASSIF = TOTAL ACTIF n'est pas remplie

    Au click que le bouton de bas de page, si la condition n'est pâs remplie on affiche un Msg box : "CONTROLER LES VALEURS", si elle est remplie on ne fait que passer à la page suivante avec une macro dejà existante

    Voilà jespere que tu pourras m'aider

    Voici ce que j'ai ecrit mais ya encore un peu de chemin à parcourir - suis allé en formation initiation VBA il y a 1 an mais ca date.

    merci

    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
    16
    17
    18
    19
    20
    21
    22
    23
     
    Private Sub ouvrir_cpte_resultat_Click()
        Dim confirm As Integer
        Dim stDocName As String
        confirm = MsgBox("LE TOTAL DU PASSIF NE CORRESPOND PAS AU TOTAL DE L'ACTIF, MERCI DE CONTROLER LES VALEURS", vbOKOnly)
        stDocName = "M_ouvrir saisie compte resultat_p1"
     
        If ActifEgalPassif Then
        DoCmd.RunMacro stDocName
     
        Else
        confirm = vbOK
     
     
        End If
     
    End Sub
     
    Private Function ActifEgalPassif() As Boolean
     
        ActifEgalPassif = Me.TOTAL_GENERAL_EE_N = T_SAISIE_BILAN_ACTIF.[TOTAL 1A NET]
     
    End Function

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Salut,
    Et si tu mets ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ouvrir_cpte_resultat_Click()
     
        If ActifEgalPassif Then
            DoCmd.RunMacro "M_ouvrir saisie compte resultat_p1"
        Else
            MsgBox "LE TOTAL DU PASSIF NE CORRESPOND PAS AU TOTAL DE L'ACTIF, MERCI DE CONTROLER LES VALEURS", vbOKOnly
        End If
     
    End Sub
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Je crois bien que l'erreur est dans la fonction ActifEgalPassif, On devrait plutôt avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Function ActifEgalPassif() As Boolean
        ActifEgalPassif = Me.TOTAL_GENERAL_EE_N = DLookUp("[TOTAL 1A NET]","[T_SAISIE_BILAN_ACTIF]") 
    End Function
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    En effet, je n'avais pas vu ça :p
    Donc en résumé, essaies ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ouvrir_cpte_resultat_Click()
     
        If ActifEgalPassif Then
            DoCmd.RunMacro "M_ouvrir saisie compte resultat_p1"
        Else
            MsgBox "LE TOTAL DU PASSIF NE CORRESPOND PAS AU TOTAL DE L'ACTIF, MERCI DE CONTROLER LES VALEURS", vbOKOnly
        End If
    End Sub
     
     Private Function ActifEgalPassif() As Boolean
        ActifEgalPassif = Me.TOTAL_GENERAL_EE_N = DLookUp("[TOTAL 1A NET]","[T_SAISIE_BILAN_ACTIF]") 
    End Function
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Bonjour Messieurs et un grand merci pour votre réactivité !

    On ne doit pas etre loin de la solution mais ça bloque toujours.

    La verif de calcul ne fonctionne pas comme elle devrait. J’ai testé et suis pourtant certain que mes valeurs sont totalement égales.
    J’aimerais ajouter dans cette fonction une plage de tolérance de + ou - 10 euros car avec les différents arrondis de décimales sur chaune des valeurs il est évident e je ne tombe jamais sur le même résultat à l’euro près.

    J’ai l’impression que c’est comme si la fonction avait besoin d’une réactualisation pour tenir compte du nouvel enregistrement sur lequel je suis (les tables contiennent les bilans de plusieurs sociétés identifiés par une clé unique N° SIREN)


    Voici ce que j’ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Function ActifEgalPassif() As Boolean
      ActifEgalPassif = Me.TOTAL_GENERAL_EE_N >= DLookup("[TOTAL 1A NET]", "T_SAISIE BILAN ACTIF", [N° SIRET] = Me.[N° SIRET]) + 10 And Me.TOTAL_GENERAL_EE_N <= DLookup("[TOTAL 1A NET]", "T_SAISIE BILAN ACTIF", [N° SIRET] = Me.[N° SIRET]) - 10
     
      End Function
     
      Private Sub ouvrir_cpte_resultat_Click()
     
        If ActifEgalPassif Then
            DoCmd.RunMacro "M_ouvrir saisie compte resultat_p1"
        Else
            MsgBox "LE TOTAL DU PASSIF NE CORRESPOND PAS AU TOTAL DE L'ACTIF, MERCI DE CONTROLER LES VALEURS", vbOKOnly
        End If
    End Sub

    J'aimerais aussi pouvoir interdir le passage d'un enregistrement à l'autre par la roulette de la souris.

    Merci d’avance encore une fois pour vos retours éclairés.

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Fais un Debug.Print pour vérifier les valeurs que tu as avant IF (le contrôle de ton critère) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Debug.print Me.TOTAL_GENERAL_EE_N
    Debug.print DLookup("[TOTAL 1A NET]", "T_SAISIE BILAN ACTIF", [N° SIRET] = Me.[N° SIRET])
    Tu as dans ces tutoriels les différentes manières de bloquer la molette de la souris.

    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 13
    Points
    13
    Par défaut
    Bonjour madefemere

    merci pour ta reponse mais ça ne repond toujours pas
    voici mon code modifié (ajout d'un critere car ma clé dans les tables est N° SIREN + Annee bilan (on peut avoir plusieurs bilans pour une de la même société mais l'année ne peut etre identique) 1 société = 1 bilan par année

    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
    16
    17
    18
    19
    20
     
    Private Function ActifEgalPassif() As Boolean
     
     
      ActifEgalPassif = Me.TOTAL_GENERAL_EE_N >= DLookup("[TOTAL 1A NET]", "T_SAISIE BILAN ACTIF", [N° SIRET] = Me.[N° SIRET] And [Année N bilan] = Me.Année_N_bilan) - 10 And Me.TOTAL_GENERAL_EE_N <= DLookup("[TOTAL 1A NET]", "T_SAISIE BILAN ACTIF", [N° SIRET] = Me.[N° SIRET] And [Année N bilan] = Me.Année_N_bilan) + 10
     
     
      End Function
     
      Private Sub ouvrir_cpte_resultat_Click()
     
        Debug.Print Me.TOTAL_GENERAL_EE_N
        Debug.Print DLookup("[TOTAL 1A NET]", "T_SAISIE BILAN ACTIF", [N° SIRET] = Me.[N° SIRET] And [Année N bilan] = Me.Année_N_bilan)
     
        If ActifEgalPassif Then
            DoCmd.RunMacro "M_ouvrir saisie compte resultat_p1"
        Else
            MsgBox "LE TOTAL DU PASSIF NE CORRESPOND PAS AU TOTAL DE L'ACTIF, MERCI DE CONTROLER LES VALEURS", vbOKOnly
        End If
    End Sub

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Mais qu'est-ce qui est différent dans les valeurs que te renvoient ces Debug.Print par rapport à la zone de texte du formulaire pour Me.TOTAL_GENERAL_EE_N et dans ta table "T_SAISIE BILAN ACTIF"? C'est ce qui te permettrait d'avancer dans ton rapprochement.

    @+
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 13
    Points
    13
    Par défaut yeeesssssssss !!!!!!!!!!!
    hello

    j'ai enfin une solution
    J'ai réglé le pb en integrant à mon formulaire le champ de la table auquel je compare mon formulaire (TOTAL 1A NET)
    et ça fonctionne !!

    plus simple et plus accessible à mon esprit...

    au final mon code donne

    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
    Private Function ActifEgalPassif() As Boolean
      ActifEgalPassif = Me.TOTAL_GENERAL_EE_N >= Me.TOTAL_1A_NET - 10 And Me.TOTAL_GENERAL_EE_N <= Me.TOTAL_1A_NET + 10
     
     
      End Function
     
      Private Sub ouvrir_cpte_resultat_Click()
     
     
        If ActifEgalPassif Then
            DoCmd.RunMacro "M_ouvrir saisie compte resultat_p1"
        Else
            MsgBox "LE TOTAL DU PASSIF NE CORRESPOND PAS AU TOTAL DE L'ACTIF, MERCI DE CONTROLER LES VALEURS", vbOKOnly
        End If
    End Sub
    merci encore pour tous vos commentaires éclairés , je vais pouvoir dupliquer cette méthode sur mes autres controles à effectuer.
    Je m'attaquerai ensuite au blocage molette souris

    MERCI !! et bon weekend

  13. #13
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Effectivement, pourquoi faire simple quand on peut faire compliquer !
    (énoncé incomplet, donc...) C'est bien, tu as trouvé une solution.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

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

Discussions similaires

  1. Calcul sur champ table :/
    Par __sPiKe__ dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/06/2011, 09h10
  2. [AC-2003] Calcul sur champ
    Par louzz dans le forum IHM
    Réponses: 9
    Dernier message: 14/01/2010, 14h37
  3. Calcul sur champs
    Par jacqtiti dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/07/2007, 23h13
  4. Réponses: 4
    Dernier message: 15/06/2006, 16h42
  5. Requête calcul sur champs
    Par tikawua dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 15h26

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