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

Access Discussion :

Somme cumulée avec variables


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Somme cumulée avec variables
    Bonjour tout le monde,

    Je me présente, Arvis. C'est la première que je poste ici car je suis coincé avec un calcul. Je dois réaliser la somme cumulée sur 25 ans mais il y a des variables en plus. Je n'arrive pas à trouver le code dans la requête.

    Je pars de ce tableau Excel :


    A B C
    1 =5 =B1
    2 =B1*1,1*1,2 =C1*1,3+B2
    3 =B2*1,1*1,2 =C2*1,3+B3
    4 =B3*1,1*1,2 =C3*1,3+B4
    5 =B4*1,1*1,2 =C4*1,3+B5
    … … …


    j'ai réussi à calculer la première colonne B comme ceci:


    [Valeur de départ]*([1,1]*[1,2])^([ID]-1)

    mais pas la deuxième... A mon avis, je dois faire une boucle en VBA mais je ne suis pas habitué.


    Est-ce que quelqu'un peut m'aider s'il vous plaît ?

    Merci d'avance.

    Arvis.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Désolé je ne suis pas ton calcul alors je vais te faire une réponse générique pour Access.
    Contrairement à Excel, Access n'a pas la notion de ligne précédente ou suivante donc faire A2=A1+1 en Access s'avère pas mal plus compliqué.
    En Access, il faut faire la somme de tous les éléments que tu veux additionner et cela avec un critère de sélection.
    Ici un exemple de total à date :

    Date Qte Qte Total Qte
    2021-04-01 10 10
    2021-04-02 20 30
    2021-04-03 30 60

    Prenons la ligne 2021-04-03, et bien on n'a pas fait la somme du total précédent et de la quantité de la ligne (30 + 30). On fait la somme de toutes les quantités dont la date est inférieure ou égale à 2021-04-03 (10 + 20 + 30).

    Cela peut se coder comme ceci dans une requête basée sur MaTableDateQte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    To=DSum("Qte"; "MaTableDateQte"; "[DateQte]<=#" format([MaTableDateQte].[DateQte]; "aaaa-mm-jj") & "#")
    • Access va traduire DSum en français pour toi.
    • Le # est pour indiquer à Access qu'il va recevoir une date.
    • "[DateQte]<=#" format([MaTableDateQte].[DateQte]; "aaaa-mm-jj") & "#" indique à Access qu'il doit considérer tous les enregistrements (ligne) jusqu'à la date de l'enregistrement courant.
    • Le format([MaTableDateQte].[DateQte]; "aaaa-mm-jj") force Access à mettre la date dans l'ordre : année, mois, jour.
      Ce n'est pas indispensable mais j'ai appris avec l'expérience que cela évite à Access de confondre le mois et le jour pour les dates du type 01/02/2021 et donc de lire le 2 janvier au lieu du 1er février.
      Ce danger est particulièrement présent si tu travailles comme moi dans un environnement multilingue où les conventions pour les dates ne sont pas les même en Anglais (MM/JJ/AAAA) et Français (JJ/MM/AAAA).


    Attention si tu as beaucoup de données ce calcul peut prendre du temps ... dans ce cas là il faut s'orienter vers une table temporaire et du code VBA mais c'est une toute autre histoire.
    Autre gros défaut de cette solution c'est que cela te prend un critère de sélection et que parfois on n'en a pas.
    On peut parfois ajouter un champ Autonum (Numéo Auto) qui va attribuer un numéro croissant aux enregistrements mais il n'y a pas de réponse universelle à ce problème.

    Et en règle générale quand tu te dis qu'il va falloir faire une boucle, tu peux souvent résoudre le problème avec une requête ce qui est habituellement plus performant que de faire du code VBA.

    A+

  3. #3
    Candidat au Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour marot_r,

    et merci beaucoup d'avoir répondu si rapidement.

    Malheureusement, j'ai déjà essayé avec Dsum mais cela ne marche pas .

    Je ne vois pas d'autre solution que faire du VBA.

    a+

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Malheureusement, j'ai déjà essayé avec Dsum mais cela ne marche pas .
    ça ne marche pas comment ?
    1. Tu as un message d'erreur ? Si oui, lequel ?
    2. Tu n'as pas d'erreur mais pas le bon résultat ? Qu'attendais-tu ? Qu'as-tu eu ?
    3. Tu n'as pas de résultat du tout ?
    4. Autre chose ?


    Qu'as-tu mis dans ton DSum() ?

    A+

  5. #5
    Candidat au Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour marot_r,

    je n'ai jamais réussi à avoir le bon résultat (je ne sais plus te dire ce que j'avais écrit car j'ai abondonné dsum, la requête était trop lente), le soucis c'est que la formule dois reprendre le chiffre de l'autre colonne (valeur). J'ai une requête qui calcul ceci et je dois trouver la formule pour la colonne "Reajustement" :

    Nom : Capture.PNG
Affichages : 130
Taille : 9,7 Ko

    Merci pour ton aide

    a+

    Arvis.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut
    Bonsoir,

    Je pense en effet que tu dois utiliser du code VBA :

    Tu créés une fonction EvalReAjustement qui ouvre un recordset rs basé sur ta table. Utilise de préférence DAO pour ce type de fonction, et ensuite tu parcours ton recordset depuis le 1er ID, jusqu'à l'ID courant, et tu enchaines les calculs à chaque passage de boucle :

    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
    ...
    Do Until rs!ID > ID
            If v = 0 Then
                v = rs!Economie * (1.1 * 0.995) ^ (rs!ID - 1)
                EvalReAjustement = v
            Else
                v =rs!Economie * (1.1 * 0.995) ^ (rs!ID - 1)
                EvalReAjustement = (1.06 * EvalReAjustement) + v
            End If
            rs.MoveNext
            If rs.EOF Then
                Exit Do
            End If
        Loop
    ...
    Ensuite, une fois ta fonction écrite dans un module indépendant, tu l'appelles dans ta requête comme ceci :

    ReAjustement: EvalReAjustement([ID])

    le paramètre [ID] passe à la fonction la valeur de l'ID courant.

    Note que suivant le même principe, tu peux également mettre à jour une colonne supplémentaire de ta table avec une procédure.

    Cdlt,

  7. #7
    Candidat au Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour User,

    un grand merci pour ta réponse et désolé de ne répondre qu'aujourd'hui.

    Par contre je ne sais pas du tout ou je dois écrire le code et je ne connais rien au recordset...

    A vrai dire c'est un peu du chinois pour moi

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 394
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Comme je l'ai précisé il faut l'écrire dans un module indépendant, pour ensuite l'appeler dans une requête.

    Cdlt,

Discussions similaires

  1. [XL-2007] Somme cumulée avec réinitialisation
    Par dvdhag123 dans le forum Excel
    Réponses: 6
    Dernier message: 24/03/2016, 09h25
  2. [VxiR2] Somme cumulative avec réinitialisation
    Par munity dans le forum Deski
    Réponses: 5
    Dernier message: 08/11/2014, 21h42
  3. Somme Cumulative avec des Si Alors
    Par Ninaa07 dans le forum Débuter
    Réponses: 2
    Dernier message: 22/12/2011, 16h59
  4. SOMME.SI avec variables comme ligne
    Par novice06000 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/12/2011, 16h10
  5. Réponses: 8
    Dernier message: 23/02/2008, 09h49

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