Page 1 sur 1

[Résolu] Soustraction de lignes

Publié : 11 mai 2010 09:52
par Magicarpet
Bonjour,

Je voudrais savoir comment s'y prendre pour faire la soustraction de lignes dans une table, et stocker le résultat dans un autre champ?
Pour être plus précis, si j'ai par exemple ligne1,ligne2,ligne3... dans un champ A, je voudrais stocker le résultat de ligne2-ligne1, ligne3-ligne2, ligne4-ligne3... dans un autre champ B.

en fait, je vois très bien comment faire sous Excel ou Calc (tout simplement parce qu'on peut manipuler directement les cellules), mais là avec Base, je ne vois pas du tout.

Faut-il utiliser une macro ou une requête? :?:

Merci d'avance!
Le modérateur a écrit : :alerte: La balise [Base] est bien sûr inutile dans la section consacrée à Base
Les icônes mises à votre disposition ont une signification précise sur ce forum.
Veuillez consulter ce fil pour en savoir plus : http://user.services.openoffice.org/fr/ ... c3299.html

Re: Soustraction de lignes

Publié : 11 mai 2010 10:29
par jeanmimi
Bonjour,
J'utiliserai plutôt une requête. Voici un exemple de calculs possibles.
Édit : fichier avec soustraction
Base avec calcul dans requête.odb
Mais si ça ne correspond pas à ce que tu souhaites, le mieux est de joindre ta base en indiquant là où tu veux faire le soustractions.

Re: Soustraction de lignes

Publié : 11 mai 2010 12:13
par Magicarpet
Alors oui, cet exemple je l'ai déjà vu, et je l'ai déjà utilisé mais pour un autre truc.

Là, je pensais plutot à un calcul que ferait Base comme le ferait un tableur. Si on utilise une requête, serait-il possible de faire comme ceci; on fait une soustraction sur les cellules/valeurs du champA, le résultat est stocké dans les cellules d'un champB, via une fonction (que je ne sais pas) ?

Finalement, mon problème avec Base, c'est que dans le menu "Ebauche requete", je peux seulement utiliser les champs de la table, et pas les cellules. Du coup, je ne sais pas comment soustraire à chaque fois les données qui sont rentrées au fur et à mesure...


EDIT: je sais pas si c'était clair, mais je voudrais savoir comment faire une soustraction entre lignes d'un même champ, et non pas entre 2 champs différents :)

EDIT2: en pièce-jointe ma base. Je voudrais juste, dans la table "T_releve_compteur", faire la différence "1000-100", "2000-1000", et stocker le résultat dans un autre champ (consommation période par ex).

EDIT3: je me suis trompé de pièce-jointe ^^ voici la bonne! :mrgreen:

Re: Soustraction de lignes

Publié : 11 mai 2010 16:23
par Magicarpet
J'ai trouvé exactement mon problème, mais c'est sous Access;

http://www.developpez.net/forums/d25084 ... me-champs/

ils utilisent l'instruction Dlookup, du coup je ne sais toujours pas comment faire... :(
Le modérateur a écrit : :alerte: Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.

En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.

Re: Soustraction de lignes

Publié : 11 mai 2010 16:57
par Grenouille
Bonsoir,

Il y a une solution sur le forum anglais : http://user.services.openoffice.org/en/ ... 39&t=28387

C'est une macro. Donc si tu as des questions il te faudra poster au bon endroit (voir bandeau rouge en haut).

A+

Re: Soustraction de lignes

Publié : 12 mai 2010 12:32
par Pierre-Yves Samyn
Bonjour

Question intéressante qui change des cumuls "positifs" plusieurs fois réalisés ici... Donc, une solution sans macro et en français sur ce forum :)
Capture-1.png
Partant de la table T_releve_compteur affichée en haut, une seule requête permet d'obtenir "TousLesCumuls" :

Code : Tout sélectionner

