Totaux par ligne [Résolu]

Signaler
-
jeanlo678
Messages postés
1
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
21 mars 2020
-
Bonjour,

J'ai une table simple, chaque ligne correspond à une référence (1, 2, 3 ...), chaque colonne correspond aux nombre de ventes de cette référence par année (2017, 2018, 2019) et j'ai besoin de totaliser les ventes de chaque référence (dans l'exemple 2017 + 2018 + 2019).
J'arrive à créer (dans un formulaire ou une table) un camp "total" mais qui ne totalise réellement que les lignes si tous les champs sont remplis. Si un champ est vide, la case total le sera également ! Comment puis-je contourner ce problème ?
Merci pour votre aide et le temps consacré ...car je galère depuis une semaine déjà.

7 réponses

Messages postés
10114
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mars 2020
569
bonjour,
dans Access, on parle d'enregistrement et pas de ligne, de champ et pas de colonne.
tu as ce soucis, probablement parce que tu as choisi de ne pas mettre zéro comme valeur par défaut dans tes champs, et que tu les laisses vides.
je pense qu'il suffit d'utiliser la fonction nz() pour qu'un champ vide soit traité comme un zéro.
si tu souhaites un exemple, fournis-nous un exemple de ce que tu fais, d'une formule ou d'une requête dans laquelle tu fais le total.
Bonsoir yg_be, et merci pour cette réponse.

Comme je disais je suis débutant ...

Mon projet concerne la gestion d'une boutique.
J'ai (entre-autre) deux tables, "Big_Base" contient 400 enregistrements, les différents articles en vente (ou ayant été en vente) et "Ventes" les champs 2009 à 2019 comprenant les ventes par article par année.

Concrètement j'aurais besoin d'ajouter un champ "Vente" dans la table "Big_Base" qui cumule les ventes (2009 à 2019) pour chaque article.

Merci,
yg_be
Messages postés
10114
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mars 2020
569
la structure de ta table Ventes n'est pas optimale: il serait préférable d'y ajouter un champ annee, et de n'y avoir qu'un champ ventes, donc en supprimant les champs 2009 à 2019.
il est fortement déconseillé d'ajouter des champs calculés dans des tables. il est préférable d'utiliser des requêtes pour obtenir ces valeurs calculées.
difficile de te donner un exemple précis, comme tu ne partages pas les noms des champs des tables.
à tout hasard:
select  Big_Base.*, nz(Ventes.v2009,0) + nz(Ventes.v2019,0) 
from Big_Base left join Ventes on Big_Base.id = Ventes.article
Merci yg_be,
Pas de problème, je veux bien partager ... mais quoi ?
Comme je ne reçois pas le mail d’activation du compte je ne peux pas joindre de captures d’écran, alors je vais essayer comme ça.

Les tables « Big_Base » et « Ventes » contiennent le champ « Code » qui est la clé primaire des deux tables, ces deux champs sont liés par une relation de type « un à un ».

La table « Big_Base » contient d’autres champs, « Titre », « ISBN », « Fournisseur » etc. avec des informations relatives à chaque enregistrement.

Afin de ne pas la surcharger et pour une meilleure lisibilité, j’ai donc créé la table « Ventes » qui contient donc le champ « Code » (pour le lien avec la table « Big_Base ») et 11 autres champs nommés 2009, 2010 … jusqu’à 2019.

J’arrive à créer une requête (toute basique) qui contient Code, Titre, ISBN, 2009, 2010, jusque là tout va bien.

Ce que je n’arrive pas à faire c’est ajouter un champ qui totalise, pour chaque enregistrement, les ventes issues des champs 2009 à 2019.

Je peux supprimer sans problème le champ « Ventes » de la table « Big_Base » à partir du moment que je peux récupérer l’information par ailleurs.

Merci à toutes et à tous de votre aide.

P.S. Merci pour les deux lignes de code, mais où dois-je les copier ? (je débute avec Access)
yg_be
Messages postés
10114
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mars 2020
569
syntaxe adaptée suite aux informations que tu donnes:
select  Big_Base.*, nz(Ventes.2009,0) + nz(Ventes.2019,0) as Ventes
from Big_Base left join Ventes on Big_Base.Code = Ventes.Code ;

le plus simple serait sans doute que tu partages la source SQL de la requête (toute basique) que tu veux completer.
ou que tu y ajoutes
nz(Ventes.2009,0) + nz(Ventes.2019,0) as Ventes


par ailleurs, la structure de ta table Ventes n'est pas optimale: il serait préférable d'y ajouter un champ annee, et de n'y avoir qu'un champ ventes, donc en supprimant les champs 2009 à 2019.
Miracle j'ai trouvé (enfin la requête SQL) du coup je sais où placer le code

SELECT [Big Base].Code, [Big Base].[Titre - Objet], [Big Base].Statut, [Big Base].Catégorie, Ventes.[2009], Ventes.[2010], Ventes.[2011], [Big Base].[Vente totale]
FROM [Big Base] INNER JOIN Ventes ON [Big Base].Code = Ventes.Code;

Par contre je ne comprends pas la dernière partie de la réponse. Tous les ans je crée un champ (2019, 2018 ...) qui comporte les ventes de chaque article (ou vide si pas de vente).
Ensuite je crée un formulaire me permettant de voir, pour chaque article les ventes année par année (ça c'est bon) et le total cumulé de 2009 à 2019 (c'est ce que je n'arrive pas à faire)

Merci yg_be
yg_be
Messages postés
10114
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mars 2020
569
et ainsi?
SELECT [Big Base].Code, [Big Base].[Titre - Objet], [Big Base].Statut, 
[Big Base].Catégorie, 
nz(Ventes.[2009],0) + nz(Ventes.[2010],0) + nz(Ventes.[2011],0) as TotalVentes
FROM [Big Base] INNER JOIN Ventes ON [Big Base].Code = Ventes.Code;


ce que je suggère, c'est de structurer la table Ventes autrement, ainsi:
Code  Annee  Vente
001     2011     400
001     2019      200
002     2011      50
002     2020       300

cela devrait faciliter et simplifier le reste du travail.
Merci yg_be, ça marche dans une requête donc je devrais pouvoir l'adapter dans un formulaire.

Je comprends (enfin) ton raisonnement de la structure, effectivement, tu as raison, ça divise le nombre de données par 4 car les trois quarts de ma table "ventes" sont vides. A voir comment je peux récupérer mes données sans avoir à les ressaisir, mais ça c'est une autre histoire

Re Merci
yg_be
Messages postés
10114
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mars 2020
569
et en plus cela simplifiera les changements à faire chaque année.
Bonsoir à toutes et à tous,

J'ai réorganisé ma table "Ventes" avec les champs "Code" "Vente" et "Année" comme préconisé.

Du coup, quelle est la syntaxe pour récupérer mes totaux ?

Merci beaucoup,
yg_be
Messages postés
10114
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mars 2020
569
peut-être:
SELECT [Big Base].Code, [Big Base].[Titre - Objet], [Big Base].Statut, 
[Big Base].Catégorie, 
sum( Ventes.Vente ) as TotalVentes
FROM [Big Base] INNER JOIN Ventes ON [Big Base].Code = Ventes.Code
group by [Big Base].Code, [Big Base].[Titre - Objet], [Big Base].Statut, 
[Big Base].Catégorie
;
Messages postés
1
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
21 mars 2020

Tout fonctionne, merci yg_be