|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : août 2011 Messages : 8 ![]() |
Bonjour, j'ai un problème dans mon code VBA. Dans cette partie de mon programme,j'essaie d'optimiser une valeur initiale d'un problème C(0,t). Je dispose déja d'une valeur de C(0,t) qui m'a donnée une erreur d'un signe que je ne connais pas et j'aimerais obtenir une autre valeur de C(0,t) qui me donnerait une erreur du signe contraire pour ensuite appliquer une méthode de dichotomie.. J'ai essayé de faire cette algorithme sur VBA seulement, lorsque je lance la macro, excel ne répond plus... J'imagine que je le fais boucler a cause d une erreur dans mon code mais je ne vois pas ou et je n ai aucun message d erreur en compilant...
Mon code ressemble à ceci: Code :
Code :
Merci d'avance |
||||
|
|
00
|
|
|
#2 |
|
Office & Excel ![]() ![]() ![]() |
Salut.
Une piste de réflexion. Lorsque tu utilises une boucle Do While ou Do Until, tu dois être certain que la condition de sortie sera rencontrée à un moment donné. Avec ton code tu ne sortiras de la boucle que lorsque (ERROR_C(i) / ERROR_C1) sera négatif. Tant que le résultat est positif ou nul, tu boucles... Donc, tu dois voir si, en recalculant error_c(i) à chaque boucle, tu arriveras à avoir une valeur négative ou pas...
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) --------------- Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP Vous souhaitez rédiger pour DVP? Contactez-moi Amoureux de la langue française? Venez corriger nos ressources VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA... N'oubliez pas de VOTER (en bas à droite d'un message) --------------- |
|
00
|
|
|
#3 | ||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Il y a beaucoup trop de variables inconnues sans aucun type pour aider à optimiser. Ainsi on parle d'une valeur de C(0, t) sans indiquer s'il s'agit d'un Double ou Single ou Long ou ...
Essayez d'indenter le code selon la structure des If ou For imbriqués. Cela améliore nettement la lisibilité. Utilisez des constantes telles que deltaAbove1 et deltaBelow1. C'est également plus lisible et plus rapide à l'exécution. Sortez les invariants de boucles comme delta_z_SqrDivDt ou deltaHalf. Limitez le nombre d'itérations à un nombre maximum nbrMaxIteration fixé à l'avance Code :
ERROR_C1 semble une variable qui n'est pas modifiée dans la boucle sans fin. Si c'est une constante, il aurait fallu indiquer sa déclaration comme toutes les variables utilisées dans la procédure. Diviser ERROR_C(i) par ERROR_C1 ne semble pas utile pour tester le changement de signe de ERROR_C(i) si jamais il arrive. Le nom des variables sur une seule lettre n'aide pas à la compréhension. On ne voit guère l'intérêt de diviser D par D. Cela devrait faire toujours 1. On pourrait optimiser en copiant la mesure de concentration C(0, t) à C(NS, t) dans un tableau (array) à une seule dimension arrCt avant la boucle et la restaurer après. On a instrumenté le code pour voir le temps d'une ou plusieurs itérations entre tEnd et tStart sans pouvoir tester. On a animé la barre de status d'Excel avec le n° de boucle. Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE, Debug.Print affiche également la progression dans la boucle. ___________ Si la discussion est résolue, vous pouvez cliquer sur le bouton En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com