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

Macros et VBA Excel Discussion :

SumIF, indirect performance issue [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut SumIF, indirect performance issue
    Hello

    For a budget tool, I have 2 sheets: one to input data (CPB90) and the second one to report data (liquidity plan) that sums input data per account / month with SUM.IF and using Indirect : +SOMME.SI(INDIRECT("'" & $E$3 & "'!$A11:$BQ800");$D17;INDIRECT("'" & $E$3 & "'!F11:F800")).

    This formula is needed for a high number of cells in Liquidity Plan sheet (152 rows x 14 columns) creating performance issues : 6 sec at every change in CPB90.

    I read a few discussions but cannot find a way to reduce significantly this (to be instantaneous "1 sec" so that users doesn't have to wait).

    Any idea?

    Enclosed the Excel fileClasseur1.zip

  2. #2
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    hello,
    You're on a francopphone forum.
    Please make the effort to post in French so that members can understand you.

  3. #3
    Membre régulier
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut
    Bonjour

    Pour cet outil budget, j ai 2 feuilles Excel: l une pour saisir des donnees (CPB90), la seconde pour le reporting (liquidity plan) , qui somme les donnees saisies par compte et mois avec SOMMEIF et INDIRECT (car je peux avoir plusieurs feuilles de saisie et le nom de chacune me sert dans la feuille liquidity plan a rechercher les montants). +SOMME.SI(INDIRECT("'" & $E$3 & "'!$A11:$BQ800");$D17;INDIRECT("'" & $E$3 & "'!F11:F800")).
    Cette formule est utilisee pour un grand nombre de cellules (152 lignes , 14 colonnes), ce qui cree un pbl de performance (6 sec calculation pour chaque changement). Je voudrais eviter le set up vba (calcmanual), peut etre avez vous une solution pour reduire le temps de traitement afin d etre proche d 1 seconde pour que l utilisateur ne doive pas attendre autant)?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    Bonjour,

    Tu peux essayer la fonction personnalisée suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Somme_si_feuille(Feuille As String, Plage_critere As Range, Critere As Range, Plage_somme As Range)
    Somme_si_feuille = WorksheetFunction.SumIf(Sheets(Feuille).Range(Plage_critere.Address), Critere, Sheets(Feuille).Range(Plage_somme.Address))
    End Function
    Ensuite, utilise la comme une somme.si, sauf qu'en premier argument tu auras la feuille sur laquelle se basent les plages somme et critere


    Ex : =somme_si_feuille("Feuil2";Feuil2!A3:A9;A3;Feuil2!B3:B9)
    Poulpe

  5. #5
    Membre régulier
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Par défaut
    Merci pour ta réponse mais ce que je cherche à faire, c'est quand je suis dans la feuille "liquidity plan" d'aller recherche dans la feuille CPB90 tous les enregistrements correspondant au critère $E$3 (de la feuille "liquidity plan") en sommant des colonnes de la feuille CPB90 (mois de l'année).

    Par ailleurs le temps de réponse est toujours élevé (6-8 sec) lorsque je fais F9 (recalculate).

    Ci-joint la feuille Excel (la précédente n'était pas la bonne).
    Fichiers attachés Fichiers attachés

  6. #6
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    Plusieurs secondes pour sommer quelques centaines de cellules est certainement du à un problème de conception.
    Le problème est dans la volatilité de la même fonctions utilisée dans toutes les cellules qui seront toutes recalculées même quand leurs dépendances ne sont pas affectées.
    Essaies de contourner en essayant d'obtenir la valeur renvoyée par la fonction INDIRECT dans une unique cellule pointée par les autres de la feuille.
    Il y a certainement des solutions plus légères.
    J'aurais aimé aidé mieux. Si tu tentes de nous poster les formules et les indications utiles, pour m'épargner cette pénible peine de devoir télécharger ton fichier exemple.

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

Discussions similaires

  1. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/11/2003, 15h39
  2. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18
  3. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37
  4. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41

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