Case var of

Signaler
Messages postés
41
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
29 août 2010
-
 Utilisateur anonyme -
salut tout le monde;
j'ai un pb au niveau de mon case var of losque mon var arrive à un chiffre de deux position 10 par exemplej'avais declaré var comme integer tout marchait bien de var 0 à var 9, une fois que mon var vaut 10,11,.... le pb se pose, j'ai pensé à refaire la  même chose en declarent var de type string et ça va devenir case var of  
                                         '0':
                                          .
                                           .
                                           '11':
mais malheureusement ça n'a pas marché
comment je peux regler mon problème????
je vous remercie d'avance.

13 réponses

Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
4
Bonjour,
Et du code ?
Cela serait peut être plus clair ....

Dom
Messages postés
41
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
29 août 2010

salut;
voilà une partie de mon code:

for i:=vldebres+2 to  vlfinres-1
    do
    begin
    append;
     fieldbyname('numrc').asstring:=edit1.text;
     fieldbyname('exec').asstring:=edit2.text;
     for j:=vcdebres to vcfinres
     do
      begin
        case j-vcdebres of
       0: fieldbyname('codec').asstring:=(ExCel.GetCell(i,j));
       1: fieldbyname('Actif').asstring:=(ExCel.GetCell(i,j));
        .
        .
        .
        .
        .
      10:fieldbyname('mdebit').asfloat:=modif_chiffre(ExCel.GetCell(i,j));
      11: fieldbyname('mcredit').asfloat:=modif_chiffre(ExCel.GetCell(i,j));


      end;                             //case
      end;                            //fin for j
       post;
   end;                                //fin for i 

merci.
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
4
je te conseille un showmessage de inttostr(j-vcdebres ) pour controler tes valeurs ...

Dom
Messages postés
41
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
29 août 2010

salut
C'est déja fait j'ai enlever tout les showmessage au moment ou j'alais mettre le code ici et mes valeurs sont bonnes elles varient de 0 à 11.
merci
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
4
Au fait c'est quoi ton message d'erreur  ?

Case of c'est qu'avec des entiers .(cf ton 1er message)

si tu rajoutes un else , passe-t-il dedans  ? avec quelle valeur ?

Dom
Messages postés
41
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
29 août 2010

salut;
Au faite le programme ne se compile même pas correctement , il s'arrete au niveau ou mon var devient un chiffre de deux positions ,j'ai même essayé de mettre  sous forme de commentaire les instruction à partir de 10...... et là mon programme se deroule très bien.
                                                                                         merci
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
4
Si il ne se compile pas , je ne vois pas comment tu as pu l'essayer ... ? ... ?
Il faudrait peut être voir ce qu'il y a entre 0 et 10 ... ?

Dom
Messages postés
1724
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
25 novembre 2020
6
Salut,

Je constate qu'à partir du 10ème "case of" tu changes de propriété de champ (AsFloat) :
le problème ne viendrait-il pas plutôt de la function "modif_chiffre" ?

Bonne prog'
Messages postés
41
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
29 août 2010

salut,




pour dom:


je l'ai essayé de var =0 jusqu'à var =9 et ça se compile et s'excute très bien avec le bon résultat voulu biensur en mettant les instructions à partir de var=10 comme commentaire donc ils ne seront pas compilées.

pour japee:
mais non le pb ne se situe pas dans mon AsFloat parceque si je fais le Asfloat lorsque mon var vaut de 0 à 9 mon programme fonctionne normalement.
voilà je vous remercie.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Un truc me chiffone :
for j:=vcdebres to vcfinres
     do
      begin
        case j-vcdebres of
Si vcdebres est affecté à J à chaque tour de boucle, alors j-vcdebres vaut donc toujours zéro, non ?

Je suis tout à fait d'accord avec dominique.stock : si tu as pu exécuter ton programme, c'est qu'il a été compilé !!! Il faudrait employer les bons termes pour décrire ton problème faute de quoi ça va encore partir en vrille

Es-tu réellement sur que ta fonction modif_chiffre soit en mesure de renvoyer un résultat de type Float lorsque J atteint la valeur 10 ? Que contient la cellule dans ce cas ?

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
Messages postés
41
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
29 août 2010

salut;
si je vais ça :

for i:=vldebres+2 to  vlfinres-1
    do
    begin
    append;
     fieldbyname('numrc').asstring:=edit1.text;
     fieldbyname('exec').asstring:=edit2.text;
     for j:=vcdebres to vcfinres
     do
      begin
        case j-vcdebres of
       0: fieldbyname('codec').asstring:=(ExCel.GetCell(i,j));
       1: fieldbyname('Actif').asstring:=(ExCel.GetCell(i,j));
        .
        .
        .
        .
        .
       //  10:fieldbyname('mdebit').asfloat:=modif_chiffre(ExCel.GetCell(i,j));
       //11: fieldbyname('mcredit').asfloat:=modif_chiffre(ExCel.GetCell(i,j));
      end;                             //case
      end;                            //fin for j
       post;
   end;                                //fin for i 

les deux instructions ou mon var vaut 10 et 11 sont mise en commentaire .
Dans ce cas là mon programme tourne bien.
j'ai même essayer
0:fieldbyname('mdebit').asfloat:=modif_chiffre(ExCel.GetCell(i,j));
1:fieldbyname('mcredit').asfloat:=modif_chiffre(ExCel.GetCell(i,j));
2:fieldbyname('montant').asfloat:=modif_chiffre(ExCel.GetCell(i,j));
dans ce cas là aussi mon programme tourne bien.
Donc je n'arrive pas à situer le pb

merci
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonjour

Le problème ne viendrait pas du ExCel.GetCell(i,j)ou plus exactement des valeurs qui se situe dans ta grille ?
Vérifie les valeurs de i et j, puis les valeurs qui se trouvent dans les cellules aux colonnes 10 et 11. Rien de particulier ?
Quel est la définition de ta fonction modif_chiffre. Utilises-tu un variant, un string comme paramètre ?
 
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein

Salut,

Je ne suis pas intervenu jusqu'à maintenant :

Ca fait 12 messages ou les membres tournent en rond pour t'aider.

Tu sais pourquoi ? Car tu nous donnes rien du tout comme information .

Ton ptit bout de code ne sert à rien pour faire avance le schmilblik. Donnes le code dans son entier ou à la rigueur passe un lien ou on peut télécharger ton source : sinon on est pas sortie de l'auberge (Puis comme on l'a déjà dit : M'dame Irma, elle est en vacances du 1 juin au 1 septembre ).

Comme l'a dit (indirectement) WhiteHippo : ton problème ne vient pas  du "case ... of" à proprement parlé. Soit j-vcdebres=10 et le bloc d'instruction est executé, soit il ne l'est pas et rien ne se passe (ou a la rigueur un autre cas). Il n'y a aucune autre possibilité. Donc soit il y a une sucette dans l'une des boucles (et c'est fort probable) For ... Do suite à l'utilisation d'un mauvais type, soit   effectivement la procedure que t'a souligné Whitte Hippo fieldbyname('mdebit').asfloat:=modif_chiffre(ExCel.GetCell(i,j)) , merdouille. Si ca merdouille soit les valeurs de i et j ne sont pas correctes, soit ta procédure modif_chiffre est bringbalante.

Dans tous les cas si tu veux de l'aide va falloir filer tout le code .

@+