Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Insérer des sous-totaux

8 réponses
Avatar
Paul Géra
Bonjour,

J'ai une table qui est remplie avec des factures sous la forme : Date / N°
Facture / Montant

J'aimerai intégrer une ligne "SOUS-TOTAL" mensuel. Par exemple, après toutes
les factures d'aout 2008, j'insère une ligne faisant un sous total. Le
problème c'est que quand je fais une recherche, ça ne marche pas bien.

POUR i=1 A TableOccurrence(TABLE_FACTURES)
i++
SI i>1 ALORS
SI Gauche(COL_DateFacture[i-1],6)<>Gauche(COL_DateFacture[i],6) ALORS
TableAjoute(TABLE_FACTURES,i+1)
COL_LIBELLE[i+1]="TOTAL PERIODE DE "+DateVersMoisEnLettre(nMois)
...
FIN
FIN
FIN

Merci pour votre aide.

PG

8 réponses

Avatar
pmxk
Paul Géra a émis l'idée suivante :

Bonjour,

J'ai une table qui est remplie avec des factures sous la forme : Date / N°
Facture / Montant

J'aimerai intégrer une ligne "SOUS-TOTAL" mensuel. Par exemple, après toutes
les factures d'aout 2008, j'insère une ligne faisant un sous total. Le
problème c'est que quand je fais une recherche, ça ne marche pas bien.

POUR i=1 A TableOccurrence(TABLE_FACTURES)
i++
SI i>1 ALORS
SI Gauche(COL_DateFacture[i-1],6)<>Gauche(COL_DateFacture[i],6) ALORS
TableAjoute(TABLE_FACTURES,i+1)
COL_LIBELLE[i+1]="TOTAL PERIODE DE "+DateVersMoisEnLettre(nMois)
...
FIN
FIN
FIN

Merci pour votre aide.

PG


Tu dis "ça ne marche pas bien". :-?
Au niveau du code, tout a l'air normal ...
Finalement, quel est le problème ?? :/
A+
Avatar
Roumegou Eric
pmxk a pensé très fort :
Paul Géra a émis l'idée suivante :

Bonjour,

J'ai une table qui est remplie avec des factures sous la forme : Date / N°
Facture / Montant

J'aimerai intégrer une ligne "SOUS-TOTAL" mensuel. Par exemple, après
toutes
les factures d'aout 2008, j'insère une ligne faisant un sous total. Le
problème c'est que quand je fais une recherche, ça ne marche pas bien.

POUR i=1 A TableOccurrence(TABLE_FACTURES)
i++
SI i>1 ALORS
SI Gauche(COL_DateFacture[i-1],6)<>Gauche(COL_DateFacture[i],6) ALORS
TableAjoute(TABLE_FACTURES,i+1)
COL_LIBELLE[i+1]="TOTAL PERIODE DE "+DateVersMoisEnLettre(nMois)
...
FIN
FIN
FIN

Merci pour votre aide.

PG


Tu dis "ça ne marche pas bien". :-?
Au niveau du code, tout a l'air normal ...
Finalement, quel est le problème ?? :/
A+



Vite dit ... sans trop réflêchir
Ce ne serait pas parce que tu décales ton indice dans le tableau ?
Pourquoi le POUR i et le i ++ ? (double emploi)

Utilise un POUR TOUT

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Juanito
Paul Géra a formulé ce lundi :

Bonjour,

J'ai une table qui est remplie avec des factures sous la forme : Date / N°
Facture / Montant

J'aimerai intégrer une ligne "SOUS-TOTAL" mensuel. Par exemple, après toutes
les factures d'aout 2008, j'insère une ligne faisant un sous total. Le
problème c'est que quand je fais une recherche, ça ne marche pas bien.

POUR i=1 A TableOccurrence(TABLE_FACTURES)
i++
SI i>1 ALORS
SI Gauche(COL_DateFacture[i-1],6)<>Gauche(COL_DateFacture[i],6) ALORS
TableAjoute(TABLE_FACTURES,i+1)
COL_LIBELLE[i+1]="TOTAL PERIODE DE "+DateVersMoisEnLettre(nMois)
...
FIN
FIN
FIN

Merci pour votre aide.

PG



Bonjour,