SELECT "T_releve_compteur"."date" AS "Du" , "T_releve_compteur_1"."date" AS "Au", "T_releve_compteur"."index_compteur_gaz" AS "Ancien", "T_releve_compteur_1"."index_compteur_gaz" AS "Nouveau", "T_releve_compteur_1"."index_compteur_gaz" - "T_releve_compteur"."index_compteur_gaz" AS "Consommation"
FROM 
"T_releve_compteur", "T_releve_compteur" AS "T_releve_compteur_1" 
WHERE 
"T_releve_compteur"."date" < select top 1 max("T_releve_compteur_1"."date") as "max"  from "T_releve_compteur"
Pour obtenir les "derniers cumuls" (sans l'accumulation), je propose une solution en 3 requêtes successives :

DerniersCumuls1

Code : Tout sélectionner

SELECT "T_releve_compteur"."date" AS "Du" , "T_releve_compteur_1"."date" AS "Au", DATEDIFF('dd', "T_releve_compteur"."date", "T_releve_compteur_1"."date") AS "Jours", "T_releve_compteur"."index_compteur_gaz" AS "Ancien", "T_releve_compteur_1"."index_compteur_gaz" AS "Nouveau", "T_releve_compteur_1"."index_compteur_gaz" - "T_releve_compteur"."index_compteur_gaz" AS "Consommation"
FROM 
"T_releve_compteur", "T_releve_compteur" AS "T_releve_compteur_1" 
WHERE 
"T_releve_compteur"."date" < select top 1 max("T_releve_compteur_1"."date") as "max"  from "T_releve_compteur"
DerniersCumuls2

Code : Tout sélectionner

SELECT "Du", MIN( "Jours" ) AS "NbJours" FROM "DerniersCumuls1" AS "DerniersCumuls1" GROUP BY "Du"
DerniersCumuls3

Code : Tout sélectionner

SELECT "DerniersCumuls2"."Du", "DerniersCumuls1"."Au", "DerniersCumuls2"."NbJours", "DerniersCumuls1"."Ancien", "DerniersCumuls1"."Nouveau", "DerniersCumuls1"."Consommation" FROM "DerniersCumuls2" AS "DerniersCumuls2", "DerniersCumuls1" AS "DerniersCumuls1" WHERE "DerniersCumuls2"."NbJours" = "DerniersCumuls2"."NbJours" AND "DerniersCumuls1"."Du" = "DerniersCumuls2"."Du" AND "DerniersCumuls1"."Jours" = "DerniersCumuls2"."NbJours"
Nota : ces requêtes nécessitent l'exécution "directe" du SQL

Re: Soustraction de lignes

Publié : 12 mai 2010 12:44
par Magicarpet
Merci!! C'est exactement ça! :D :bravo:

Juste une question; pourquoi la nécessité de faire 3 requêtes successives distinctes? :?:

Re: Soustraction de lignes

Publié : 12 mai 2010 13:06
par Pierre-Yves Samyn
Magicarpet a écrit :Juste une question; pourquoi la nécessité de faire 3 requêtes successives distinctes? :?:
Parce qu'on se repose sur la jointure pour ne lister que les enregistrements répondant aux critères

Re: [Résolu] Soustraction de lignes

Publié : 12 mai 2010 13:52
par Magicarpet
Par contre, j'aurais une autre question;

tout marche très bien dans les calculs. Cependant j'ai voulu créer un formulaire à partir de la requête DerniersCumuls3 pour qu'on puisse faire des saisies. Et le problème c'est que toutes les valeurs sont figées; je ne peux pas les modifier et je ne peux pas faire de nouvel enregistrement! :? quelle est la raison?

J'ai déjà été confronté à ce même problème lors de ma création de base, mais je ne sais plus pourquoi yavait ce problème...

Si quelqu'un aurait une explication, il est le bienvenu! :D

Re: [Résolu] Soustraction de lignes

Publié : 12 mai 2010 14:01
par Pierre-Yves Samyn
Magicarpet a écrit :Par contre, j'aurais une autre question
Oui mais sur ce forum (prends le temps de relire la section A lire avant tout du forum (cf. ma signature) on demande de ne poser qu'une question par fil pour faciliter les recherches ultérieures.

De plus, cette question a déjà été traitée plusieurs fois. Entre autres : http://user.services.openoffice.org/fr/ ... le*#p58786

Re: [Résolu] Soustraction de lignes

Publié : 12 mai 2010 14:03
par Magicarpet
Désolé, j'ai pas fais gaffe et je suis allé trop vite... Je ferai attention la prochaine fois :)

Merci pour la réponse en tout cas.