Si erreur

Résolu
cs_tigrou19 Messages postés 65 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 5 décembre 2005 - 7 août 2004 à 09:24
cs_tigrou19 Messages postés 65 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 5 décembre 2005 - 9 août 2004 à 12:04
Bonjour à tous,
Voilà je cherche à utiliser la fonction On resume Next (VBA Excel,continuer si erreur)
Je ne sais pas si elle existe en delphi et si oui comment l'utiliser.
Merci

10 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
8 août 2004 à 12:36
Delphiprog, en somme, c'est ma méconnaissance de la syntaxe du VBA qui fait que j'ai donné la réponse qu'attendait tigrou19... ;)

tigrou19, si je comprends bien ce que tu veux faire, je te conseille une autre approche, en vérifiant si le fichier que tu veux ouvrir existe.
On utilise pour cela la fonction "FileExists" qui retourne un Boolean.

Exemple :

procedure TForm1.MonthCalendar1Click(Sender: TObject);
begin
  Label7.Caption := FormatDateTime('dd mmmm yyyy', MonthCalendar1.Date);
  Caption := 'Calendar';
  Memo1.Clear;
  try
    if FileExists(Label1.Caption) then
      Memo1.Lines.LoadFromFile(Label7.Caption)
    else
      Caption := 'Calendar - Pas de note à cette date';
  except
    on EFOpenError do ShowMessage('Fichier introuvable');
  end;
end;

C'est beaucoup plus "propre", on garde la gestion de l'erreur pour le cas où...

Bonne prog'   :-p 
3
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
7 août 2004 à 11:06
Avec Delphi, tu peux protéger ton code et gérer les erreurs en utilisant un bloc "try..except..end;"

Exemple concret avec une magnifique erreur dûe à la division d'un réel par zéro :

procedure TForm1.Button1Click(Sender: TObject);
var a, b: Real;
begin
  try
    b := 0;
    a := 10 / b;
    ShowMessage(FloatToStr(a));
  except
    on EZeroDivide do ShowMessage('Division d''un Real par zéro !');
  end;
  ShowMessage('L''application continue');
end;


L'espace entre "except" et "end;" te permet de gérer une erreur éventuelle.

Les instructions entre "except" et "end;" ne sont pas obligatoires, le code qui suit ce bloc s'exécutera de toute manière.

Tu n'es pas obligé de préciser non plus le type d'erreur que tu attends.

Attention, question souvent posée sur ce forum :
Si tu exécutes ton code dans l'environnement Delphi, le compilateur te signalera l'erreur et arrêtera l'exécution, c'est normal. Pour tester, tu dois lancer l'exécutable directement.

Bonne prog' :-p
0
cs_tigrou19 Messages postés 65 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 5 décembre 2005 1
7 août 2004 à 16:08
Bonjour Japee et le forum
merci pour cette reponse
@+Didier
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
7 août 2004 à 23:22
Bravo Japee pour cette brillante présentation de la gestion des exceptions.
Mais la question de tigrou19 attendait une réponse surement différente. Hélas pour lui, le langage Pascal n'offre pas de structure équivalente à la reprise de l'exécution à l'instruction suivant celle ayant provoqué une erreur.
Ou alors, mais ce n'est pas recommandé (ni recommandable d'ailleurs), il faudrait encadrer chaque instruction de la sorte :
try
  Instruction 1
except
  //ne fait rien et passe à la suite
end;

try
  Instruction 2
except
  //ne fait rien
end;

Vous imaginez la lourdeur du code et les risques de voir le programme déraper si on s'amuse à ignorer toutes les erreurs pouvant se produire ?
Ce n'est pas une lacune du langage Pascal, c'est juste une question de bon sens : si une erreur se produit, on arrête tout au lieu de la laisser se propager et de passer des heures à déboguer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tigrou19 Messages postés 65 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 5 décembre 2005 1
8 août 2004 à 01:19
Re bonsoir
voilà une partie du code pour lesquel j'avais poser cette question, je ne sais pas si c'est correct(je débute), mais avec cette methode je n'ai plus le message d'erreur quand le fichier n'existe pas
Encore merci

procedure TForm1.MonthCalendar1Click(Sender: TObject);

begin
label7.Caption:=formatdatetime('dd'' ''mmmm'' ''yyyy',monthcalendar1.date);
try
memo1.Lines.LoadFromFile(label7.caption);
form1.Caption:='Calendar';
except
Memo1.Clear;
form1.Caption:='Calendar Pas de note à cette date';
end;
end;
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
8 août 2004 à 07:11
Pas de problème, le code est correct.
La question n'avait donc rien à voir avec la recherche d'une équivalence de "On error resume next" existant en VBA. %-6
0
deaphrothe Messages postés 10 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 8 août 2004
8 août 2004 à 12:50
pour répondre a la premiere réponse de japee, la division d'un réel par zero, c possible tant que R est différent de 0. ça fais l'infinie :))) ce n'est qu'un détail mais c important pour programmer une calculette avancé
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
8 août 2004 à 12:56
Ok, deaphrote, t'es vachement plus calé en maths que moi. [;]
Je prends bonne note.
Mais au fait, 0 / 0, ça devrait faire 1, non ? (pas le temps de rechercher mon vieux bouquin de maths...)

Bonne prog' :-p
0
deaphrothe Messages postés 10 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 8 août 2004
8 août 2004 à 12:59
0/0 est un cas indéterminé ;)
et si tu veux chercher dans ton bouquin de math, cherche dans la partie limite, cas d'indétermination

voila c juste une ptite info comme ça en passant lol
0
cs_tigrou19 Messages postés 65 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 5 décembre 2005 1
9 août 2004 à 12:04
Bonjour Jappé et le forum
c'est vrai que je me suis mal exprimé,mais je ne savais pas trop comment poser ma question ne connaissant rien en delphi j'ai voulu comparer ce que je voulait faire avec le vba ce n'était pas
explicit,j'essayerait d'être plus clair la prochaine fois.
Encore merci
@+Didier
0
Rejoignez-nous