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 remplissage d'un tableau


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut Problème remplissage d'un tableau
    Bonjour,

    j'ai crée un model en word, avec un tableau de deux ligne et 7 colonne, je veux remplir le tableau et ajouter des ligne s'il le faut (sa va être le cas) le code est le suivant :

    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
    try
          DocWord.Connect;
          resu:=true;
        except
          MessageDlg('Word n''est pas installé', mtError, [mbOk], 0);
          Abort;
      end;
      if resu then
        begin
          Repertoire:= ExtractFilePath(Application.ExeName);
          FileName:= repertoire+'Doc/Etat Congé.docx';
          Fichier:= Docword.Documents.Open(FileName, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam,
                                            EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, true);
        Tableau:=fichier.Tables.Item(1);
        prepa.First;i:=2;
        while not prepa.Eof do
          Begin
            tableau.Cell(i,1).range.text:=prepa.FieldValues['Matricule'];
            tableau.Cell(2,2).range.text:=prepa.FieldValues['Nom'];
            tableau.Cell(2,3).range.text:=prepa.FieldValues['Prenom'];
            tableau.Cell(i,4).range.text:=prepa.FieldValues['Exercice'];
            tableau.Cell(i,5).range.text:=prepa.FieldValues['Reliquat'];
            tableau.Cell(i,6).range.text:=prepa.FieldValues['Droit_conge'];
            tableau.Cell(i,7).range.text:=prepa.FieldValues['Jour_restant'];
            tableau.Rows.Add(Tableau.Rows.Item(Tableau.Rows.Count));
            prepa.Next
          End;
        DocWord.Visible:=true;
        docword.Disconnect;
        end;
    le problème est le suivant : a l’exécution les ligne sont ajouter correctement mais les enregistrements de la table ne sont pas prise en compte sauf le premier et le dernier, tous ce qui se trouve entre les deux enregistrement ne sont pas inscrit pourtant les ligne sont ajouter.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    peut être parce-que i n'est jamais incrémenté ? (en fait ce n'est pas une question )

    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
        prepa.First;
     
       i:=2;
        while not prepa.Eof do
          Begin
            inc(i);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ICI
            tableau.Cell(i,2).range.text:=prepa.FieldValues['Nom'];
            tableau.Cell(i,3).range.text:=prepa.FieldValues['Prenom'];
            tableau.Cell(i,1).range.text:=prepa.FieldValues['Matricule'];
            tableau.Cell(i,4).range.text:=prepa.FieldValues['Exercice'];
            tableau.Cell(i,5).range.text:=prepa.FieldValues['Reliquat'];
            tableau.Cell(i,6).range.text:=prepa.FieldValues['Droit_conge'];
            tableau.Cell(i,7).range.text:=prepa.FieldValues['Jour_restant'];
            tableau.Rows.Add(Tableau.Rows.Item(Tableau.Rows.Count));   
            prepa.Next
          End;
    NOTE : je n'ai regardé que ça, pas la méthode, la validité d'ajout de ligne et sa position, ni le fait que i:=2 obligatoirement au départ, le inc(i) peut aussi être positionné ailleurs dans la boucle (après le Next ? selon le tableau de départ)
    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

  3. #3
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    merci de votre réponse, pour l’incrémentation de i n'est pas nécessaire parce que quand la ligne est ajouter, elle est insérer en première position, c'est a dire la première ligne qui existais déjà va être en 2eme, puis un autre ajout de ligne elle sera 3eme etc.

    si sincèrement la valeur de i, le programme va enregistrer toujours dans la dernière ligne du tableau.

    Merci

  4. #4
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    je n'arrive toujours pas à résoudre mon problème, peut être un screen vous aidera à m'aider a résoudre le problème.

    Nom : tableau.jpg
