begin process at 2013 05 19 20:16:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Question pour On Error


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Question pour On Error

jeudi 28 juin 2012 à 14:39:14 | Question pour On Error

Neirda24

Bonjour,
A ceux qui liront ce post je vous remercie d'avance!
Alors voila je me suis créer une sorte d'emploi du temps en VBA et a chaque lancement du fichier je lance une procédure pour rechercher certaine valeurs ou données spécifique afin de simplifier le code qui suis...
Le soucis c'est que des fois quand il plante les données ne sont plus sauvegarder il faut donc relancer la procédure mais l'ironie c'est qu'il plante parce qu'il n'as plus les données.
Exemple un numéro de ligne qui vaut 0.

J'aimerais donc savoir si un code permet de en cas d'erreur lancer UNE PROCEDURE. laquelle serait juste d'initialiser ce dont j'ai besoin.

Je ne veux pas mettre dans tout mes SUB "on error go to 'machin'" avec 'machin' qui appelle l'init. Plutôt quelque chose comme "Worksheet_OnError()"

Voila j’espère que c'est pas trop sombre ce que je demande et surtout que c'est réalisable!!
Merci encore a ceux qui prendront le temps d'y penser.

Adrien
jeudi 28 juin 2012 à 15:00:28 | Re : Question pour On Error

LIBRE_MAX


Bonjour,

Il suffit de mettre tout le code dans une fonction,
qui renverait False si erreur.
Et si c' est False lancer la procédure initialiser.
Exemple:
Code Visual Basic :
Function PROCEDER() As Boolean
  On Error Goto EEXIT
 
   <traitement>
   PROCEDER=True

Exit Function

EEXIT:
End Function

Sub INITIALISER
 <traitement>
End Sb



Puis appeler cette function:

If PROCEDER=False Then INITIAMISER

[] Ce qui va sans dire. va mieux en le disant.
jeudi 28 juin 2012 à 15:11:03 | Re : Question pour On Error

LIBRE_MAX


Si tu es sûr qu' après avoir initialiser, tout sera OK, rien n' empêche de rappeler la fonction.

Code Visual Basic :
If PROCEDER=False Then 
   INITIAMISER 
   Call PROCEDER
End If



[] Ce qui va sans dire. va mieux en le disant.
jeudi 28 juin 2012 à 15:14:44 | Re : Question pour On Error

Neirda24

Merci de ta réponse rapide libre_max mais je suis pas sûr que c'est ce que je cherche...
J'ai 7 modules plusieurs userform...
Le problème ne survient pas dans les forms car je leur fait transmettre toutes les infos a des variables du classeur. Mais ta solution si j'ai bien compris implique que mes 7 modules soit compris dans cette fonction...

Je cherche plutôt un moyen de centraliser une erreur qui survient n'importe ou dans le classeur et d'effectuer une action a ce moment la.

Bien sur quand j'en serais la il faudra aussi que je trouve comment traiter l'erreur pour ne pas toutes les gérer de la même manière sinon je risque d'en créer encore plus.
jeudi 28 juin 2012 à 16:09:07 | Re : Question pour On Error

LIBRE_MAX



" Mais ta solution si j'ai bien compris implique que mes 7 modules soit compris dans cette fonction... "



Non ! Pas forcément.

A chaque module , sa procédure spécifique.
Il ne faudra donc pas chercher à mettre tout dans le même sac.
Mais si tu as des procédures qui se ressemble dans le fond, résumes les en une seule procédure publique mais en passant comme arguments le module apelant, l' user_form concerné,..etc.

Ceci dit, au sein d' une même fonction, on pourra placer, plusieurs ON ERROR, qui renverraient chacun à une etiquette spécifique.

Exemple:
Code Visual Basic :
Function PROCEDER() As Integer
   On Error Goto Err_1
   <traitement1>
 
  On Error Goto Err_2
   <traitement2>

  On Error Goto Err_3
   <traitement3>

Exit Function
Err_1:
PROCEDER=1
Exit Function

Err_2:
PROCEDER=2
Exit Function

Err_3:
PROCEDER=3
End Function


Puis appeler cette function
Code Visual Basic :
If PROCEDER=1 Then
   CORRIGER_1
ElseIf PROCEDER=2 Then
   CORRIGER_2
If PROCEDER=3 Then
   CORRIGER_3
End If


PS:
Dans mon précédent poste la sub INITIALISER voulait dire CORRIGER,et non tout remettre à zéro.


[] Ce qui va sans dire. va mieux en le disant.
jeudi 28 juin 2012 à 16:26:02 | Re : Question pour On Error

Neirda24

Excuse moi je suis encore assez novice en la matière... Mais je suis justement en train de refaire intégralement ce petit emploi du temps pour le simplifier l'améliorer le clarifier...
Donc j'ai déjà (dans la limite de mes connaissances) réduit au minimum les procédures et les fonctions dont j'ai besoin...

