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

API, COM et SDKs Delphi Discussion :

[D7 & Excel]Peut-on trouver la derniere ligne du fichier [FAQ]


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut [D7 & Excel]Peut-on trouver la derniere ligne du fichier
    Bonjour,

    Je me demandais s'il était possible de trouver directement le numéro de la dernière ligne écrite dans un fichier Excel?


    Merci d'avance pour votre aide.

    Isa

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    oui

    je l'ai utilisé pour définir la zone imprimable de mes données générées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WS.PageSetUp.PrintArea := WS.UsedRange[ lcid ].Address[ emptyParam, emptyParam, xlA1, emptyParam, emptyParam ];
    Dans ce cas précis, Le UsedRange.Address renvoie sous forme "A1:B2"

    Donc éventuellement se servir de la case 'BottomRight pour avoir le numéro de la derniere ligne.

    Ou bien, j'ai pas cherché, regarder du coté de UserRange.xxxx

  3. #3
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Merci je vais essayer ...

  4. #4
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Heuu, je comprend pas comment ca marche.

    Le UsedRange me fait une erreur :
    Méthode 'UsedRange' non supportée par l'objet Automation.

  5. #5
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Pour être précis, mois j'ai exactement ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var
    WS : TExcelWorksheet; // composant de Delphi
     
    à l'utilisation, ceci
    WS.UsedRange[ lcid ].Address[ emptyParam, emptyParam, xlA1, emptyParam, emptyParam ];
     
    me renvoie par exemple
    'A1:F52'
    est-ce que WS est du même type ?

  6. #6
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Moi j'ai "OleApplication : variant" que je défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleApplication := CreateOleObject('Excel.Application');

  7. #7
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    et le UsedRanged tu l'utilises comment, peut-tu poster ton code ?

  8. #8
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Ben j'ai juste écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleApplication.UsedRange[1].Address[ emptyParam, emptyParam, xlA1, emptyParam, emptyParam ]; ;
    Mais bon ca ne doit pas être comme ca que cela fonctionne.

  9. #9
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Donc c'est normal, tu utilises UsedRange sur le Type Application.

    Il faut l'utiliser sur le WorkSheet (sur ta feuille).

    du style (je n'ai pas la syntaxe exacte sous la main car je n'utilise pas mes var. Excel comme variant)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleApplication.WorkBook[ x].ActiveWorkSheet.UsedRange ....
    La syntaxe c'est surement pas ca, mais du style...

  10. #10
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Bon je pense que j'en suis pas très loin mais j'ai toujours une erreur : 'Nombre de paramètres non valide'

    mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleApplication.ActiveWorkBook.ActiveSheet.UsedRange[1].Address(xlA1);

  11. #11
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Essaye de suivre la syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UsedRange[ lcid ].Address[ emptyParam, emptyParam, xlA1, emptyParam, emptyParam ];
    avec 1 pour lcid s'il vaut 1 pour toi.

  12. #12
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Au fait c'est quoi lcid???

    Sinon ben ca ne change rien... J'ai toujours le même message.

  13. #13
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    je ne sais pas exactement pour lcid, un identificateur. j'ai pas creusé la question, pour ma part je le récupère lorsque je me connecte à Excel et j'utilise toujours ce 'lcid' récupéré.

    pour la syntaxe, tu fais donc bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
      SResultat: string;
    begin
    ...
    SResultat := OleApplication.ActiveWorkBook.ActiveSheet.UsedRange[1].Address[ emptyParam, emptyParam, xlA1, emptyParam, emptyParam ];
    ...
    ??
    Et tu as un msg d'erreur lors de l'execution ?
    (Attention, il faut des crochets pour Address et non des parenthèses...)

    Sinon, là je ne sais pas pourquoi ca ne fonctionne pas chez toi...

  14. #14
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    J'ai bien tout noté comme tu l'as indiqué.

    Je ne vois vraiment pas d'ou peut venir le problème...

  15. #15
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    tu peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             iDuBout:=XlApp.Worksheetfunction.counta(XlApp.range['H1'].EntireColumn);
    iDuBout est un integer.
    je compte le nombre de lignes sur la colonne H
    J'ai au préalable crée un objet automation.

  16. #16
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Merci beaucoup, ca marche et c'est plus facile.

    Un grand merci a vous deux pour votre aide!!

  17. #17
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Vu que ca marche chez moi, la seule différence c'est que tu utilises des variants.

    Essaye de décomposer l'instruction en castant les types

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      MonClasseur: _workbook;
      MaFeuille: _WorkSheet;
     
    begin
      MonClasseur := OleApllication.ActiveWorkBook;
      MaFeuille := ActiveWorkBook.ActiveWorkSheet;
      MaFeuille.UsedRange............
    end
    et vue que c'est des erreurs à l'exec, peut être mets des ShowMessage() intermédiaire, pour voir si c'est bien la ligne en question qui plante

    Bon courage !

    EDIT:
    Trop tard

  18. #18
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    C'était bien la ligne qui plantais j'avais supprimé tout le code que j'avais autour....

    Je testerais pour voir comme tu me dis.

    Merci beaucoup.

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

Discussions similaires

  1. [Toutes versions] Trouver la derniere ligne d'une plage.
    Par toniob44 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/04/2012, 20h25
  2. [XL-2003] trouver la derniere ligne occupée
    Par tarantino dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/04/2011, 15h07
  3. Trouver la derniere ligne
    Par gilles06 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/02/2008, 10h04
  4. [VBA-Excel]Peut-on insérer des nouvelles lignes au début d'un fichier
    Par Jusomi31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/05/2007, 15h03
  5. [VBA-E] trouver la derniere ligne de mon tableau
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/03/2007, 22h41

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