Macro de plus en plus lente à force de l'exécuter

Bonjour,

J'ai un soucis de lenteur d’exécution de macro à force de l’exécuter. D'abord 23 secondes ensuite 35 puis 55...

J'imagine que c'est un soucis au niveau des variables ou un truc du genre.

Ma question:

Comment mettre toutes les variables à zéro lors de l'exécution d'une macro ?

Pour info je n'ai aucun soucis sur le faite que cela soit fait de manière radicale hormis fermer et ré-ouvrir le fichier.

Merci d'avance.

Harissa23

Bonsoir Harissa,

A+

Bonsoir Curulis57,

Mais désolé je ne peux pas envoyer le fichier. Je comprends tout à fait le principe de l'envoie d'un exemple ou du fichier mais dans mon cas c'est impossible.

J'envoie la macro mais je doute que cela soit utile.

Sub MISE_A_JOUR()
Dim TPS As Double
Dim k As Integer
Dim TQTE As Double
Dim derlig As Integer
Dim monTab() As String
Dim ASPLITER As String

'DEBUT
Application.ScreenUpdating = False
TPS = Time
Sheets("Descriptif").Cells(2, 2).Value = Date

'Remplacement de la feuille "Descriptif" par "Base Descriptif"
Application.DisplayAlerts = False
    Sheets("Base Descriptif").Select
    Sheets("Base Descriptif").Copy Before:=Sheets("Descriptif")
    Sheets("Base Descriptif (2)").Select
    Sheets("Base Descriptif (2)").Name = "Descriptif Bis"
    Sheets("Descriptif").Delete
    Sheets("Descriptif Bis").Name = "Descriptif"
Application.DisplayAlerts = True

'parcours de tout les ongets
l = 3
While Sheets("BASE GENERALE").Cells(l, 6).Value <> "BARRE DES ONGLETS"
onglet = Sheets("BASE GENERALE").Cells(l, 6).Value

'If onglet = "BASE OPTION" Then
'l = l
'End If

If Sheets("BASE GENERALE").Cells(l, 12).Value <> "" Then

'Injection onglet
If Sheets(onglet).Range("J2").Value > 0 Then
TQTE = 0

k = 5
While Sheets(onglet).Cells(k, 2).Value <> "FIN" And TQTE <> Sheets(onglet).Range("J2").Value

If Sheets(onglet).Cells(k, 8).Value <> "0" And Sheets(onglet).Cells(k, 8).Value <> "" Then

' SEPARATION DES ELEMENTS DE LA CASE DESCRIPTIF COMMERCIAL

    ASPLITER = Sheets(onglet).Cells(k, 17).Value
    If Sheets(onglet).Cells(k, 8).Value <> "-" Then TQTE = TQTE + Sheets(onglet).Cells(k, 8).Value

    monTab = Split(ASPLITER, ";")

    'RECHERCHE DE L'ENDROIT OU ECRIRE
        ld = 14
        While Sheets("Descriptif").Cells(ld, 3).Value <> Sheets("BASE GENERALE").Cells(l, 12).Value And Sheets("Descriptif").Cells(ld, 3).Value <> "Chantier"
        ld = ld + 1
        Wend
        ld = ld + 1 'necessaire pour faire la prochaine recherche sinon cela s'arrete sur le titre
        While Sheets("Descriptif").Cells(ld, 5).Value <> ""
        ld = ld + 1
        Wend
        ldm = ld

        For Each C In monTab()

        Sheets("Descriptif").Rows(ld).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                Range("B" & ld).Select

                    Range("C" & ld).Select
                    Selection.Font.Bold = False

            If ld = ldm Then
            Sheets("Descriptif").Cells(ld, 2).Value = Sheets(onglet).Cells(k, 1).Value
            Sheets("Descriptif").Cells(ld, 13).Value = Sheets(onglet).Cells(k, 6).Value
            If onglet = "BASE OPTION" Then
            Sheets("Descriptif").Cells(ld, 6).Value = Sheets(onglet).Cells(k, 18).Value * Sheets(onglet).Cells(k, 16).Value
            Sheets("Descriptif").Cells(ld, 6).NumberFormat = "#,##0.00 $"
            End If
            Sheets("Descriptif").Cells(ld, 3).Value = Sheets(onglet).Cells(k, 8).Value
            Sheets("Descriptif").Cells(ld, 4).Value = Sheets(onglet).Cells(k, 9).Value
            Sheets("Descriptif").Cells(ld, 5).Value = C

            Else
            Sheets("Descriptif").Cells(ld, 5).Value = C
            End If

        ld = ld + 1
        Next C
End If
k = k + 1
Wend
End If
End If

l = l + 1

Wend
ActiveSheet.Range("M4").Value = Time - TPS
Application.ScreenUpdating = True

End Sub

Cordialement

Salut Harissa,

tu serais quand même gentille de nous expliquer précisément ce que fabrique cette macro?!

On veut bien t'aider mais pas passer 100 ans à déchiffrer d'abord son déroulement!

A+

Désolé c'est un peu également mon autre soucis...j'en suis pas à l'origine et j'ai pas encore compris comment cela fonctionne.

En gros c'est une feuille "descriptif" qui est alimenté par d'autres feuilles. Si dans les autres feuilles il y a une valeur en "colonne 8" différente de "RIEN" cela alimente la feuille "descriptif".

C'est pas forcément claire, désolé.

