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 :

temps d'exécution d'une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut temps d'exécution d'une macro
    Bonjour à tous,

    J'utilise une macro VBA pour gérer un programme. Cette gestion est longue et peut prendre un certain temps (jusqu'à trois jours dans certains cas). Je sais que utiliser une macro dans ce cas n'est pas forcément la meilleure des solutions mais je n'ai trouvé que ça...
    Le problème c'est qu'au bout d'un certain temps d'exécution (je dirai une vingtaine d'heures à peu près), la macro semble ne plus fonctionner et une erreur (numéro 438) apparaît, alors qu'il n'y a aucun problème qui empêche le fonctionnement et du programme et de la macro...
    Ma question est la suivante : existe-t-il un temps maximum d'exécution d'une macro VBA?

    Amicalement

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    3 jours pour une macro sous Excel, ce n'est peut-être pas l'outil adéquat.

    Il faudrait nous en dire plus sur le traitement de cette macro et avec un exemple, car si tu utilises des choses de types Select ou autre, ton code pourrait être optimisé et le traitement améliorer dans des proportions non négligeables.

    Donc si tu veux des réponses, il faut un peu plus d'explications.

    Philippe

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut
    Merci pour ta réponse...
    Alors je vais essayer d'être concis et clair!
    J'utilise ma macro pour faire varier 3 paramètres :
    wcompo, Q et alpha.

    wcompo : 5 valeur : 0.003, 0.004, 0.006, 0.008 et 0.01
    Q : 6 valeur : 1, 2.8, 4.6, 6.4, 8.2 10
    alpha : 36 valeur : 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 24, 28, 32, 36, 40, 44, 48, 50, 60, 70, 80, 90, 100, 110, 120, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950 et 1000

    Pour chaque wcompo, je fais varier Q.
    Pour chaque Q, je fais varier alpha.
    Enfin, pour chaque alpha, j'utilise ma macro VBA pour piloter un programme extérieur. Le temps d'utilisation de ce programme ne peut pas être vraiment optimisé et il tourne entre 3 et 7 min...
    Si je résume, ça me fait 5*6*36*(3 à 7 min) ... environ 90h

    Du coup, je sais que VBA n'est pas forcément l'outil qu'il faut mais je n'ai pas trouvé mieux...

    Je vous mets les deux sub où je fixe les différents paramètres :
    première : je fixe wcompo
    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
    Sub choix_wcompo()
    Dim i As Integer
    Dim rep As Integer
     
        For i = 1 To 5
            If i = 1 Then
                wcompo = 0.003
            Else
                wcompo = i * 0.002
            End If
     
            Workbooks.Add
            ActiveWorkbook.SaveAs ("w=" & CStr(wcompo) & ".xls")
            Workbooks("deltaT+compo").Activate
     
            Call choix_Q_alpha 'j'appelle la sub qui fixe les valeurs de Q et alpha
            Call sauvegarde_classeur 'j'appelle une sub pour sauvegarder les données
     
        Next i
     
    End Sub
    deuxième sub : choix de Q et alpha. Je sais que cette sub n'est pas optimisée en temps mais elle prends très peu de temps comparée au programme principal
    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
    Sub choix_Q_alpha()
    Dim i As Integer, j As Integer
    Dim Qeau_min As Double, Qeau_max As Double
    Dim nombre_points_Q As Integer, nombre_points_alpha As Integer
    Dim rep As Integer
     
     
    Tini = 80
    Q_min = 1
    Q_max = 10
    nombre_points_Q = 5
    For i = 1 To nombre_points_Q + 1
          Q = Q_min + (i - 1) * ((Q_max - Q_min) / nombre_points_Q)
            For j = 1 To 36
     
                Select Case j
                    Case 1 To 20
                       alpha = 4 + j 'alpha = 5 * j 
                    Case 21 To 29
                        alpha = (j - 19) * 20 
                    Case 30 To 36
                        alpha = (j - 27) * 100 
                End Select
     
                Call simulation_module 'programme principal qui prend entre 3 et 7 min
                Call graphique 'programme de retraitement des données
     
            Next j
        Next i
    End Sub
    Je sais que le codage de ces deux sub est pas tip top...

    Par contre, si je connaissais la durée maximum d'exécution d'une macro, je mettrais en place un fractionnement de ma macro en fonction de ce temps maximum...

    Merci d'avance pour votre aide

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut

    au vu des noms des variables, je pencherai pour de la simulation d'un grand nombre de variables

    Concernant l'amélioration du code, je proposerai déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For j = 1 To 36
                Select Case j
                    Case 1 To 20
                       alpha = 4 + j 'alpha = 5 * j 
                    Case 21 To 29
                        alpha = (j - 19) * 20 
                    Case 30 To 36
                        alpha = (j - 27) * 100 
                End Select
                Call simulation_module 'programme principal qui prend entre 3 et 7 min
                Call graphique 'programme de retraitement des données
            Next j
    modifié en
    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
     
    For j = 1 To 20
          alpha = 4 + j 'alpha = 5 * j 
          Call simulation_module 'programme principal qui prend entre 3 et 7 min
          Call graphique 'programme de retraitement des données
    Next j
     
    For j = 21 to 29
          alpha = (j - 19) * 20 
          Call simulation_module 'programme principal qui prend entre 3 et 7 min
          Call graphique 'programme de retraitement des données
    Next j
     
    For j = 30 To 36
          alpha = (j - 27) * 100 
          Call simulation_module 'programme principal qui prend entre 3 et 7 min
          Call graphique 'programme de retraitement des données
    Next j
    reste que VBA ne semble clairement pas adéquat pour attendre autant de temps.

    Des solutions en VB.Net sont elles envisageables ? Tu pourrais lancer toutes les requetes et en traiter le résultat dès que celui ci serait connu par le programme appelé
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut
    Merci pour la modification, je vais la mettre en place de suite!

    Par contre, pour le codage en VB.net, je ne connais pas du tout. Je ne sais même pas à partir de quoi ça s'utilise, mais si tu penses que ça peut m'aider à résoudre mon problème, je vais m'y pencher dessus...
    J'utilisais VBA d'Excel, car ça me permettait de traiter directement les données de la campagne de simulation... Mais bon, je pensais pas devoir faire autant de simulations j'avoue...

    Merci pour ton aide

Discussions similaires

  1. [XL-2003] Temps d'exécution d'une macro
    Par Ui Dzui Ui dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/03/2012, 19h05
  2. [XL-2003] temps d'exécution d'une macro
    Par hantran dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/05/2010, 01h30
  3. [XL-2010] [DEBUTANT]Mesure temps d'exécution d'une macro et/ou d'une fonction
    Par KNIZOU dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/04/2010, 11h36
  4. temps d'excution d'une macro
    Par piero43 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 29/05/2008, 18h20
  5. Allongement d'uin temps d'exécution d'une macro
    Par avanrill dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2006, 19h29

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