Il serait presque plus simple de faire un copier coller dans chaque procédure qui peut avoir un problème.

Mais si je souhaite l'étendre alors je devrais a nouveau copier coller la demande d'init.
Même avec ta solution ca reste encore très lourd.

il n'y a vraiment aucun moyen de faire un go to en sortant de la sub actuelle?

Désolé d'être si retord par rapport a ta solution mais je cherche vraiment a centraliser le tout si c'est possible sinon bah je ferais comme tu as dit!
jeudi 28 juin 2012 à 16:53:13 | Re : Question pour On Error

LIBRE_MAX


Mais si je souhaite l'étendre alors je devrais a nouveau copier coller la demande d'init.
Même avec ta solution ca reste encore très lourd.



Encore une fois non !
Pas si tu passes à la procedure INIT l' arguemt de l' erreur (voir aussi du module appelant)3
Il suffit de faire un SELECT CASE après.

Code Visual Basic :
Sub CORRIGER (xxErr As Integer)
   Select Case xErr
    Case 1
       <correction 1>
    Case 2
       <correction 2>
    Case 3
       <correction 3>
End Select
End Sub


Puis:
Code Visual Basic :
E=PROVEDER
If E>0 Then Call CORRIGER(E)


Ceci dit, si tu as plusieurs Fonctions PROCEDER, éviter de reproduire les mêmes valeurs au niveau des etiquettes.
Et dans CORRIGER les traiter toutes.

(Par exemples dans l' une elle prend: 1 ou 2 ou 3.
Dans une autre: 4 ou 5 ou 6)
etc...

[] Ce qui va sans dire. va mieux en le disant.
jeudi 28 juin 2012 à 17:04:31 | Re : Question pour On Error

Neirda24

Si je te passe mon dossier tu peux m'en faire un exemple...?
Vraiment désolé Libre_Max mais je ne vois toujours pas comment ça peut agir de la même façon que
Public sub Worksheet_SelectionChange() par exemple.

Dès que la selection change la procédure est engager pas besoin d'y faire appel.
Hors je souhaiterais mettre au max On Error Go To "Init".
Au mieux que dès qu'il y a une erreur le classeur se charge tout seul de lancer une procédure sans que la ligne de commande soit inscrite dans le sub.

Néanmoins cette dernière solution étant un peu utopique je suppose qu'il faut "prévenir" en début de sub que si il y a une erreur il sort de la procédure, engage une procédure "d'urgence", reviens au début de la procédure précédemment quittée...

Encore désolé mais je préfère passer du temps a chercher ce que j'ai en tête avant d'accepter la fatalité que c'est pas possible !


Cette discussion est classée dans : données, temps, question, error, procédure


Répondre à ce message

Sujets en rapport avec ce message

petite question tres urgente [ par maryouma ] bonjour à tout le mondeje veux chercher un "temps" bien particulier dans une base de données , en fait c'est une base de données qui contient des mes Question sur la procédure ON error [ par cyriloo ] Bonjour, J'ai un petit probléme. J'utilise le on error de la maniére suivante : Public sub kiki()On Error Goto Degage' ' ma procédure de mon sub ...<b Gestion plantage [ par kat40 ] Bonjour à tous,J'ai une application VB avec une base de données ACCESS. Lorsque quelqu'un ouvra l'application un 1 va s'inscrire dans la base de donn Erreur Mystérieux [ par danyflyn ] Bonjour à tous, J'ai fait un programme de Gestion de Temps pour un bureau comptable.Tout va très bien. J'ai fait une procedure pour surveiller les err Question sur Bases de Données et VBscript [ par EMSIEN ] Bonjour à ts voilà je me demande est ce que avec Vbscript on pourras modifier (ajoutter,consulter,supprimer) un champs ou des champs de la base de don question de noob [ par g4_cedr ] salut , je tiens à dire que je débute complètement dans le dvpmt et que j'ai des grosses lacunes pour l'instant dans ce domaine......bref , je cherche pause sans une question de temps [ par liegeus ] Bonjour voilà pour remplir un tableau je fais 2 boucle l'une dans l'autres mais j'aimerai mettre le programme en pause au millieu que l'utilisateur ai Question sur Excel 2003 ? [ par TLSL78 ] Bonjour,Ayant développer une macro en vba pour excel qui me permet de copier-coller des données d'un classeur excel dans un autre mais au moment de la Question avec temps limité de réponse [ par carlstp ] Est-il possible avec VB 6 de Poser une Question avec temps limité de réponse. :Ex. "Êtes-vous certain ? "   Choix oui on non et après 2 minutes le cho Question très importante [ par tsithtsith ] Bonjour à tous,j'ai réussi à créer une interface graphique permettant la consultation et la mise à jour d'une base de données.Je souhaiterais à l'aide


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,888 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales