[Résolu] Soustraction de lignes

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Répondre
Magicarpet
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 11 mai 2010 11:36

[Résolu] Soustraction de lignes

Message 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
Dernière modification par Magicarpet le 12 mai 2010 14:46, modifié 1 fois.
Open Office 3.2.1 - Windows XP Pro SP3
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Soustraction de lignes

Message 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
(13.15 Kio) Téléchargé 656 fois
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.
Dernière modification par jeanmimi le 11 mai 2010 14:14, modifié 2 fois.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Magicarpet
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 11 mai 2010 11:36

Re: Soustraction de lignes

Message 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:
Pièces jointes
Projet - maquette.odb
base projet
(187.04 Kio) Téléchargé 223 fois
Open Office 3.2.1 - Windows XP Pro SP3
Magicarpet
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 11 mai 2010 11:36

Re: Soustraction de lignes

Message 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.
Open Office 3.2.1 - Windows XP Pro SP3
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 17:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: Soustraction de lignes

Message 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+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: Soustraction de lignes

Message 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 :)
En haut la table de départ, puis la requête donnant "l'accumulation", puis celle donnant les cumuls "simples"
En haut la table de départ, puis la requête donnant "l'accumulation", puis celle donnant les cumuls "simples"
Capture-1.png (11.21 Kio) Consulté 6330 fois
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
Pièces jointes
CumulConsommation.odb
(5.63 Kio) Téléchargé 185 fois
Magicarpet
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 11 mai 2010 11:36

Re: Soustraction de lignes

Message par Magicarpet »

Merci!! C'est exactement ça! :D :bravo:

Juste une question; pourquoi la nécessité de faire 3 requêtes successives distinctes? :?:
Open Office 3.2.1 - Windows XP Pro SP3
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: Soustraction de lignes

Message 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
Magicarpet
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 11 mai 2010 11:36

Re: [Résolu] Soustraction de lignes

Message 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
Pièces jointes
CumulConsommation.odb
(20.53 Kio) Téléchargé 172 fois
Open Office 3.2.1 - Windows XP Pro SP3
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: [Résolu] Soustraction de lignes

Message 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
Magicarpet
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 11 mai 2010 11:36

Re: [Résolu] Soustraction de lignes

Message 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.
Open Office 3.2.1 - Windows XP Pro SP3
Répondre