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 régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2004
    Messages
    38
    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 : 38
    Points : 91
    Points
    91

    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 régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2004
    Messages
    38
    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 : 38
    Points : 91
    Points
    91

    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
    Inscrit en
    janvier 2007
    Messages
    8 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 374
    Points : 19 394
    Points
    19 394
    Billets dans le blog
    4

    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
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  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
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 449
    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 : 2 449
    Points : 3 850
    Points
    3 850

    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
    Inscrit en
    janvier 2007
    Messages
    8 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 374
    Points : 19 394
    Points
    19 394
    Billets dans le blog
    4

    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;
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  8. #8
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 449
    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 : 2 449
    Points : 3 850
    Points
    3 850

    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 éprouvé Avatar de guillemouze
    Profil pro
    Inscrit en
    novembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2004
    Messages : 792
    Points : 1 268
    Points
    1 268

    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
    Inscrit en
    janvier 2007
    Messages
    8 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 374
    Points : 19 394
    Points
    19 394
    Billets dans le blog
    4

    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 ...)
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

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

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 615
    Points : 1 457
    Points
    1 457
    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 régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2004
    Messages
    38
    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 : 38
    Points : 91
    Points
    91

    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, 09h46
  2. Réponses: 2
    Dernier message: 20/06/2006, 09h15
  3. Réponses: 2
    Dernier message: 02/06/2006, 23h16
  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, 09h32
  5. IF THEN ELSE imbriqués
    Par nuke_y dans le forum Oracle
    Réponses: 2
    Dernier message: 15/11/2004, 14h57

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