IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Problème avec plusieurs if then else imbriqués


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut Problème avec plusieurs if then else imbriqués
    Bonjour à tous

    Sous Delphi7, j'ai un petit problème avec la fonction if...then .. else qui me torture l'esprit depuis 2 heures...

    Dans mon code ci dessous, seule les conditions de la première variable "a" sont traitées ?? (celle surlignée en rouge dans mon code)
    les 2 autres pour "b et c" ne sont pas interprétées - pourquoi ?

    J'ai tourné le code dans tous les sens en intercalant des begin .. end else ... begin mais rien n'y fait et je ne vois pas la solution.
    Si l'un d'entre vous pouvez m'éclairer...

    Merci par avance

    Cordialement
    Beauserge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    procedure TForm1.Button4Click(Sender: TObject);
    var
    a,b,c : integer;
    begin
    
    a:=StrToInt(EcartF1.text);
    if (a >=6) then
     RichEdit1.Lines[0]:='Rien de particulier pour ' + Stringgrid1.Cells[0,1]+ ' ' + Stringgrid1.Cells[0,2]
       else
          if (a >=1) and (a <=5) then
          RichEdit1.Lines[0]:='L''anniversaire approche pour ' + Stringgrid1.Cells[0,1]+ ' ' + Stringgrid1.Cells[0,2] + ' - Le ' + Stringgrid1.Cells[0,9]
            else
           if (a =0)then
           RichEdit1.Lines[0]:='C''est le Jour J - Pensez à souhaite un Bon Anniversaire à ' + Stringgrid1.Cells[0,1]+ ' ' + Stringgrid1.Cells[0,2] + ' - Aujourd''hui ' + Stringgrid1.Cells[0,9];
    
    b:=StrToInt(EcartF2.text);
    if (b >=6) then
     RichEdit1.Lines[1]:='Rien de particulier pour ' + Stringgrid1.Cells[1,1]+ ' ' + Stringgrid1.Cells[1,2]
         else
          if (b >=1) and (b <=5) then
           RichEdit1.Lines[1]:='L''anniversaire approche pour ' + Stringgrid1.Cells[1,1]+ ' ' + Stringgrid1.Cells[1,2] + ' - Le ' + Stringgrid1.Cells[1,9]
            else
           if (b =0)then
           RichEdit1.Lines[1]:='C''est le Jour J - Pensez à souhaite un Bon Anniversaire à ' + Stringgrid1.Cells[1,1]+ ' ' + Stringgrid1.Cells[1,2] + ' - Aujourd''hui ' + Stringgrid1.Cells[1,9];
    
    c:=StrToInt(EcartF3.text);
    if (c >=6) then
     RichEdit1.Lines[2]:='Rien de particulier pour ' + Stringgrid1.Cells[2,1]+ ' ' + Stringgrid1.Cells[2,2]
        else
         if (c >=1) and (c <=5) then
          RichEdit1.Lines[2]:='L''anniversaire approche pour ' + Stringgrid1.Cells[2,1]+ ' ' + Stringgrid1.Cells[2,2] + ' - Le ' + Stringgrid1.Cells[2,9]
           else
          if (c =0)then
           RichEdit1.Lines[2]:='C''est le Jour J - Pensez à souhaite un Bon Anniversaire à ' + Stringgrid1.Cells[2,1]+ ' ' + Stringgrid1.Cells[2,2] + ' - Aujourd''hui ' + Stringgrid1.Cells[2,9];
    end;

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 86
    Points : 375
    Points
    375
    Par défaut
    Bonjour,

    commence ta procédure par

    Ensuite remplace les instructions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RichEdit1.Lines[x] := 'Texte';
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RichEdit1.Lines.Add('Texte');

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 86
    Points : 375
    Points
    375
    Par défaut
    J'ai peut-être répondu un peu vite.
    Tu es sûr de ne pas avoir d'erreur à l'exécution ?
    Après un essai de mon côté ça à l'air de fonctionner, mais je n'ai pas le contenu de ta grille, ni les valeur des champs "EcartF".

    Sinon, tu peux essayer la fonction "Nettoyer" puis reconstruire / recompiler. Les modifications de ton code n'ont peut-être pas été prises en compte par le débuggeur.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 931
    Points
    40 931
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Beauserge Voir le message
    Sous Delphi7, j'ai un petit problème avec la fonction if...then .. else qui me torture l'esprit depuis 2 heures...
    franchement j'ai pas tout lu mais une utilisation de case en lieu et place d'un ensemble de if then else if ... devrit certainement alléger le code
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Hermite Voir le message
    Bonjour,

    commence ta procédure par

    Ensuite remplace les instructions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RichEdit1.Lines[x] := 'Texte';
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RichEdit1.Lines.Add('Texte');
    Bonsoir et merci Hermite

    Aucune erreur de compilation - c'est impeccable !

    En fait je n'avais même pas essayé d'utiliser RichEdit1.lines.add car je pensais que les lignes allaient se superposer mais comme à chaque fois 1 seul choix est sélectionné sur les 3 conditions, aucun risque. Et avec le RichEdit1.Clear, c'est nickel
    Je prends note pour la prochaine fois...

    En tout cas, tu m'enlèves un grosse épine du pied :-)

    Merci encore et aussi pour ta rapidité à répondre

    Cordialement

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 404
    Points : 5 790
    Points
    5 790
    Par défaut
    salut

    pour faire plus court tu peut aussi faire cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    procedure TForm1.Button4Click(Sender: TObject);
    const 
      max = 2;
    var
      a,i : integer;
    begin
      For i := 0 to max do  
      begin
        a:=StrToInt(FindComponent('EcartF'+IntToStr(i+1))  as TEDIT).text)
        if (a >=6) then
          RichEdit1.Lines.add(Format('Rien de particulier pour %s %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2]))
        else
        if (a >=1) and (a <=5) then
          RichEdit1.Lines.add(Format('L''anniversaire approche pour %s %s  - Le %s ',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]]))
       else
        if (a =0) then
          RichEdit1.Lines.add('C''est le Jour J - Pensez à souhaite un Bon Anniversaire à %s %s  - Aujourd''hui  %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]]));
      end;
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 931
    Points
    40 931
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Voilà ce que je pensais en parlant du case, je n'avais pas compris qu'il s'agissait d'un problème de sortie mais d'un problème d'imbrication de if then else

    j'ai repris le code de anapurna (en rajoutant le Format manquant du if a=0 then )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a:=StrToInt(FindComponent('EcartF'+IntToStr(i+1))  as TEDIT).text)
    case a of
        0 :  RichEdit1.Lines.add(Format('C''est le Jour J - Pensez à souhaite un Bon Anniversaire à %s %s  - Aujourd''hui   %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
        1,2,3,4,5 : RichEdit1.Lines.add(Format('L''anniversaire approche pour %s %s  - Le %s ',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
        else RichEdit1.Lines.add(Format('Rien de particulier pour %s %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2]));
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 404
    Points : 5 790
    Points
    5 790
    Par défaut
    salut,

    arf autant pour moi je l'ai écrit à la volet et j'ai effectivement oublié de mettre le format sur la dernière condition ... mais tout le monde l'aurais rectifié de lui même
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Ma pierre à l'édifice, amélioration du code de Sergio :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    a:=StrToInt(FindComponent('EcartF'+IntToStr(i+1))  as TEDIT).text)
    case a of
        0 :  RichEdit1.Lines.add(Format('C''est le Jour J - Pensez à souhaite un Bon Anniversaire à %s %s  - Aujourd''hui   %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
        1..5 : RichEdit1.Lines.add(Format('L''anniversaire approche pour %s %s  - Le %s ',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
        else RichEdit1.Lines.add(Format('Rien de particulier pour %s %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2]));
    end;

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 931
    Points
    40 931
    Billets dans le blog
    62
    Par défaut
    Re,

    j'avais bien pensé au 1..5 de guillemouze , je m'en était abstenu faute de vouloir vérifier que ça fonctionnait bien (selon mes souvenirs oui mais bon ...)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Tu as les réponses dans les postes précédents, mais ce que je te conseille c'est de toujours utiliser les begin..end pour avoir un code plus lisible.

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonjour à tous et merci de vos réponses

    J'aurais bien utilisé un Case ..of mais le soucis c'est que je voudrais avoir plusieurs résultats pour chaque valeur (enregistrements)

    Je m'explique pour valeur 0 ajout de la ligne C'est le jour J ...
    et également couleur du texte de la ligne en bleu
    idem mais en changeant de couleur pour les autres valeurs du case ... of

    J'ai rajouté dans mon code ce que je souhaiterai dans l'absolu...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    a:=StrToInt(FindComponent('EcartF'+IntToStr(i+1))  as TEDIT).text)
    case a of
        0 :   et aussi résultat :      RichEdit1.SelAttributes.color := clblue;  // ligne en bleue
             RichEdit1.Lines.add(Format('C''est le Jour J - Pensez à souhaite un Bon Anniversaire à %s %s  - Aujourd''hui     %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
    
    
        1..5 :   et aussi résultat :      RichEdit1.SelAttributes.color := clgreen; // ligne en vert
           RichEdit1.Lines.add(Format('L''anniversaire approche pour %s %s  - Le %s ',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
     et aussi résultat : 
    
        else   et aussi résultat :      RichEdit1.SelAttributes.color := clgray; // ligne en gris
          RichEdit1.Lines.add(Format('Rien de particulier pour %s %s',[Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2]));
     et aussi résultat : 
    end;

    Et je pense que ce n'est pas possible ?

    Confirmez moi ou non si c'est faisable.

    Cordialement
    Beauserge

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 86
    Points : 375
    Points
    375
    Par défaut
    Tout simplement en encadrant chaque lot d'instruction par begin..end :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case a of
        0 : begin
                RichEdit1.SelAttributes.color := clblue;  // ligne en bleue
                RichEdit1.Lines.add(Format('C''est le Jour J - Pensez à souhaite un Bon Anniversaire à %s %s  - Aujourd''hui     %s',
                                [Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
            end;
        1..5: ...... etc...

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Hermite Voir le message
    Tout simplement en encadrant chaque lot d'instruction par begin..end :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case a of
        0 : begin
                RichEdit1.SelAttributes.color := clblue;  // ligne en bleue
                RichEdit1.Lines.add(Format('C''est le Jour J - Pensez à souhaite un Bon Anniversaire à %s %s  - Aujourd''hui     %s',
                                [Stringgrid1.Cells[i,1],Stringgrid1.Cells[i,2],Stringgrid1.Cells[i,9]])); 
            end;
        1..5: ...... etc...
    Merci Hermite

    Le code fonctionne et je vais le mettre en pratique.
    J'ai au moins appris cela aujourd'hui :-)

    Merci également à tous les membres qui ont participé à la discussion

    Cordialement
    Beauserge

Discussions similaires

  1. Problème avec un if then else
    Par mat777 dans le forum Général VBA
    Réponses: 2
    Dernier message: 13/02/2008, 10h46
  2. Réponses: 2
    Dernier message: 20/06/2006, 10h15
  3. Réponses: 2
    Dernier message: 03/06/2006, 00h16
  4. [XP Pro]Problème avec plusieurs profils utilisateurs sur PC
    Par marsup54 dans le forum Windows XP
    Réponses: 8
    Dernier message: 27/04/2005, 10h32
  5. IF THEN ELSE imbriqués
    Par nuke_y dans le forum Oracle
    Réponses: 2
    Dernier message: 15/11/2004, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo