Verification de l'erreur

Bonjour,

J'ai créeé une macro et sa prend beaucoup de temps pour s'executer, je souhaite utiliser le fonction Msg Box pour savoir ou sa bloque mais j'arrive pas à bien l'écrire .

voici ma macro en fait je veut verifier sur quel terme elle bloque...

For terme = 12 To 17

formule = "=" & Cells(8 + 43 * (vitesse - 1), 24 + terme - 1).Value & "*N" & (41 + 43 * (vitesse - 1)) & " ^ 6 + " & Cells(9 + 43 * (vitesse - 1), 24 + terme - 1).Value ... (ca continue)

End With

MsgBox ???

Next terme

Merci d'avance

2 réponses

  1. Bonjour,

    Si ça prend beaucoup de temps, c'est que ça ne bloque pas :-/
    Peut-être que ton code est à optimiser pour qu'il en prenne moins.
    => soit tu nous donnes tout le code, soit tu nous transmets le fichier via https://www.cjoint.com/

    A+
    1. Voici mon fichier de travail

      http://cjoint.com/13sp/CInjntgxlwP.htm

      alors j'explique le but final de ce fichier et de la macro c'est d'avoir la ligne des valeurs(ligne 39 pour vitesse 100% , ligne 39+43i pour le reste des vitess) pour un débit donné avec les coefficient en brut, la macro exécute parfaitement l'operation et cree une ligne en dessous ou les coefficient sont en brut et sa donne par exemple
      0,00106430206581446*N41 ^ 6 + -0,0162123797053831*N41 ^ 5 + 0,0893517601820511*N41 ^ 4 ...

      J'ai deux probleme pour l'instant :

      * Le premier ca prend beaucoup de temps pour s'executer
      * Le deuxieme c'est que dans la formule en brut que j'obtient je dois la copier dans un autre fichier exploitable sauf que le terme de la cellule N41 ou autre pour une autre cellule change quand je copie colle les infos que je veut...

      merci A+
      1. Je me souviens maintenant, avec les coefficients et les valeurs, tout ça, et les courbes qui ne se croisent pas...
        Tu as toujours la solution de concaténer (c'était moi, mais je n'avais pas compris que tu voulais le résultat dans la case) et de rédiger des formules classiques dans ton tableau.

        Sinon, pour accélérer le calcul :
        - un truc simple c'est de définir la variable "case" case="N41" dans le premier cas, ça évite que la macro recalcule à chaque fois
        - idem pour la multiplication de 43*(vitesse-1) et 24 + terme -1 à mettre chacun dans une variable (et à faire une fois par vitesse et une fois par terme ; attention aux imbrications)

        De plus le With Worksheets() ne sert à rien.

        Ceci fait, indique-nous si la vitesse d'exécution est toujours trop lente
      2. okai merci Zoul67 je vais essayer de mettre en application tous ca et je tiens au courant
      3. oui exactement pour le concatner j'avais pas préciser qu'il me fallait le résultat dans la case ...
      4. salut Zoul67

        J'ai essayé d'appliquer ce que tu m'a conseiller sauf que j'ai pas réussi à bien introduire la variable et je vois pas l'integrer dans la boucle...
      5. Salut messin57000,

        En fait, ta macro s'appelait elle-même, c'est ça qui rendait l'exécution très longue... jusqu'à ce qu'une erreur apparaisse (dernière ligne : Call MAJsim_BB_New). Rien qu'en corrigeant ça, ça devrait aller, mais comme je ne l'ai vu que tardivement, j'ai aussi optimisé les variables calculées précédemment de nombreuses fois.

        Code :
        Sub MAJsim_BB_New()

        Dim wrksht As Object, graphique As Object, série As Object, shp As Object
        Dim formule As Variant
        Dim vitesse As Integer, terme As Integer
        Dim case_n As String
        Dim modulo_ligne As Integer, colonne_form As Integer

        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual

        For vitesse = 1 To 8 '8 : 100%, 90%, ..., mini
        case_n = "*N" & (41 + 43 * (vitesse - 1))
        modulo_ligne = 43 * (vitesse - 1)
        For terme = 1 To 10 ' 10 : de I0 à N
        colonne_form = 24 + terme - 1
        formule = "=" & Cells(8 + modulo_ligne, colonne_form).Value & case_n & " ^ 6 + " & _
        Cells(9 + modulo_ligne, colonne_form).Value & case_n & " ^ 5 + " & _
        Cells(10 + modulo_ligne, colonne_form).Value & case_n & " ^ 4 + " & _
        Cells(11 + modulo_ligne, colonne_form).Value & case_n & " ^ 3 + " & _
        Cells(12 + modulo_ligne, colonne_form).Value & case_n & " ^ 2 + " & _
        Cells(13 + modulo_ligne, colonne_form).Value & case_n & " ^ 1 + " & _
        Cells(14 + modulo_ligne, colonne_form).Value
        Cells(41 + modulo_ligne, 4 + terme - 1).FormulaLocal = formule
        Next terme
        For terme = 12 To 17 ' 10 : de I0 à N
        colonne_form = 24 + terme - 1
        formule = "=" & Cells(8 + modulo_ligne, colonne_form).Value & case_n & " ^ 6 + " & _
        Cells(9 + modulo_ligne, colonne_form).Value & case_n & " ^ 5 + " & _
        Cells(10 + modulo_ligne, colonne_form).Value & case_n & " ^ 4 + " & _
        Cells(11 + modulo_ligne, colonne_form).Value & case_n & " ^ 3 + " & _
        Cells(12 + modulo_ligne, colonne_form).Value & case_n & " ^ 2 + " & _
        Cells(13 + modulo_ligne, colonne_form).Value & case_n & " ^ 1 + " & _
        Cells(14 + modulo_ligne, colonne_form).Value
        Cells(41 + modulo_ligne, 4 + terme - 1).FormulaLocal = formule
        Next terme
        Next vitesse

        'REMPLACE LES FORMULES DES GRAPHIQUES PAR LEURS VALEURS

        For Each graphique In Worksheets("BLACK-BOOK").ChartObjects
        For Each série In graphique.Chart.SeriesCollection
        série.Values = série.Values
        série.XValues = série.XValues
        série.Name = série.Name
        Next série
        Next graphique

        Set graphique = Nothing
        Set shp = Nothing

        Worksheets("BLACK-BOOK").Activate

        Application.Calculation = xlCalculationAutomatic

        End Sub