Affichages : 368
Taille : 61,8 Ko

    comme vous pouvez le voir il prend seulement en charge le premier enregistrement et le dernier, tout ce qui se trouve entre les deux ne se remplit pas dans le tableau, sachant qu'il parcourt toute la table enregistrement par enregistrement.

    voila
    Merci

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


    as tu essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau.Cell(i,2).range.text := prepa.FieldValues['...'].AsString
    moi j'utilise cet fonction de word

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         tableau.Cell(Row,Column).Range.InsertAfter(st);
    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

  6. #6
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    salut,

    Pour le asString la compilation est bonne mais quand j’exécute sa me dit opération de variant incorrect ? pourquoi ? je n'ai pas compris j'ai même test de faire une conversion sa ne marche pas

    pour la méthode que vous utilisé(e) sa me met tous les matricule dans la première ligne et première colonne sachant que je change la valeur de i a chaque itération.

    Merci

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

    il faut changer la valeur de "Column" aussi


    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
     
        i:=1;
        while not prepa.Eof do
        Begin
             Inc(i);  
            st  :=prepa.FieldValues['Nom'];
            tableau.Cell(i,2).range.InsertAfter(st)
            st :=prepa.FieldValues['Prenom'];
            tableau.Cell(i,3).range.InsertAfter(st)
            st :=prepa.FieldValues['Matricule'];
            tableau.Cell(i,1).range.range.InsertAfter(st);
            st :=prepa.FieldValues['Exercice'];
            tableau.Cell(i,4).range.InsertAfter(st);
            st :=prepa.FieldValues['Reliquat'];
            tableau.Cell(i,5).range.InsertAfter(st);
            st :=prepa.FieldValues['Droit_conge'];
            tableau.Cell(i,6).range.InsertAfter(st);
            st := prepa.FieldValues['Jour_restant'];
            tableau.Cell(i,7).range.InsertAfter(st);
     
            //On récupére la derniére ligne
            BeforeRow:=Tableau.Rows.Item(Tableau.Rows.Count);
            // insere dans l'avant derniere ligne
            Tableau.Rows.Add(BeforeRow);
            prepa.Next
          End;
    voila cela devrais fonctionner
    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

  8. #8
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonsoir, et merci pour ton aide.

    Bon, j'ai pu regler mon probleme avec une autre maniere :

    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
    while not prepa.Eof do
          Begin
            tableau.Rows.Add(Tableau.Rows.Item(Tableau.Rows.Count));
            prepa.Next
          End;
          prepa.First;
        while not prepa.Eof do
          begin
            tableau.Cell(i,1).range.text:=prepa.FieldValues['Matricule'];
            tableau.Cell(i,2).range.text:=prepa.FieldValues['Nom'];
            tableau.Cell(i,3).range.text:=prepa.FieldValues['Prenom'];
            tableau.Cell(i,4).range.text:=prepa.FieldValues['Exercice'];
            tableau.Cell(i,5).range.text:=prepa.FieldValues['Reliquat'];
            tableau.Cell(i,6).range.text:=prepa.FieldValues['Droit_conge'];
            tableau.Cell(i,7).range.text:=prepa.FieldValues['Jour_restant'];
            inc(i);
            prepa.Next
          end;
    et sa marche, je vais dépanner avec sa et quand j'aurais du temps libre je retournerais pour régler le problème.

    sinon j'ai tester ce que tu ma donner et sa écrit toujours dans la même colonne même avec une incrémentation.

    toute fois je vais cocher le bouton resolue meme si je sais que ce n'est pas la meilleur solution .

    Merci a vous

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

Discussions similaires

  1. Thread : Problème remplissage de tableau
    Par orj30754 dans le forum C#
    Réponses: 1
    Dernier message: 16/04/2009, 00h12
  2. Problème de remplissage d'un tableau
    Par Peedro dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 02/10/2008, 19h38
  3. Problème de remplissage d'un tableau de hash
    Par witch dans le forum Langage
    Réponses: 15
    Dernier message: 10/06/2008, 14h45
  4. Réponses: 16
    Dernier message: 01/06/2008, 21h01
  5. Réponses: 3
    Dernier message: 08/02/2008, 21h10

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