gregcitt
Messages postés37Date d'inscriptionjeudi 28 septembre 2006StatutMembreDernière intervention18 juin 2007
-
17 nov. 2006 à 16:27
JFRuelle
Messages postés1Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention 2 février 2008
-
2 févr. 2008 à 01:29
Hello boyz
Mon instruction "On error Go To", prévue pour l'erreur d'une " selection.Find(what:=.......)
ne marche qu'une fois.
Elle est à l'intérieur d'une boucle For NExt.
Le On Error est placé juste avant la recherche, et ça ne marche que pour la première erreur rencontrée, dès que la bouvle a fait un tour, le Goto ne marche plus.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 17 nov. 2006 à 16:40
Une fois la première erreur rencontrée, l'execution du code est passée au gestionnaire d'erreur et celui-ci est désactivé jusqu'a la fin de la gestion de l'erreur (généralement automatique à la sortie de la procédure). Pendant ce temps là, les erreurs ne sont plus gérées
Si après une première erreur, tu continue l'execution de ton code normal, cette execution sera considérée comme étant le traitement de l'erreur.
Donc après avoir traiter l'erreur, pour pouvoir continuer à executer le code normalement sans sortir de la procédure, il faut passer à terminer la gestion d'erreur, pour relancer le gestionnaire.
--> Err.Clear
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
gregcitt
Messages postés37Date d'inscriptionjeudi 28 septembre 2006StatutMembreDernière intervention18 juin 2007 17 nov. 2006 à 17:40
L'instruction "Err.Clear" est à mon avis ce qui réponds à ma question. Merci bien
Mais je n'arrive pas pas à la faire marcher :
J'ai essayer de placer le err.clear au début de la boucle, a la fin, juste après l'instruction de Goto (ici c'etait Goto copie, donc juste après le Goto...)
Et voila le code pour kazer
For i = 2 To NbLIgnes
Err.Clear
If Cells(i, 3) Like "*Somme*" Then
Cells(i + 1, 2).Select
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 17 nov. 2006 à 18:00
le Err clear ne sert ici rigoureusement à rien puisque, dans ta boucle For to tu repasses par un On Error (lequel, conformément à VB, réinitialise automatiquement err à 0
Voilà ce qu'explique VB :
"The Err object's properties are reset to zero or zero-length strings ("") after any form of the Resume or On Error statement and after an Exit Sub, Exit Function, or Exit Property statement within an error-handling routine. The Clear method can be used to explicitly reset Err".
Explique nous avec des mots simples ce que tu cherches exactement à faire (commente ton code tel que tu l'as écrit) et nous verrons ensemble quelle est la meilleure façon de s'y prendre.
Vous n’avez pas trouvé la réponse que vous recherchez ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 17 nov. 2006 à 19:34
Salut,
il faut gérer avec le numéro de l'erreur.
On Error Resume Next
For i = 2 To NbLIgnes
If Cells(i, 3) Like "*Somme*" Then
Cells(i + 1, 2).Select
isin = ActiveCell
Windows("POS T0.xls").Activate
Range("B:B").Select
[B2].Activate
If Not Err.Number = XXXXThen
' remplace XXXX par le bon numéro d'erreur
ligneisin = Selection.Find(what:=isin, after:=ActiveCell).Row()
Rows(ligneisin).Copy
End If
Windows("MVT 1.xls").Activate
Rows(i + 1).Select
Selection.Insert shift:=xlDown
Selection.End(xlToLeft).Select
End If
Next i
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 17 nov. 2006 à 22:13
Heu ... Au risque de passer pour un empêcheur de tourner en rond, oserais-je dire que l'utilisation d'un "On error goto" en vba, vb6 (ou antérieur) ou d'un "Try ... Catch" en vb.2005 n'est qu'un pis-aller ? Et un inutile bouffeur de resources ?
Oserais-je affirmer que dans 99% des cas, il suffit d'être rigoureux dans le choix des variables, le contrôle des saisies, ... en fait dans la maîtrise de son propre prog ? Peut-être même que le 1% qui reste peut être maîtrisé aussi d'ailleurs.
Personnellement, dans mes progs, je contrôle toutes les entrées et sorties et n'ai jamais eu à utiliser les "on error" en vba ou vb6 ni les "try ... catch" en vb.2005 (sauf en phase de test par fainéantise).
A force de laisser la machine gérer les erreurs, on va finir par remplacer les programmeurs par des machines.
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 17 nov. 2006 à 22:27
Et pourtant , cher Dolphin Boy, et pourtant !...
Le vieux développeur que je suis te dira que c'est quelquefois justifié, voire incontournable...
Un exemple ?
OK :
Décider de l'utilisation de la première police de caractères disponible sur un PC client parmi une liste de polices possibles, et dans un ordre préférentiel déterminé, sans faire une multitude de tests inutiles d'existence !
et j'en passe, et des meilleures
leSaleGauSS
Messages postés148Date d'inscriptionsamedi 4 novembre 2006StatutMembreDernière intervention 4 décembre 2008 17 nov. 2006 à 22:31
Dolphin Boy => Tu as surement raison mais la plupart des personnes qui débutent en vb utilisent ce genre de fonction pour connaitre les erreurs qu'il peuvent faire ou, comme tu le dis toi même, "en phase de test par fainéantise" . (sans rancune j'espere)
sinon err.description peut aussi faciliter la compréhension de l'erreur
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 17 nov. 2006 à 22:43
Je suis entièrement d'accord avec toi Dolphin, pour VB6, moins pour VB.NET.
Le try catch n'a absolument rien à voir avec le on error, c'est même pas comparable.
Cependant, et je suis le premier à ne pas le faire, toutes les routines devraient avoir un gestionnaire d'erreur, car même le code le plus abouti n'est pas à l'abris du bug imprévu. Aucun code ne pourra jamais etre zéro bug, c'est impossible.Et sans gestion de l'erreur, c'est la fermeture brutale de l'appli.
Et lorsque derrière tu as une machine, ça peut etre synonime de casse ou pire de mise en danger de personne.
D'accord avec jmfmarques aussi, parfois c'est incontournable.
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 17 nov. 2006 à 22:44
Toujours pas d'accord ...
Un autre exemple, alors :
Tenter d'ouvrir (avec un Open) un fichier déjà ouvert par une autre application (avec un Open également) !
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 17 nov. 2006 à 22:51
leSaleGauSS > sans rancune bien sùr. Et je suis OK avec toi. Mais le prog final (livré au client) doit, à mon avis (et idéalement ) être exempt de ce genre de chose sous peine de s'attendre à des bugs qu'on ne saura pas gérer puisqu'on n'aura déjà pas su géré les erreurs au départ.
jmfmarques > si tu utilises des polices non standard, qui t'empêche de les fournir avec ton pack d'install ? Ou de les indiquer comme pré-requis ?
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 17 nov. 2006 à 23:05
casy > bien sùr, aucun prog n'est à l'abri d'un bug non prévu par le développeur. Je me suis sans doute mal exprimé. Ce que je voulais dire c'est qu'il ne faut pas utiliser la gestion d'erreur pour n'importe quoi sans réfléchir.
leSaleGauSS
Messages postés148Date d'inscriptionsamedi 4 novembre 2006StatutMembreDernière intervention 4 décembre 2008 17 nov. 2006 à 23:05
Dites loin de moi l'idée de remuer le couteau dans la plaie, mais vous trouver pas (et la je m'adresse a Dolphin Boy et jmfmarques) qu'on s'eloigne un peu du sujet.
A moins qu'il a changer entre temps par "Pour ou contre le On error go to" ?
Mais si vous voulez continuer ya pas de probleme (C'est gregcitt qui va être content)
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 18 nov. 2006 à 01:33
Salut,
merci d'inonder ma boite mail avec ce sympathique débat
Beh du coup, on va pas venir pour rien :
je suis pour le fait de réduire au maximum l'utilisation de on error, mais qui dit réduire, dit utilisable pour certains cas (pas le choix, ou PAR choix).
Perso, je l'utilise comme le code proposé à gregcitt (d'ailleurs si ça te convient, n'hésite pas) dans certains cas, et pour mes chers doublons.
J'aime bien travailler avec les collections pour traiter les données, car si on tente d'ajouter un item avec une clé (le nom de l'item) et si la clé d'un membre est la même, cela provoque une erreur, car les collections n'acceptent que les clés uniques.
Du coup, on error resume next avant le traitement, on error goto 0 juste après, et ça m'évite 2 ou 3 boucles pour vérifier les données, et des ReDim intempestifs.
@++
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Donc dans tous les cas de figure, telle qu'est ton code avec ces (), la recherche ne n'effectuera pas car il y a une erreur de syntaxe.
Donc pour répondre à Dolphin Boy, oui on peut éviter la gestion d'erreur :
tout simplement, en écrivant BIEN, surtout que si la recherche est infructueuse, cela renvoi une chaine vide, et non une erreur.
For i = 2 To NbLIgnes
If Cells(i, 3) Like "*Somme*" Then
Cells(i + 1, 2).Select
isin = ActiveCell
Rows(i + 1).Select
Selection.Insert shift:=xlDown
Selection.End(xlToLeft).Select
End If
Next i
--Mortalino--
Pour Dolphin Boy, VBA n'est pas vraiment différent de VB, en tout cas la gestion d'erreur est exactement la même.
Seules les bibliothèques et objets diffèrent, et encore que..
Il faut se dire que VB, c'est une application pour en faire d'autre, VBA, c'est un complément d'une application hôte. Mais la hierarchisation des objets, classes sont les mêmes.
C'est juste qu'avec VBA Excel, tu vas coder les workbook, sheets, range mais une fois que tu travailles avec ces objets, tu connais ses méthodes, propriétés, etc..
Avec Word, c'est ThisDocument, mais en fait, qque soit l'appli hôte, ce que tu fais avec en tant qu'utilisateur, tu peux "l'automatiser", jusqu'à faire des trucs sympas.
Niveau comparaison, VBA : tu peux des petites choses que vb ne fait pas naturellement (mais que l'on peut coder), et à l'inverse, VB fait beaucoup de choses que VBA ne peut faire, certaines choses, que l'on peut coder, d'autres, impossibles à faire (ou faut être un crack)
@++
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
leSaleGauSS
Messages postés148Date d'inscriptionsamedi 4 novembre 2006StatutMembreDernière intervention 4 décembre 2008 18 nov. 2006 à 02:11
Salut mortalino, c'est toujours un plaisir d'ouvrir un débat et d'avoir des avis différents quant au sujet des erreurs et j'attends la réponse prochaine de gregcitt
Quand je suis là tout va mal