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

Delphi Discussion :

Petit problème d'algo


Sujet :

Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut Petit problème d'algo
    Salut à tous, j'ai fais un petit algo qui doit parcourir toutes les feuilles d'un fichier excel afin de determiner quel est la dernière et de pouvoir travailler dessus.

    Pour tester mon algo j'utilise un fichier excel comprenant 31 feuilles exactement. Mon algo devrait donc parcourir l'ensemble des feuilles excel afin d'ouvrir au final la 31ème feuille pour executer la suite de mon application.

    J'ai procédé de la manière suivante :

    1) Je vérifie que la feuille 1 ne soit pas vide
    • Si elle est vide abandon du traitement
    • sinon aller à 2)

    2)Je vérifie si la feuille suivante est vide ou non
    • Si elle est vide alors on garde la feuille précédente
    • sinon on réexecute 2) tant que la feuille suivante soit vide

    (Pour vérifier si une feuille est vide ou non on vérifie simplement que la case A1 ne soit pas vide.

    Voici mon algo :

    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
     j:=1;
         feuille:=false;
         XLWorksheet := XLWorkbook.WorkSheets[j];
         titre:=XLWorksheet.range['A1'];
           if (titre<>'') then
             begin
               j:=j+1;
               showmessage(inttostr(j));
               While (feuille=false) do
                  begin
                     showmessage(inttostr(j));
                     XLWorksheet := XLWorkbook.WorkSheets[j];
                     titre:=XLWorksheet.range['A1'];
                     if (titre<>'') then
                        begin
                           showmessage('Ok');
                           j:=j+1;
                           feuille:=false;
                        end
                     else
                        begin
                           ShowMessage('titre vide');
                           XLWorksheet := XLWorkbook.WorkSheets[j-1];
                           feuille:=true;
                        end;
                  end;
             end;
    Voilà comme vous pouvez le constater j'ai placé des showMessage pour suivre l'évolution de mon code lors de l'exécution du prog, je parcours donc bien mes feuilles excel, cependant alors que l'algo devrait aller jusqu'à la feuille32 (31 + 1) et mémoriser donc la feuille 31 (32 - 1) puisque la feuille 32 n'existe pas, l'algo va jusqu'à la feuille 33 et plante ensuite.

    Quelqu'un verrait-il où je me suis planté ? (le ShowMessage "Titre vide" n'apparait jamais ce qui veut dire que je ne rentre as dans le else mais je ne comprends pas pkoi)

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    Yep !

    Quelqu'un verrait-il où je me suis planté ?
    Vi !
    Tu ne fais aucune vérification de ton incrémentation de J !
    Vient un moment où tu vas demander à Excel d'ouvrir une feuille qui
    n'existe pas (32e ou 33e, j'ai pas bien compris ton truc).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                     XLWorksheet := XLWorkbook.WorkSheets[j];
                     titre:=XLWorksheet.range['A1'];
    Sur une feuille qui n'existe pas et sans gestion d'erreur, ça peut faire mal !

    Je pense que le 'blème est là.

    Mes 2 cts,
    JP

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    Citation Envoyé par Jipété
    Vient un moment où tu vas demander à Excel d'ouvrir une feuille qui
    n'existe pas (32e ou 33e, j'ai pas bien compris ton truc).

    Ok oui c'est fort possible effectivement, seulement y'a une fonction ou un moyen pour vérifier si la feuille existe ? genre if (feuille 32 exist) then ... ?

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    seulement y'a une fonction ou un moyen pour vérifier si la feuille existe ? genre if (feuille 32 exist) then ... ?
    Faudrait p'têt' voir du côté d'Excel et VBA, qu'est-ce que eux renvoient
    si on veut ouvrir une feuille inexistante ?

    JP

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    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 491
    Par défaut
    salut

    une simplification

    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
         j:=1;
         feuille:=false;
         While (feuille=false) do
         begin
           showmessage(inttostr(j));
           XLWorksheet := XLWorkbook.WorkSheets[j];
           titre:=XLWorksheet.range['A1'];
           if (titre<>'') then
           begin
             showmessage('Ok');
             j:=j+1;
             feuille:=false;
           end
           else
           begin
             ShowMessage('titre vide');
             XLWorksheet := XLWorkbook.WorkSheets[j];
             feuille:=true;
           end;
         end;
    @+ Phil

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    Problème résolu, plus besoin de aprcouris tout le fichiers et toutes les feuilles pour asavoir quelle est la dernière, suffit simplement de compter le nombre de feuilles présentes dans le fichier grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XLWorkbook.WorkSheets.count;
    Merci à Anapurna qui m'a permis de trouver cette solution dans un autre topic.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème d'algo sur les entiers
    Par Bebuck dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 21/09/2011, 22h04
  2. Un petit problème dans un petit algo!
    Par Pierre-Hakim dans le forum Général Python
    Réponses: 3
    Dernier message: 29/10/2008, 23h29
  3. un petit problème d'algo
    Par supertramp dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/10/2004, 20h13
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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