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

Excel Discussion :

Sous-totaux automatiques dans une DPGF


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2012
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 66
    Points : 34
    Points
    34
    Par défaut Sous-totaux automatiques dans une DPGF
    Bonjour,
    Je construit actuellement des modèles de DPGF (Décomposition Globale et forfaitaire) pour mon entreprise.

    je suis arrivé comme un grand a mettre en forme automatiquement les cellules via les mises en formes conditionnelles en fonction des numéro de chapitre 1; 1,1; 1,1,1
    mais j'aimerais que les calculs des sous-totaux se fassent seules.

    je pense qu'il est possible de faire cela par une formule du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(A7="";D7*E7;SOMME.SI(A7:A150;"";F8:F150)
    le problème c'est que le 150 peux être variable c'est la dernière ligne du chapitre. je me suis servi du nombre de virgule contenu dans la colonne A pour faire la mise en forme, peut-être est-il possible de réutiliser cette info pour le sous-totale?

    merci pour vos réponses
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour

    Et pourquoi pas comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(A7="";D7*E7;SOMME.SI(A:A;"";F:F))
    Jérôme

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2012
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Bonjour,
    non ça marche pas car il fait la somme de toutes les ligne ayant pour repère """ de toute la feuille.
    ce que je veux c'est la somme de toutes les lignes ayant pour repère """ mais que jusqu'au repère de même niveau suivant.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Pourtant cela sort le meme résultat que ta formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(A7="";D7*E7;SOMME.SI(A7:A150;"";F7:F150)
    Jérôme

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2012
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Bonjour,
    oui je suis d'accord cela sort le même résultat. mais il sont faut tous les 2.
    le problème c'est qu'il faut que la formule trouve seule la fin de la zone à sommée.
    cette zone sera délimité
    - en partie haute par la ligne à la quelle la cellule est située (la ligne 20 ne va pas sommer les lignes 19 et moins)
    - en partie basse elle sera délimité par un nouveau chapitre du même ordre (le chapitre 1 se fini au chapitre 2) ou par un niveau superieur (le chapitre 1.1 se fini au chapitre 1.2 ou au chapitre 2)

    ce que je n'arrive pas a faire c'est a récupérer l'adresse du chapitre suivant.

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    La recherche des adresses pour borner un somme est très compliqué en formule (du moins pour mois).

    Pour ma part je gère cela soit en VBA soit en "trichant".
    Tu ajoutes une colonne A que tu masqueras après.
    Dans cette colonne tu reportes pour chaque ligne à sommer le code REP. (ex, des 1 sur les lignes 8 à 14)
    Il suffira ensuite d'utiliser la formule Somme.Si en utilisant la condition de la colonne A
    pour avoir la meme somme qu'en G15
    Et ainsi de suite
    Jérôme

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2012
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Après de nombreux essais je suis arrivé a sortir cette formule qui marche :
    =SI(A64="";D64*E64;
    SI(1+NBCAR($A64)-NBCAR(SUBSTITUE($A64;",";""))=1;SOMME.SI(A64:INDIRECT(CONCATENER("A";SIERREUR(MIN(EQUIV(1;G65:G206;0))+CELLULE("ligne";A64)-1;5500)));"";F64:INDIRECT(CONCATENER("F";SIERREUR(MIN(EQUIV(1;G65:G206;0))+CELLULE("ligne";A64)-1;5500))));
    SI(1+NBCAR($A64)-NBCAR(SUBSTITUE($A64;",";""))=2;SOMME.SI(A64:INDIRECT(CONCATENER("A";SIERREUR(MIN(EQUIV(1;G65:G206;0);EQUIV(2;G65:G206;0);EQUIV(1;G65:G206;0))+CELLULE("ligne";A64)-1;5500)));"";F64:INDIRECT(CONCATENER("F";SIERREUR(MIN(EQUIV(1;G65:G206;0);EQUIV(2;G65:G206;0);EQUIV(1;G65:G206;0))+CELLULE("ligne";A64)-1;5500))));
    SI(1+NBCAR($A64)-NBCAR(SUBSTITUE($A64;",";""))=3;SOMME.SI(A64:INDIRECT(CONCATENER("A";SIERREUR(MIN(EQUIV(3;G65:G206;0);EQUIV(2;G65:G206;0);EQUIV(1;G65:G206;0))+CELLULE("ligne";A64)-1;5500)));"";F64:INDIRECT(CONCATENER("F";SIERREUR(MIN(EQUIV(3;G65:G206;0);EQUIV(2;G65:G206;0);EQUIV(1;G65:G206;0))+CELLULE("ligne";A64)-1;5500))));0))))

    effectivement c'est trés (trés trés...) compliqué en plus j'ai du ajouter une colonne qui me calcule le niveau de titre de chaque ligne.

    bref déjà merci pour les réponses ça ma bien aidé !

    mais y reste un problème et pas des moindre si je rajoute une ligne il n'y a plus la formule sur la ligne et ça marche plus !
    y a t'il un moyen ou un autre de pouvoir lorsque qu'une ligne étirer la cellule du dessus ou du dessous ?

  8. #8
    Membre habitué
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 120
    Points : 175
    Points
    175
    Par défaut
    Salut,

    Tu vas vraiment utiliser cette formule ???
    Bonjour la maintenance du fichier.... j'espère que tu es en CDI

    Je pense que tu pourrais écrire une petite fonction en VBA qui te ferais ça de manière simple... et compréhensible !
    Ou alors utiliser une formule simple, ça coûte pas grand chose de l'ajuster au besoin et c'est dans les compétences de la plupart des gens qui utilisent Excel.


    Le mieux est l'ennemi du bien, ta formule en est une bonne illustration

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2012
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 66
    Points : 34
    Points
    34
    Par défaut
    Et attent tu as rien vue la formule final c'est :
    =SI(DPGF[[#Cette ligne];[REP]]="";DPGF[[#Cette ligne];[QTE]]*DPGF[[#Cette ligne];[Prix Unitaire € HT]];
    SI(1+NBCAR(DPGF[[#Cette ligne];[REP]])-NBCAR(SUBSTITUE(DPGF[[#Cette ligne];[REP]];",";""))=1;
    SOMME.SI(INDIRECT(CONCATENER("A";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1)):INDIRECT(CONCATENER("A";
    MIN(
    SIERREUR(EQUIV(1;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";DPGF[#Totaux])-1))
    +CELLULE("ligne";DPGF[[#Cette ligne];[REP]])-1);
    "";
    INDIRECT(CONCATENER("F";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1)):INDIRECT(CONCATENER("F";
    MIN(
    SIERREUR(EQUIV(1;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1))))
    +CELLULE("ligne";DPGF[[#Cette ligne];[REP]])-1)));

    SI(1+NBCAR(DPGF[[#Cette ligne];[REP]])-NBCAR(SUBSTITUE(DPGF[[#Cette ligne];[REP]];",";""))=2;
    SOMME.SI(INDIRECT(CONCATENER("A";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1)):INDIRECT(CONCATENER("A";
    MIN(
    SIERREUR(EQUIV(2;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";DPGF[#Totaux])-1);
    SIERREUR(EQUIV(1;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";DPGF[#Totaux])-1))
    +CELLULE("ligne";DPGF[[#Cette ligne];[REP]])-1);
    "";
    INDIRECT(CONCATENER("F";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1)):INDIRECT(CONCATENER("F";
    MIN(
    SIERREUR(EQUIV(2;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1)));
    SIERREUR(EQUIV(1;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1))))
    +CELLULE("ligne";DPGF[[#Cette ligne];[REP]])-1)));

    SI(1+NBCAR(DPGF[[#Cette ligne];[REP]])-NBCAR(SUBSTITUE(DPGF[[#Cette ligne];[REP]];",";""))=3;
    SOMME.SI(INDIRECT(CONCATENER("A";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1)):INDIRECT(CONCATENER("A";
    MIN(
    SIERREUR(EQUIV(3;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";DPGF[#Totaux])-1);
    SIERREUR(EQUIV(2;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";DPGF[#Totaux])-1);
    SIERREUR(EQUIV(1;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";DPGF[#Totaux])-1))
    +CELLULE("ligne";DPGF[[#Cette ligne];[REP]])-1);
    "";
    INDIRECT(CONCATENER("F";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1)):INDIRECT(CONCATENER("F";
    MIN(
    SIERREUR(EQUIV(3;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1)));
    SIERREUR(EQUIV(2;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1)));
    SIERREUR(EQUIV(1;INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[[#Cette ligne];[REP]])+1);1):INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1);0);CELLULE("ligne";INDIRECT(CONCATENER("G";CELLULE("ligne";DPGF[#Totaux])+1);1))))
    +CELLULE("ligne";DPGF[[#Cette ligne];[REP]])-1)));0))))

    je suis d'accord cette formule est bien trop compliqué ! mais je voulais allez au bout de ce problème.
    néamoins cette formule est plutot stable.
    en tout cas merci pour tes réponse.
    A bientot pour de nouvelles formules de fous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel] Récupération d'un filtre automatique dans une cellule
    Par billy123 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/03/2007, 15h32
  2. recherche automatique dans une table
    Par jesuisjosita dans le forum Access
    Réponses: 3
    Dernier message: 15/01/2007, 11h44
  3. Redirection automatique dans une Frame
    Par madislak dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/12/2006, 11h50
  4. [Tableaux] Liens automatiques dans une expression.
    Par Chloros dans le forum Langage
    Réponses: 4
    Dernier message: 02/10/2006, 14h58
  5. Insérer une ligne automatiquement dans une autre tab
    Par davyd dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/03/2005, 17h08

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