Verification de l'erreur

messin57000 Messages postés 72 Statut Membre -  
messin57000 Messages postés 72 Statut Membre -
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. Zoul67 Messages postés 2001 Statut Membre 149
     
    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+
    0
  2. messin57000 Messages postés 72 Statut Membre
     
    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+
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      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
      0
    2. messin57000 Messages postés 72 Statut Membre
       
      okai merci Zoul67 je vais essayer de mettre en application tous ca et je tiens au courant
      0
    3. messin57000 Messages postés 72 Statut Membre
       
      oui exactement pour le concatner j'avais pas préciser qu'il me fallait le résultat dans la case ...
      0
    4. messin57000 Messages postés 72 Statut Membre
       
      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...
      0
    5. Zoul67 Messages postés 2001 Statut Membre 149
       
      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

      0