CHAMP CALCULE CONDITIONNEL ACCESS

Résolu
GUYSYS Messages postés 27 Statut Membre -  
 Siroua -
BONJOUR,
J'ai besoin , dans un formulaire de base de donée ACCESS 2000 que la valeur d'un contrôle RESULTAT affiche le résultat d'une soustraction correspondant à diffrénce entre la valeur de deux autres contrôle A, B de telle sorte que :
SI (A-B) <0 RESULTAT =0
SI (A-B) >=0 RESULTAT = le montant de cette différence
SI (A-B)=A ( c'est à dire si B=O) qu'une 3émé condition soit vérifié du style C<> NULL POUR AFFICHER RESULTAT = A
SI C= NULL RESULTAT doit rester à O.
Cela peut paraître simple mais je piétine, pouvez-vous m'aider, dois-je créer une macro avec variable ou une procédure évenementielle pour le contrôle RESULTAT ou ???
Merci de vos éventuelles idées sur la question , exemples bienvenus.

10 réponses

  1. blux Messages postés 2046 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    alors moi je ne passe pas par un champ de precalcul (c'est totalement inutile).

    Je te propose la chose suivante :

    Tu crées un formulaire "Formulaire1" avec 4 contrôles de type texte dedans (nommés A, B, Date_Sortie, Resultat)

    Tu crées un module (dans la fenêtre base de données) avec ce code-là :
    Public Sub MajResu()
    Dim ValA As Long
    Dim ValB As Long
    Dim Diff As Long
    If IsNull(Forms!Formulaire1.Controls("A").Value) Then
        ValA = 0
    Else
        ValA = Val(Forms!Formulaire1.Controls("A").Value)
    End If
    MsgBox ValA
    If IsNull(Forms!Formulaire1.Controls("B").Value) Then
        ValB = 0
    Else
        ValB = Val(Forms!Formulaire1.Controls("B").Value)
    End If
    MsgBox ValB
    Diff = ValA - ValB
    MsgBox Diff
    If Diff < 0 Then
        Forms!Formulaire1.Controls("Resultat").Value = 0
        Exit Sub
    End If
    If Diff >= 0 Then
        Forms!Formulaire1.Controls("Resultat").Value = Diff
        Exit Sub
    End If
    If ValB = 0 Then
        If IsNull(Forms!Formulaire1.Controls("Date_Sortie").Value) Then
            Forms!Formulaire1.Controls("Resultat").Value = 0
        Else
            Forms!Formulaire1.Controls("Resultat").Value = Diff
        End If
    End If
    End Sub

    Ensuite, il ne reste plus qu'à affecter du code dans la propriété "après maj" des trois premiers contrôles en mettant un appel à la sous-procédure MajResu définie dans le module :
    Private Sub A_AfterUpdate()
    MajResu
    End Sub
    
    Private Sub B_AfterUpdate()
    MajResu
    End Sub
    
    Private Sub Date_Sortie_AfterUpdate()
    MajResu
    End Sub


    Comme ça, dès que tu saisis qq chose et que le focus passe sur un autre champ, on recalcule...

    Mais comme ton algorithme n'est pas en phase avec les exemples que tu m'as proposés, j'ai fait en fonction de l'algo, à toi de voir ce qu'il faut modifier en fonction de tes besoins...
    9