Pour moi le TableAjoute() ajoute une ligne en fin de table, à moins que
la table ne soit triée. Donc la nouvelle ligne ne doit pas être en i+1
mais à la fin.

Plutôt faire un TableInsere() non ?

Par contre, insérer une ligne dans la table va faire décaler l'ordre
donc il faudra sauter une ligne.

Aussi, comme l'a dit Eric, il n'est pas souhaitable de faire un i++
dans la boucle "Pour ... A ... " car c'est déjà fait par cette boucle

Jean Cougnaud
Avatar
Pascal ROY
Juanito a écrit :
Paul Géra a formulé ce lundi :

Bonjour,

J'ai une table qui est remplie avec des factures sous la forme : Date
/ N°
Facture / Montant

J'aimerai intégrer une ligne "SOUS-TOTAL" mensuel. Par exemple, après
toutes
les factures d'aout 2008, j'insère une ligne faisant un sous total. Le
problème c'est que quand je fais une recherche, ça ne marche pas bien.

POUR i=1 A TableOccurrence(TABLE_FACTURES)
i++
SI i>1 ALORS
SI Gauche(COL_DateFacture[i-1],6)<>Gauche(COL_DateFacture[i],6) ALORS
TableAjoute(TABLE_FACTURES,i+1)
COL_LIBELLE[i+1]="TOTAL PERIODE DE "+DateVersMoisEnLettre(nMois)
...
FIN
FIN
FIN

Merci pour votre aide.

PG



Bonjour,

Pour moi le TableAjoute() ajoute une ligne en fin de table, à moins que
la table ne soit triée. Donc la nouvelle ligne ne doit pas être en i+1
mais à la fin.

Plutôt faire un TableInsere() non ?

Par contre, insérer une ligne dans la table va faire décaler l'ordre
donc il faudra sauter une ligne.

Aussi, comme l'a dit Eric, il n'est pas souhaitable de faire un i++ dans
la boucle "Pour ... A ... " car c'est déjà fait par cette boucle

Jean Cougnaud





Si la table n'est pas triée, tu peux utiliser TableInsere, je pense.

--
Pascal ROY
(Service Informatique - SODALEC)
Avatar
pmxk
Roumegou Eric a formulé ce jeudi :
pmxk a pensé très fort :
Paul Géra a émis l'idée suivante :

Bonjour,

J'ai une table qui est remplie avec des factures sous la forme : Date / N°
Facture / Montant

J'aimerai intégrer une ligne "SOUS-TOTAL" mensuel. Par exemple, après
toutes
les factures d'aout 2008, j'insère une ligne faisant un sous total. Le
problème c'est que quand je fais une recherche, ça ne marche pas bien.

POUR i=1 A TableOccurrence(TABLE_FACTURES)
i++
SI i>1 ALORS
SI Gauche(COL_DateFacture[i-1],6)<>Gauche(COL_DateFacture[i],6) ALORS
TableAjoute(TABLE_FACTURES,i+1)
COL_LIBELLE[i+1]="TOTAL PERIODE DE "+DateVersMoisEnLettre(nMois)
...
FIN
FIN
FIN

Merci pour votre aide.

PG


Tu dis "ça ne marche pas bien". :-?
Au niveau du code, tout a l'air normal ...
Finalement, quel est le problème ?? :/
A+



Vite dit ... sans trop réflêchir


euh ... si j'ai réfléchit :-)

Ce ne serait pas parce que tu décales ton indice dans le tableau ?


Tu es sûr, tu as bien réfléchit ?

Pourquoi le POUR i et le i ++ ? (double emploi)


Ben non, tu ne réfléchis pas.
Si il ne mettait pas le i++, son "COL_DateFacture[i-1]" planterait dès
le début.


Utilise un POUR TOUT


Gros naze :-)
Avatar
Roumegou Eric
pmxk a formulé la demande :

Vite dit ... sans trop réfléchir


euh ... si j'ai réfléchit :-)



je ne parle pas de toi. je parle de moi. Mais toi refléchis avant de
nous balancer des fautes pareilles !


Ce ne serait pas parce que tu décales ton indice dans le tableau ?


Tu es sûr, tu as bien réfléchit ?



tu ne sais décidément pas lire ...


Pourquoi le POUR i et le i ++ ? (double emploi)


