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 :

Simplification de formule


Sujet :

Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de solorac
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut Simplification de formule
    Bonjour la Communauté,

    J'ai un petit souci de formule. Je fais des recherches verticales et horizontales mensuelles pour plusieurs familles et sous-famille de produits avec un récap annuel.

    Le souci c'est que ma formule est devient trop longue au bout d'un trimestre, existerait-il un moyen de simplifier la formule que voici afin que je puisse faire les mois manquants.

    Voici la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SOMMEPROD(('04-2013'!$O$2:$O$1933=RECAP2T13!$B13)*(('04-2013'!$P$2:$P$1933=RECAP2T13!F$4)*('04-2013'!$Q$2:$Q$1933)))=0;0;SOMMEPROD(('04-2013'!$O$2:$O$1933=RECAP2T13!$B13)*(('04-2013'!$P$2:$P$1933=RECAP2T13!F$4)*('04-2013'!$Q$2:$Q$1933))))+SI(SOMMEPROD(('03-2013'!$O$2:$O$1782=RECAP2T13!$B13)*(('03-2013'!$P$2:$P$1782=RECAP2T13!F$4)*('03-2013'!$Q$2:$Q$1782)))=0;0;SOMMEPROD(('03-2013'!$O$2:$O$1782=RECAP2T13!$B13)*(('03-2013'!$P$2:$P$1782=RECAP2T13!F$4)*('03-2013'!$Q$2:$Q$1782))))+SI(SOMMEPROD(('05-2013'!$O$2:$O$1958=RECAP2T13!$B13)*(('05-2013'!$P$2:$P$1958=RECAP2T13!F$4)*('05-2013'!$Q$2:$Q$1958)))=0;0;SOMMEPROD(('05-2013'!$O$2:$O$1958=RECAP2T13!$B13)*(('05-2013'!$P$2:$P$1958=RECAP2T13!F$4)*('05-2013'!$Q$2:$Q$1958))))+SI(SOMMEPROD(('06-2013'!$O$2:$O$2004=RECAP2T13!$B13)*(('06-2013'!$P$2:$P$2004=RECAP2T13!F$4)*('06-2013'!$Q$2:$Q$2004)))=0;0;SOMMEPROD(('06-2013'!$O$2:$O$2004=RECAP2T13!$B13)*(('06-2013'!$P$2:$P$2004=RECAP2T13!F$4)*('06-2013'!$Q$2:$Q$2004))))
    Merci pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Sans connaître la disposition et l'emplacement de tes données, pas moyen de te donner une réponse. Mets un classeur exemple en PJ, s'il te plait.

  3. #3
    Membre éclairé Avatar de solorac
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    Voici le fichier en question.

    En espérant que vous puissiez faire quelque chose.

    A bientôt
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par solorac Voir le message
    ... existerait-il un moyen de simplifier la formule que voici ...
    =
    SI(SOMMEPROD(('04-2013'!$O$2:$O$1933=RECAP2T13!$B13)*(('04-2013'!$P$2:$P$1933=RECAP2T13!F$4)*('04-2013'!$Q$2:$Q$1933)))=0;0;SOMMEPROD(('04-2013'!$O$2:$O$1933=RECAP2T13!$B13)*(('04-2013'!$P$2:$P$1933=RECAP2T13!F$4)*('04-2013'!$Q$2:$Q$1933))))
    +
    SI(SOMMEPROD(('03-2013'!$O$2:$O$1782=RECAP2T13!$B13)*(('03-2013'!$P$2:$P$1782=RECAP2T13!F$4)*('03-2013'!$Q$2:$Q$1782)))=0;0;SOMMEPROD(('03-2013'!$O$2:$O$1782=RECAP2T13!$B13)*(('03-2013'!$P$2:$P$1782=RECAP2T13!F$4)*('03-2013'!$Q$2:$Q$1782))))
    +
    SI(SOMMEPROD(('05-2013'!$O$2:$O$1958=RECAP2T13!$B13)*(('05-2013'!$P$2:$P$1958=RECAP2T13!F$4)*('05-2013'!$Q$2:$Q$1958)))=0;0;SOMMEPROD(('05-2013'!$O$2:$O$1958=RECAP2T13!$B13)*(('05-2013'!$P$2:$P$1958=RECAP2T13!F$4)*('05-2013'!$Q$2:$Q$1958))))
    +
    SI(SOMMEPROD(('06-2013'!$O$2:$O$2004=RECAP2T13!$B13)*(('06-2013'!$P$2:$P$2004=RECAP2T13!F$4)*('06-2013'!$Q$2:$Q$2004)))=0;0;SOMMEPROD(('06-2013'!$O$2:$O$2004=RECAP2T13!$B13)*(('06-2013'!$P$2:$P$2004=RECAP2T13!F$4)*('06-2013'!$Q$2:$Q$2004))))[/CODE]
    Si les feuilles notées 04-2013, 05-2013… contiennent des données (quantités ? valeurs ?...) pour les mois d’avril, mai 2013 …, ton début de formule pourrait se schématiser,
    je pense, sous la forme d’une somme de 4 termes, chacun d’eux correspondant à un calcul mensuel et faisant intervenir d’une part la fonction logique SI, d’autre part la fonction SommeProd :
    = Si( SommeProd-avril = 0 ; 0 ; SommeProd-avril ) + Si( SommeProd-Mars = 0 ; 0 ; SommeProd-Mars ) + SI( SommeProd-Mai = 0 ; 0 ; SommeProd-Mai )+ SI( SommeProd-Juin = 0 ; 0 ; SommeProd-Juin )
    Pour le premier terme, tu calcules cette somme de produits sur la feuille avril et :
    - si le résultat n’est pas nul, tu le prends comme terme de la somme finale
    - si le résultat est nul, tu mets 0 comme terme de la somme finale
    mais dans les deux cas, cela revient à prendre le résultat donné par la somme de produits.
    Dans ce cas, la fonction SI me semble inutile et la formule peut, d’après moi, se simplifier sans problème sous la forme :
    = SommeProd-avril + SommeProd-Mars + SommeProd-Mai + SommeProd-Juin.
    Ce qui donne déjà quelque chose de plus facile à écrire et à compléter pour la totalité de 2013.
    D’autre part, les feuilles mensuelles ont la même structure mais n’ont pas le même nombre de lignes de données (lignes 2 : 1933 en avril ,
    Lignes 2 : 1782 en mars, …). S’il n’y a pas de lignes calculées en bas des feuilles, tu peux alors sans risque majorer le nombre de lignes pour qu’il y ait une même plage à écrire pour tous les mois.
    Cela permettrait de réfléchir en dernier ressort à une formule matricielle qui « travaillerait en 3D ».
    Edit : J'avais envoyé ma réponse sans voir l'envoi du fichier
    Cordialement
    Claude

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Par formule même si tu la réduis tu arriveras à saturation au bout d'un moment...

    Par macro tu peux y aller!

    Elle marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub remplissage()
    Dim sh As Worksheet
    Dim i As Integer, j As Integer
    Dim k As Long
    Application.ScreenUpdating = False
    Feuil7.Range("D6:BX9").ClearContents
     
    For i = 6 To 9 'pour tes clients A B C et D
        For j = 4 To 76 'pour tes produits
            For Each sh In ThisWorkbook.Sheets 'pour tous les classeurs dans le workbook
                If sh.Name Like "##-####" Then 'si ils sont de la forme ##-#### avec # un chiffre
                    For k = 2 To sh.Range("A" & Rows.Count).End(xlUp).Row 'pour chaque ligne de cette feuille
                        If sh.Cells(k, 1) = Feuil5.Cells(i, 2) And sh.Cells(k, 2) = Feuil5.Cells(4, j) Then 'Si le client et les departements correspondent
                            Feuil7.Cells(i, j) = Feuil7.Cells(i, j) + sh.Cells(k, 3) 'sommer
                        End If
                    Next k
                End If
            Next sh
        Next j
    Next i
     
    'Remplit de 0 les cases vides
     
    For i = 6 To 9
        For j = 4 To 76
            If Feuil7.Cells(i, j) = "" Then
                Feuil7.Cells(i, j) = 0
            End If
        Next j
    Next i
     
    Application.ScreenUpdating = True
    End Sub

    Il faudra que tu crées une feuille dans ton fichier exemple avant de la lancer puisque je ne voulais pas écrire sur tes données.

    N'hésite pas si problème

    Ci joint le classeur avec le bouton dans nouveau recap qui va lancer la macro
    Fichiers attachés Fichiers attachés

  6. #6
    Membre éclairé Avatar de solorac
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    Bonjour,

    Merci à tous les deux pour votre contribution.
    Je vais essayer les deux.
    Sachant que je ne suis pas très "à l'aise" avec le VBA.
    Mais je vais essayer.

    A bientôt

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    L'avantage de ce genre de macro est que tu ne dois pas te tapper l'écriture des formules tous les mois... ce qui deviendra vite hyper chiant..

  8. #8
    Membre chevronné
    Homme Profil pro
    Ctrl Gestion
    Inscrit en
    Octobre 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ctrl Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 179
    Par défaut
    Bonjour Solorac, Le Forum,

    En adaptant les données différement, j'arrive à ce résultat qui permet d'avoir le cumul par trimestre (selon la forme fournie) mais aussi les données par mois.
    Et la formule est plus simple mais nécessite un changement de présentation des données d'entrée (cf feuille Data)

    Slts
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2007] Simplification de formule et gain de RAM
    Par garulf0 dans le forum Excel
    Réponses: 4
    Dernier message: 26/06/2014, 16h01
  2. [XL-2010] simplification de formule
    Par elsabio dans le forum Excel
    Réponses: 2
    Dernier message: 26/01/2013, 08h48
  3. [Débutant] simplification de formule
    Par biboulou dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/02/2012, 21h04
  4. [XL-2003] aide simplification de formule
    Par redstoff dans le forum Excel
    Réponses: 1
    Dernier message: 29/10/2010, 16h43
  5. Simplification de formule
    Par S l i d e dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 05/11/2007, 21h25

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