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 :

[VBA] Somme de certaines valeurs d'une colonne dans une requete


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [VBA] Somme de certaines valeurs d'une colonne dans une requete
    Bonjour,

    Pour commencer je remercie tout le monde pour toutes les informations et aides de ce site internet.
    J´ai essayé de trouver la réponse à mon problème mais sans succès :-(

    J´ai donc une requete, nommée GMK/P/M (correspondant à des couts/projet/mois)

    Les informations présentes dans ma requete sont :
    Nom du projet
    Numero du mois
    Cout (par mois)

    Je cherche à créer une dernière colonne qui ferait pour chaque ligne i la somme des couts depuis le debut du projet (donc depuis la première ligne)
    jusqua la ligne i

    J´ai essayé d´écrire une petite fonction avec VBA. Mon problème est que je n´arrive pas a lui donner le numero du mois de la ligne jusqu´à laquelle il faut calculer la somme.

    Voila ce que jai ecrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function Gesamtkosten() As Long
     
    Dim i As Integer
     
    Gesamtkosten = DSum("[SommeDeSummevonGesamtpreis]", "GMK/P/M", "[DatumNummer] <= i")
     
    End Function
    Ce qu´il manque: bien definir le i
    Je voudrais donc lui dire que cest le DatumNummer de la ligne voulue

    J´espere que ma question est assez claire.

    Je vous remercie d´avance pour votre réponse


    PS: dsl pour les accents, je suis en Allemagne et le clavier est different! et dsl si les noms choisis sont bizarres mais tout est en allemand!

    Gesamtkosten = cout total
    SommeDeSummevonGesamtpreis = cout / mois
    DatumNummer = numero du mois

  2. #2
    Membre régulier Avatar de userB
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 147
    Points : 106
    Points
    106
    Par défaut
    Je suis pas un specialiste du coup j'essairai de faire une fonction ( si la taille de la requete est pas trop importante)

    Quelque chose du genre

    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
     
    rsMaReq.moveFirst
     
    While Not rsMaReq.EOF
    Id = rsMaReq("ID")
    Sum = Sum + rsMaReq("Somme")
     
    sReqUpdate = "UPDATE MaTable set MonChamps = "& Sum
    sReqUpdate = sReqUpdate & " WHERE Matable.Id = "&Id
     
    MaConnexion.execute sReqUpdate
     
    rsMaReq.moveNext
     
    Wend
    En esperant que ca puisse t'aider.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour la réponse!
    Cest hyper gentil!

    Je vais essayer.

    bonne apres midi


  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu ne nous dis pas si pour un mois donné il y a un seul cout si c'est le cas
    il est inutile de stocker l'information
    cette requête suffira
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT a.projet, a.mois, a.cout, 
    (select sum(cout) as tot  from matable where projet=a.projet and mois<=a.mois) 
    AS cumul
    FROM matable AS a
    ORDER BY a.projet, a.mois;

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour la deuxieme reponse.
    Oui jai plusieurs couts par mois: en fait les couts sont dus aux nombreux achats realises chaque mois ainsi qua tous les salaires...
    En plus jai trois types de couts differents. Jai donc fait 3 requetes qui me repertorient les differents couts et qui les classent par projet et par mois.(Pour les mois je leur donne des numeros, 1 etant le premier mois du projet.Parce que les projets durent deux ans.)

    Jai essayé ce que tu proposes random, mais jarrive pas parce que je voulais appeler ma requete a la place de ce que tu qs appelé ´matable´.Mais ca a pas lair de fonctionner. Est ce que ca peut marcher?
    Je suis desolée je ne suis pas une pro avec Access, japprend toute seule tous les jours pendant mon stage mais cest dur!!!

    Sinon jai essayé aussi decrire un programme en VBA avec ce que userB ma donné.Mais je galère parce que je connais tres mal le language VBa.

    Jai ecrit ca:
    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
    24
    25
    26
    27
    28
    29
    30
     
    Public Function Summe(ByRef rec As ADODB.Recordset, ByRef cnx As ADODB.Connection) As Long
     
    Dim cnx As ADODB.Connection
    Dim rec As ADODB.Recordset
     
    Set cnx = New ADODB.Connection
    Set rec = New ADODB.Recordset
     
    rec.Open "SELECT DatumNummer, SommeDeSummevonGesamtpreis FROM KostenKalkulation", cnx
     
    rec.MoveFirst
     
    While Not (rec.EOF)
     
        DatumNummer = rec.Fields("DatumNummer")
     
        Summe = Summe + rec.Fields("SommeDeSummevonGesamtpreis")
     
        sReqUpdate = "UPDATE KostenKalkulation set SommeDeSummevonGesamtpreis = " & Summe
        sReqUpdate = sReqUpdate & " WHERE KostenKalkulation.DatumNummer = " & DatumNummer
     
        cnx.Execute sReqUpdate
     
        rec.MoveNext
     
    Wend
    rec.Close
     
    End Function
    Peut etre quil y a plein de trucs faux mais jai personne pour me corriger!lol
    Ce qui me bloque maintenant cest ca :
    ByRef rec As ADODB.Recordset, ByRef cnx As ADODB.Connection

    Quest ce que je dois lui donner pour rec(RecordSet) et cnx(Connection)? Ce sont des emplacements ou sont stockées les données? Jai pas trop compris! dsl

    Merci pour toutes vos reponses et le temps que vous me donnez, et dsl si je suis pas au top!lol

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu disposes d'une clef dans ta table ?

    nb si tu n'arrives pas à faire fonctionner ma requête
    crée une table nommée matable
    avec les colonnes projet mois cout
    et fais tourner ma requête cela pourra t'inspirer

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui je viens de voir que si je le fais a partir dune table ca marche...bon je vais reflechir pour voir si je peux trouver une solution sans ecrire la table a la main!

    Merci encore!

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    En fait je viens d'essayer de nouveau. Finalement, ca marche très bien avec la requete! Il fallait juste renommer les champs avec des mots simples et pas de "SommeDeSomme..."

    Merci beacoup pour ton aide random!
    Finalement ca me rassure qu'on puisse ecrire quelque chose de simple en sql!
    Je suis hyper contente!

    Et Merci aussi UserB.Avec VBA, cest un peu plus compliqué...et je suis pas encoreau top..mais japprend!
    De toutes facon jai pas encore fini!lol

    Merci a tous

    A bientot

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/06/2011, 13h31
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 05/05/2008, 15h16
  4. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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