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 :

Formules complexes ou fonctions personnelles ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut Formules complexes ou fonctions personnelles ?
    Bonjour,

    Je suis en train de développer une feuille de calcul dans laquelle je répète de nombreuses fois la même formule complexe, utilisant plusieurs fois la même référence, voire la même expression.
    Je me proposais donc de créer une fonction personnelle pour remplacer cette formule.
    Toutefois, je m'interroge : qu'est-ce qui est le plus efficace en terme de vitesse de calcul, une formule complexe ou l'appel à une fonction personnelle ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 175
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En principe une fonction personnalisée est plus lente qu'une fonction native d'excel mais il est dès fois plus intéressant et plus lisible de faire une fonction personnalisée à 5, 6 arguments plutôt qu'une multitudes de formules imbriquées.
    Il est également possible mais cela dépends des cas de créer une formule dans le gestionnaire des noms.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Excel utilise efficacement le Multitreading sur les fonctions native d'Excel jusqu'à hauteur de 1024 thread, donc ça dépendra fortement du nombre de coeurs que ton CPU possède.

    Egalement, la fonction perso doit calculer avec des tableaux si des plages de cellules sont spécifiées, sinon, la perte de performance entre Excel et le VBA peut dans certains cas être très très grande (genre 50X ou 100X).

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par Nouveau2 Voir le message
    Egalement, la fonction perso doit calculer avec des tableaux si des plages de cellules sont spécifiées, sinon, la perte de performance entre Excel et le VBA peut dans certains cas être très très grande (genre 50X ou 100X).
    Par exemple, j'ai une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function Retourne(Valeur As Variant, LstReference As Range, Optional LstRetour As Range) As Variant
        On Error GoTo Fin
        If IsEmpty(Valeur) Or Valeur = "" Then
            Retourne = ""
        ElseIf IsMissing(LstRetour) Then
            Retourne = Application.WorksheetFunction.Index(LstReference.Columns(LstReference.Columns.Count), Application.WorksheetFunction.Match(Valeur, LstReference.Columns(1), 0))
        Else
            Retourne = Application.WorksheetFunction.Index(LstRetour.Columns(1), Application.WorksheetFunction.Match(Valeur, LstReference.Columns(1), 0))
        End If
    Fin:
        Retourne = ""
    End Function
    Selon toi, la formule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(OU(ESTVIDE(A2);A2="");"";INDEX(B2:B16;EQUIV(A2;Reference!C5:C19;0)))
    sera beaucoup plus rapide que celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CHERCHEREF(A2;Reference!C5:C19;B2:B16)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    vu que ta fonction personnalisée utilise la fonction feuille d'excel, aucune chance qu'elle soit plus rapide.
    Par contre je ne vois pas bien la différence entre ESTVIDE(A2) et A2=""
    A moins que tu n'y ais une formule que tu supprimes parfois, A2="" devrait être suffisant.

    eric

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 175
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par eriiic Voir le message
    Bonjour,
    vu que ta fonction personnalisée utilise la fonction feuille d'excel, aucune chance qu'elle soit plus rapide.
    Par contre je ne vois pas bien la différence entre ESTVIDE(A2) et A2=""
    A moins que tu n'y ais une formule que tu supprimes parfois, A2="" devrait être suffisant.
    eric
    Il y a une grande différence
    Ecrit en A1
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(A3="Test";"Oui";"")
    en B1
    et en C1
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/08/2009, 09h53
  2. formule complexe table
    Par Maxence45 dans le forum Excel
    Réponses: 12
    Dernier message: 08/11/2007, 18h09
  3. Souci avec une formule par une fonction Selection.validation
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 02/08/2007, 22h45
  4. Formule matricielle et Fonction ligne()
    Par FredoMin dans le forum Excel
    Réponses: 1
    Dernier message: 28/06/2007, 11h14

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