Ben non, tu ne réfléchis pas.
Si il ne mettait pas le i++, son "COL_DateFacture[i-1]" planterait dès le
début.



Il est préférable d'utiliser une valeur pour sauvegarder la rupture, et
pas de jouer avec les indices.


Utilise un POUR TOUT


Gros naze :-)



pff!! lourd ce mec !
on se fait insulter maintenant.

Je pense que cela doit être possible avec un POUR TOUTE LIGNE DE TABLE2
mais je ne sais pas comment augmenter l'indice.

Voilà une solution testée.

imax est un entier
MNTL1 est un entier=0
savDateMois est une chaîne
i est un entier
imax=Table2..Occurrence
savDateMoisÚteVersChaîne(Table2.DateF[1],"AAAAMM") //1ere valeur
POUR i=1 A imax
SI DateVersChaîne(Table2.DateF[i],"AAAAMM")<>savDateMois ALORS
// je suis en rupture
TableInsèreLigne(Table2,i,"Total "+savDateMois,"",MNTL1)
i++;imax++
MNTL1=0
FIN
// je cumule mes valeurs ds les valeurs de sommes
MNTL1+=Table2.Montant[i]
savDateMoisÚteVersChaîne(DateF[i],"AAAAMM")
FIN // POUR TOUTE LIGNE DE TABLE_FACTURE
// Traitement dernière rupture
TableInsèreLigne(Table2,Table2..Occurrence+1,"Total
"+savDateMois,"",MNTL1)

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Moua
Roumegou Eric avait soumis l'idée :

Pourquoi le POUR i et le i ++ ? (double emploi)


Ben non, tu ne réfléchis pas.
Si il ne mettait pas le i++, son "COL_DateFacture[i-1]" planterait dès le
début.



Il est préférable d'utiliser une valeur pour sauvegarder la rupture, et pas
de jouer avec les indices.


Entièrement d'accord. Pour les problèmes de lisibilité du code, des
problèmes d'optimisation d'utilisation des pointeurs d'accés à la
mémoire, il est préfèrable d'utiliser les variables plutôt que de jouer
avec les indices, surtout pour gérer des ruptures. Utiliser un indice
dans un tableau, c'est utiliser un déplacement mémoire à partir d'une
position (Adresse mémoire de début de tableau plus déplacement donné
par l'indice), utiliser une variable c'est utiliser un pointeur
directement vers l'emplacement de cete variable.

Dans le même ordre d'idée, la variable indice utilisée doit être
manipulée par la fonction principale de la boucle, pas avec des
opérations changeant sa valeur. Dans ce cas, il faut utiliser une autre
variable pour les indices calculés à partir de la valeur donnée par la
fonction de boucle (et contrôler la valeur du nouvel indice par rapport
aux bornes du tableau).
Un point d'entrée, un point de sortie, déclaration et typage des
variables en début de procédure, unicité d'utilisation des variables,
sans oublier la normalisation de nomage des variables et fonctions.
Que de règles de bases permettant d'avoir du code esthétique !
Avatar
pmxk
Roumegou Eric avait prétendu :
pmxk a formulé la demande :

Vite dit ... sans trop réfléchir


euh ... si j'ai réfléchit :-)



je ne parle pas de toi. je parle de moi. Mais toi refléchis avant de nous
balancer des fautes pareilles !


Ce ne serait pas parce que tu décales ton indice dans le tableau ?


Tu es sûr, tu as bien réfléchit ?



tu ne sais décidément pas lire ...


Pourquoi le POUR i et le i ++ ? (double emploi)


Ben non, tu ne réfléchis pas.
Si il ne mettait pas le i++, son "COL_DateFacture[i-1]" planterait dès le
début.



Il est préférable d'utiliser une valeur pour sauvegarder la rupture, et pas
de jouer avec les indices.


Utilise un POUR TOUT


Gros naze :-)



pff!! lourd ce mec !
on se fait insulter maintenant.



Désolé Eric, c'est vrai que je m'emporte un peu vite, j'avais pris ça
pour moi.
Concernant le code, il y a plusieurs façons de faire et incrémenter
l'indice dans la boucle ne me dérange pas plus que ça. A chaque
itération, l'indice est incrémenté puis testé, je ne vois pas où est le
problème (à part que c'est un peu moche)
;-)
pmxk