
Envoyé par
jpcheck

alors, si tu as 2 erreurs, il faut non pas les catcher via le on error, mais en amont faire les tests de blindage nécessaires pour ne pas que les erreurs surviennent
Tu as des exemples d'erreurs que tu gères ainsi pour l'instant ?
Alors je vais essayé d'être le plus clair et concis possible :
le but de ma macro : gérer des simulations sur un autre programme
par quel moyen : j'ai créé un objet qui est reconnu dans VBA et qui permet d'être manipulé
comment ça marche : je fait varier des paramètres (2 pour être précis : Q et alpha), je leur attribue des valeurs dans une sub puis j’appelle une autre sub qui fait tourner mon programme. Mon programme consiste à créer un nombre de modules inconnu par avance. Pour chacun des modules, je dois trouver la valeur d'un paramètre A qui répond à mes contraintes. Le problème, c'est que je dois initialiser à chaque création de module mon paramètre A dans mon programme. Mes erreurs sont toujours du même type (le numéro de l'erreur est 189). Elles correspondent au moment où j'ai un problème de simulation dans mon programme. Du coup, dans ce cas, j'utilise un
On Error Goto gestionerreur
dans lequel je modifie l'initialisation de mon paramètre A. Mon problème étant quand dans la même série de simulation je rencontre un autre problème (à un autre module par exemple).
je vous mets un exemple de mon problème :
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
Sub simulation_module()
'recup le nom du fichier
nom_fichier = Worksheets(1).Cells(1, 2).Value
file = Application.ActiveWorkbook.Path + "\" + nom_fichier
Set Prog = GetObject(file)
...
'gestion d'erreur
On Error GoTo ErrorHandler
...
'Mex = nombre de modules
For Mex = 2 To 30
tampon = alpha / (Qeau + 1)
'zone où je reprends après l'erreur
reprise:
'boucle If pour voir si je réponds à mes critère
If critère 1 non rempli Then
'création d'un nouveau module
'j'initialise ma valeur A
Prog.Module(CStr(Mex)).A.Value = tampon
' :aie:c'est dans cette partie que je peux avoir des problèmes de convergence
'du coup, j'ai tout simplement lancer plusieurs simulations en rentrant les valeurs des paramètres étape après étape
'on lance la simulation
Prog.Application.Simulation.Run (True)
'on fixe d'autres paramètres
Prog.Module(CStr(Mex)).Q.Value = Qeau
Prog.Module(CStr(Mex)).alpha.Value = alpha
'on lance la simulation
Prog.Application.Simulation.Run (True)
'On fixe d'autres paramètres...
...
'on lance la simulation
Prog.Application.Simulation.Run (True)
'deuxième boulce if pour le deuxième critère
If critère 2 est rempli Then
...
goto ok2
Else
...
goto ok2
End If
End If
'si c'est bon on envoie vers la gestion ok
ElseIf critère 1 rempli Then
'je fixe des paramètres, en relâche d'autres, ... là il n'y a pas d'erreur
...
Prog.Application.Simulation.Run (True)
GoTo ok
'normalement si c'est la premiere il faut sortir de la boucle if
End If
'gestion du cas qui marche avec critère 2
ok2:
compteur2 = 0
'on rajoute un petit module
Next Mex
'gestion du cas qui marche avec critère 1
ok:
'traitement des données : j'appelle des sub pour traiter les données
Call save
Call ecriture
Exit Sub
ErrorHandler:
'je supprime un module et je diminue l'aire minimum
Prog.Application.Simulation.flowsheet.removeblock CStr(Mex)
tampon = 5
Err.Clear
GoTo reprise
End Sub |
Alors j'ai essayé d'épurer au maximum mon programme... Si c'est vraiment pas clair, n'hésitez pas!
Merci encore pour tous vos messages!
Partager