[VBA]Temps d'exécution d'une macro- Fonction ou pas

Bonjour le forum,

J'ai une question concernant le temps d'exécution d'une macro. J'aimerais savoir si en utilisant une fonction le temps d'exécution n'est pas plus long. En effet lors de l’exécution il y a des allers et retours dans la macro de la fonction. Ce qui ajoute a mon avis des lignes d'instruction et donc du temps. S'il est très très petit (le temps en plus), n'y a t'il pas un risque qu'il devienne plus grand avec des utilisations répétées de la fonction. Qu'en pensez-vous?

Merci d'avance pour votre avis.

Cdlt Elo7

Un exemple:

Sub Chrono_Makro1()
Dim a As Integer
Zeile = 11
Beginn = Timer

'*****************Cette partie est remplacée par la fonction dans la macro2***********************************
        Xn = 0
        For S = 2 To 25 Step 3
        If ThisWorkbook.Worksheets("Zeitstrahl").Cells(Zeile, S).Value = "X" Then
            Xn = Xn + 1
        End If
        Next S
'*****************************************************************************************************************************

        If Xn = 0 Then
            a = 1
        ElseIf Xn = 8 Then
            a = 2
        Else: a = 3
        End If

MsgBox Timer - Beginn
End Sub

ou

Sub Chrono_Makro2()
Dim a As Integer, Zeile As Long
Zeile = 11
Beginn = Timer

       If Xn(Zeile) = 0 Then 'Xn représente ici une fonction remplaçant la partie indiquée dans la macro1
            a = 1
        ElseIf Xn(Zeile) = 8 Then
            a = 2
        Else: a = 3
        End If

MsgBox Timer - Beginn
End Sub

Fonction :

Function Xn(Zeile As Long) As Integer
Dim Spalte As Integer
Xn = 0
    For Spalte = 2 To 23 Step 3
        If ThisWorkbook.Worksheets("Zeitstrahl").Cells(Zeile, Spalte).Value = "X" Then
            Xn = Xn + 1
        End If
    Next Spalte
End Function

Bonjour,

Pour un code identique, il n'y a aucune raison de penser que le temps d'exécution ne soit pas sensiblement le même selon que la procédure et Sub ou Function... Ce qui jouera, évidemment c'est la répétition de cette exécution... mais justement si on fait une fonction c'est pour répondre à un besoin de répétition auquel ne répond pas exactement une exécution lancée sur demande.

Si la fonction est utilisée en feuille de calcul, il faut prendre en considération les recalculs, et on peut faire en sorte que la fonction ne se recalcule pas à chaque recalcul si on est en calcul auto...

Utilisée en VBA exclusivement, elle ne sera appelée que par d'autres procédures Sub ou Function, aucun débordement donc, c'est une façon de modulariser qui donne de la souplesse au programme.

Cordialement.

Bonjour,

merci pour votre réponse M. Ferrand.

J'ai créé cette fonction en effet parce que je l'utilise dans plusieurs procédures et je ne voulais pas coller la boucle dans toutes ces procédures.

Pour être sur que je me suis bien expliquée:

Dans la macro 1 j'ai utilisé une boucle pour obtenir la valeur cherchée Xn que j'ai ensuite utilisée plusieurs fois dans la suite du code.

Comme deuxième variante j'ai mis la boucle dans une fonction nommée Xn(parametre) qui renvoie la valeur cherchée et j'ai par la suite utilisé cette fonction plusieurs fois dans la suite du code.

La différence entre les 2 variantes c'est que la boucle est lancée 1 seule fois dans la macro1 (sans fonction) et dans la macro2 (avec fonction), la boucle est lancée autant de fois que j'utilise la fonction.

Si je comprend bien il n'y a pratiquement pas de différence de temps même si j'appelle la fonction 1000 fois dans la macro (exécution de la boucle 1000 fois) tandis que sans fonction la boucle est exécutée une seule fois?

Je n'ai pas compris cette partie: (je suis inexpérimentée)

MFerrand a écrit :

Si la fonction est utilisée en feuille de calcul, il faut prendre en considération les recalculs, et on peut faire en sorte que la fonction ne se recalcule pas à chaque recalcul si on est en calcul auto...

Cdlt

Elo7

Je vois ce que tu veux dire ! Si tu l'appelles 3 fois elle est effectivement exécutée 3 fois !

Mais tu peux faire en sorte de ne l'appeler qu'une fois :

       a = Xn(Zeile)
       Select Case a
            Case 0: a = 1
            Case 8: a = 2
            Case Else: a = 3
       End Select

Cordialement.

Bonsoir MFerrand,

Malgré le grand retard, je tiens à vous remercier pour votre Astuce.

Cdlt

Elo7

Rechercher des sujets similaires à "vba temps execution macro fonction pas"