Je ne remet pas en cause la macro, c'est pourquoi je n'ai pas envoyé de fichier ni décris plus le fonctionnent.

Je cherche juste une solution pour qu'en gros lorsque je lance la macro c'est comme si je venais d'ouvrir le fichier. Remettre à zéro les variable le cache ou je ne sais quoi.

Cordialement.

Bonjour Harissa23, curulis57

Donc si je résume la situation...

Harissa23 a écrit :

Bonjour,J'ai un soucis

curulis57 a écrit :

Bonsoir Harissa,

Harissa23 a écrit :

Bonsoir Curulis57,Mais désolé je ne peux pas envoyer le fichier. Je comprends tout à fait le principe de l'envoie d'un exemple ou du fichier mais dans mon cas c'est impossible.J'envoie la macro mais je doute que cela soit utile.

curulis57 a écrit :

Salut Harissa,tu serais quand même gentille de nous expliquer précisément ce que fabrique cette macro?!On veut bien t'aider mais pas passer 100 ans à déchiffrer d'abord son déroulement!

Harissa23 a écrit :

Désolé c'est un peu également mon autre soucis...j'en suis pas à l'origine et j'ai pas encore compris comment cela fonctionne.

En conclusion et selon les hypothèses suivantes :

  1. nous ne sommes pas nous non plus à l'origine du fichier
  2. nous n'avons pas plus les moyens que toi de comprendre ce que fait quelque chose que nous ne connaissons pas lus que toi
  3. sans PJ nous ne pouvons même pas tenter d'exécuter la macro-cmde pas à pas pour tenter de la déchiffrer

Qu'est-ce que tu as attends réellement de notre part ?

Nous sommes des passionnés d'Excel, pas des voyants !

Bien qu'étant un noob niveau macro, je ne suis pas noob sur le forum ou du moins sur les forums en général.

Je suis le premier a demander aux novices plus d'explication voir un simple fichier dans le but qu'il est un retour positif et rapide. Tout en précisant que je risque de ne pas avoir la réponse

D'ailleurs en général c'est ma seul contribution utile

Désolé c'est pas mon style de poser une question dans le vide, mais je cherche une solution qui fait le vide justement !

Bref,

Ma question :

Quel qu’en soit le fichier et ses macros, quel sont les raisons "possibles" d'une lenteur d’exécution d'une macro a force de l'exécuter ?

Pour moi c'est une histoire au niveau des variables, du cache d'Excel voir la faute à Bill !

Comment on réinitialise l'ensemble des variables ? Comme à l'ouverture du fichier. Pour résumer.

Cordialement.

Salut Harissa, Andréa,

perso, dans cette macro, je ne vois pas une variable qui, même non déclarée, pourrait à ce point ralentir son déroulement et même si certaines instructions pouvaient certainement êtres optimisées ou zappées, sans un fichier, difficile de recréer les conditions réelles d'utilisation.

Peut-être faut-il regarder en amont, si, par exemple, dans la feuille 'DESCRIPTIF', un traitement des données via un événement 'Change' ne viendrait pas "polluer" l'affaire : plus les données s'amoncellent, plus le temps de traitement s'allonge...

Mais cela restera une théorie dans mon chef!

Bonne recherche!

A+

Bonjour Harissa23

En général je suis patient, mais tu as l'air de savoir d'où vient l'erreur...

Harissa23 a écrit :

Pour moi c'est une histoire au niveau des variables, du cache d'Excel voir la faute à Bill !

demande donc à Bill !

Maintenant pour répondre à

Harissa23 a écrit :

Comment on réinitialise l'ensemble des variables

si tu fais allusion à celles qui sont dans le code joint elles sont initialisées à chaque fois que la macro est exécutée, à la même valeur.

Le moyen le plus radical reste la suppression de la macro-cmde, et tu supprimes en même temps le problème.

Ne le prends pas mal, mais je ne sais toujours pas ce qui t'empêche de fournir le fichier en question...

par contre tu sais maintenant pourquoi je quitte le fil...

Pour te prouver que je ne suis ni fâché, ni rancunier regarde le post de "curulis57" qui écrivait en même temps que moi...

Bon courage !

Re,

Curulis57, merci je n'avais clairement pas pensé à ce genre d'hypothèse. J'y penserai à l'avenir mais c'est pas du tout le cas, les seuls événements "change" dans le fichier n'ont rien à voir.

Andrea73, désolé de ne pas avoir précisé mieux, une 40aine de feuilles, une 30aine de macro et des données sur les feuilles forcement que je ne peux donner à tous sur le net ( d’ailleurs pas besoin d'être logué sur excel-pratique pour les DL et même... )

Limite rien ne m'empêche de fournir un fichier épuré fortement, par contre je risque de devoir créer un autre fil Celui ou j'en ai trop supprimé que j'ai plus de problème et je cherche à le recréer...

J'ai rien mal pris, juste étais mal compris peut être.

Merci pour votre aide, je vous tiendrais au courant si j'arrive à (avoir) une solution.

Bonne soirée

A+

Bonjour,

parsème ton code de

t=timer
nTim=nTim+1
...
debug.print nTim;":  "&  timer - t

aux endroits cruciaux pour détecter la partie qui prend du temps, et si c'est une en particulier qui se rallonge.

eric

Bonjour et Merci Eriiic.

Je teste dès la nuit passé

Cordialement

Harissa23

Rechercher des sujets similaires à "macro lente force executer"