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 :

Somme de plusieurs Champs [AC-2007]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Somme de plusieurs Champs
    Bonjour à tous,

    J'ai une petite question certainement anodine, mais qui me bloque.
    Je vous explique, dans mon formulaire j'ai 10 champs qui sont 10 lots contenants des prix.
    Dans le lot1 je rentre la valeur 1000
    Dans le lot2 je rentre la valeur 2000
    Dans le lot3 je rentre la valeur 100
    etc. pour mes 10 lots

    Enfin j'ai un dernier champ qui se nomme cout total. Je voudrais donc que dans ce champs "cout total" se fasse l'addition des 10 lots automatiquement.

    Mon problème c'est que je ne veux pas utilisere une requête mais du code et je ne sais pas ou inserer ce code, dans quel évenement.

    Pourriez vous m'aider à trouver une méthode pour faire ce calcul pourtant simple mais difficile pour mon petit niveau.

    Merci de m'avoir écouté et à très vite j'espère

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Tout d'abord, mets la propriete "format" de tes 11 champs (les 10 lots + le total) a "general number" ainsi que "Decimal places" a la valeur desiree.

    Ensuite, dans la propriete "control source" de ton champ "Total", mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Lot1.Value+Lot2.Value+Lot3.Value+Lot4.Value+Lot5.Value+Lot6.Value+Lot7.Value+Lot8.Value+Lot9.Value+Lot10.Value
    en supposant, bien sur que les champs a additionner soient bien Lot1, Lot2...Lot10.

    Bonne chance !

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci pour ta réponse SSJconsult,

    En effet ton code marche très bien, néanmoins j'ai un nouveau problème.
    Dans mon champs cout total, il se fait bien l'addition de tous mes lots parfaitement par contre cette valeur du cout total ne s'inscrit pas dans la table.
    Le champ "cout total" dans le formulaire prend bien une valeur. Mais le champ "cout total" dans la table ne prend lui aucune valeur.

    Comment dois-je faire pour que la valeur du cout total s'inscrive à la fois dans le formulaire(ce qui est deja le cas) et dans la table ?

    Merci beaucoup de prendre le temps de me lire.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Il est en général recommandé de ne pas "stocker" des totaux dans une table. Une table est faite pour contenir des données au plus petit niveau de détail possible/voulu. les outils d'Access et SQL permettant d'effectuer "au vol" tous les calculs imaginables basés sur ces données de détail.

    Imaginons un instant que les totaux soient stockés et qu'un utilisateur lambda décide de changer l'une des valeurs de base... il faudrait recalculer les totaux... alors qu'avec un calcul "au vol", ceux-ci seront adaptés automatiquement

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Re-bonjour,

    Merci pour ta réactivité et pour ton aide.

    Pour la solution que tu m'as donné, les totaux se recalculent déjà automatiquement lorsque la valeur d'un lot est changée.
    Mais dans mon outil, la valeur des lots ne changera jamais et donc les totaux non plus ne changeront jamais. Il est donc important pour mon outil de stocker les valeurs de ces totaux dans mes tables... Ce n'est donc pas possible ?

    Cordialement,

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Si tu dois vraiment le faire, c'est bien sûr possible.

    • Supposons que le champ total de ta table s'appelle [Total_Des_Lots];
    • Supposons que le champ total du formulaire s'appelle [Total_Ligne] (=celui dont nous avons défini la formule plus haut);
    • Mets le champ [Total_Des_Lots] dans ton formulaire mais invisible;
    • Mets le code qui suit derrière l'évènement "Avant Mise à Jour" (Before Update) de ton formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.Total_Des_Lots.Value = Me.Total_Ligne.Value
    End Sub
    et le tour sera joué.

    PS. Fais bien attention de ne pas mettre ce code dans l'évènement "Après Mise à Jour" (After Update) car tu risques de générer une boucle sans fin !

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Aie ça ne marche pas

    Alors je t'explique, j'ai ajouté le champ de la table comme tu me l'as dis dans le formulaire. En entrant dans ses propriétés je suis allé à beforeUpdate et j'ai écris ce bout de code en reprenant le tien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Couts_EG_BeforeUpdate(Cancel As Integer)
     
    Me.Couts_EG.Value = Me.[Lot1: Curage] + [Lot2: Cloisons Platrerie] + [Lot3: Plafond Suspendus] + [Lot4: Revetement Sol et Mur] + [Lot5: Peinture] + [Lot6: Elec CFO] + [Lot7: Elec CFA] + [Lot8: Climatisation] + [Lot9: Plomberie] + [Lot10: Menuiserie Ext] + [Lot11: Serrurerie] + [Lot12: Mobilier] + [Lot13: Enseigne] + [Lot14: Divers] + [Lot14: Securite - Surete].Value
     
    End Sub

    Mais il ne se passe rien ... les valeurs du total des couts EG ne s'inscrivent toujours pas dans la table ...

    Me suis-je trompé dans le code ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Relis-moi bien...
    Mets le code qui suit derrière l'évènement "Avant Mise à Jour" (Before Update) de ton formulaire
    Il s'agit bien de l'évènement "Avant Mise à Jour" de ton formulaire

    De plus, pour être "propre", la synthaxe du code devrait ressembler à
    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
    Me.Couts_EG.Value = Me.[Lot1: Curage].Value + _
                        Me.[Lot2: Cloisons Platrerie].Value + _
                        Me.[Lot3: Plafond Suspendus].Value + _
                        Me.[Lot4: Revetement Sol et Mur].Value + _
                        Me.[Lot5: Peinture].Value + _
                        Me.[Lot6: Elec CFO].Value + _
                        Me.[Lot7: Elec CFA].Value + _
                        Me.[Lot8: Climatisation].Value + _
                        Me.[Lot9: Plomberie].Value + _
                        Me.[Lot10: Menuiserie Ext].Value + _
                        Me.[Lot11: Serrurerie].Value + _
                        Me.[Lot12: Mobilier].Value + _
                        Me.[Lot13: Enseigne].Value + _
                        Me.[Lot14: Divers].Value + _
                        Me.[Lot14: Securite - Surete].Value

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ah oui j'avais pas fais attention

    Bon j'ai bien mis ton code au bon endroit mais il ne se passe toujours rien.

    Pour info le champs du formulaire est exactement celui la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =[Lot1: Curage]+[Lot2: Cloisons Platrerie]+[Lot3: Plafond Suspendus]+[Lot4: Revetement Sol et Mur]+[Lot5: Peinture]+[Lot6: Elec CFO]+[Lot7: Elec CFA]+[Lot8: Climatisation]+[Lot9: Plomberie]+[Lot10: Menuiserie Ext]+[Lot11: Serrurerie]+[Lot12: Mobilier]+[Lot13: Enseigne]+[Lot14: Divers]+[Lot14: Securite - Surete]
    et le champ de la table est celui la : Couts EG

    Pk ça ne marche pas tout me parait ok pourtant ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Pour être certain que nous sommes bien sur la même longueur d'onde :

    1) Tu as bien mis le champ de ta table [Couts EG] dans ton formulaire, avec [Couts EG] comme Control Source et comme Nom ?

    2) Tu as un autre champ (que nous appellerons Total_Ligne) avec, comme Control Source la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =[Lot1: Curage]+[Lot2: Cloisons Platrerie]+[Lot3: Plafond Suspendus]+[Lot4: Revetement Sol et Mur]+[Lot5: Peinture]+[Lot6: Elec CFO]+[Lot7: Elec CFA]+[Lot8: Climatisation]+[Lot9: Plomberie]+[Lot10: Menuiserie Ext]+[Lot11: Serrurerie]+[Lot12: Mobilier]+[Lot13: Enseigne]+[Lot14: Divers]+[Lot14: Securite - Surete]
    3) Dans l'évènement "BeforeUpdate" de ton formulaire, tu as bien mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.[Couts EG].Value = Me.Total_Ligne.Value
    End Sub
    Si tout ceci est correct, ça devrait fonctionner.

  11. #11
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup. Ca marche enfin, je n'avais pas fais la diffèrence entre le nom et le control source ...

    Merci en tout cas, c'est génial

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/03/2011, 14h28
  2. [AC-2000] Pb somme de plusieurs champs dans état
    Par rankynette dans le forum IHM
    Réponses: 2
    Dernier message: 09/04/2010, 08h25
  3. [requete]somme de plusieur champs séparés
    Par Neilime05 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/04/2007, 21h15
  4. Somme de plusieurs champs
    Par zapatta dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/09/2006, 14h27
  5. Fonction vba somme de plusieurs champs
    Par Greg84 dans le forum Access
    Réponses: 4
    Dernier message: 09/08/2006, 15h16

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