Si je peux me permettre une petite remarque, l'emploi d'une telle quantité de fonctions If prend énormément de temps machine pour être traité. Je sais, à l'écran, ça ne se voit pas, mais s'il y a une dizaine de fois un tel test, alors ça va commencer à se remarquer.
Il aurait été plus judicieux de traiter ceci avec l'outil "Select case".
Dans un premier temps, tu dois "hiérarchiser" les variables :traiter d'abord Resi, ensuite Terti, ensuite ...
Tu tries ensuite le teste effectué sur chaque variable : = 0 et <> 0 .
Puis tu crée ta fonction :
Select case Resid
case = 0
case <> 0
EndSelect 'Resid
Maintenant, on va programmer le second test, celui de de Terti. Ici aussi, il y a deux tests effectués : =0 et <> 0.
Notre fonction devient
Select case Resid
Case = 0
Select case Terti
Case = 0
case <> 0
EndSelect 'Terti
case <> 0
Select case Terti
Case = 0
case <> 0
EndSelect 'Terti
EndSelect 'Resid
et ainsi de suite pour chacune des deux autres variables.
Lorsque tout est traité, dans la dernière option case de cahque groupe, on peut y introduire l'opération à effectuer.
En supposant qu'il n'y a que 2 testes à effectuer, (je reprends la fonction ci-dessus) on aurait, en final :
Select case Resid
Case = 0
Select case Terti
Case = 0
Ici l'opération à effectuer si Resid = 0 ET Terti = 0
exit Select
case <> 0
Ici l'opération à effectuer si Resid = 0 ET Terti <> 0
exit Select
EndSelect 'Terti
case <> 0
Select case Terti
Case = 0
Ici l'opération à effectuer si Resid <> 0 ET Terti = 0
exit Select
case <> 0
Ici l'opération à effectuer si Resid <> 0 ET Terti <> 0
exit Select
EndSelect 'Terti
EndSelect 'Resid
L'avantage de ce système de programmation ?
Le gain de temps en fonction du résultat de chaque test.
En effet, dès qu'une série de test aura été effectuée sur la PREMIERE valeur (ici, Resid) et s'il n'y a pas de correspondance avec une action envisagée, la boucle de tests s'interromp immédiatement.
Dans le cas des boucles If, elles sont toutes testées à chaque fois, même si c'est inutile !
De plus, ce type de programmation est plus clair à lire qu'une série interminable de boucles If.
Pour rendre ton code plus "accessible", tu pourrais également créer des procédures qui contiennent chacune un "groupe d'opérations" que tu utilises, par exemple :
ProcédureUn va contenir les instructions
ExtractionDonneesResid
ExtractionDonneesTerti
Sub ProcédureUn
ExtractionDonneesResid
ExtractionDonneesTerti
End Sub
Sub ProcédureDeux
ExtractionDonneesResid
ExtractionDonneesTerti
ExtractionDonneesIndus
End Sub
Dans ton code, tu supprime les différents appel répétés par un seul appel à la procédure voulue. Au lieu d'avoir à écrire et écrire et encore écrire toujours le même code d'instruction, avec le risque d'oublier une ligne ou de faire une fautre de frappe, tu n'as qu'à appeler la procédure.
Par exemple, le code
Select case Terti
Case = 0
Ici l'opération à effectuer si Resid = 0 ET Terti = 0
exit Select
case <> 0
Ici l'opération à effectuer si Resid = 0 ET Terti <> 0
devient :
Select case Terti
Case = 0
ProcedureUn
exit Select
case <> 0
ProcedureDeux
Crois-moi, ça vaut vraiment la peine de travailler comme ça, quand tu devras relire, voire modifier ton code dans quelques jours ou quelques mois, tu te rendras vite compte des difficultés que ton code actuel présente.
A+
Message édité par Papy Octet le 03-12-2006 à 15:57:29