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 :

Excel : utilisation de la fonction tri


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Hicks90
    Homme Profil pro
    Support technique en recherche
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Support technique en recherche

    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Par défaut Excel : utilisation de la fonction tri
    Bonjour,
    Dans un nouveau projet je dois ajouté des données à la suite dans un fichier Excel. Grâce à la FAQ et à Google, j'ouvre Excel, place les données dans les bonne colonne/ligne sans soucis.
    Mais voilà, une nouvelle demande des utilisateurs. Un bloc de donnée devrait être trier... heureusement pour l'instant sur un seul critère... mais qui sait si ils ne vont pas cherchés a me compliquer la vie !
    Les données dans mon fichier excel ressemble à ca :

    1
    4
    8
    3
    67
    3
    2
    43
    34
    76
    Et le tout est dans la colonne B et débute à la ligne 5 (il y a des infos au dessus a ne pas toucher).

    J'ai écris un petit programme de test pour comprendre.
    Les variables utilisées en vrac sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     vMSExcel : variant;
        vXLWorkbooks, vXLWorkbook : variant;
        vWorksheet : variant;
        aSheetName : AnsiString;
        aFileName : AnsiString;
    Il y a bien le "ComObj" dans le Uses.

    L'ouverture de Excel, le chargement de la feuille Excel et le choix de l'onglet se passe comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            try
                    vMSExcel := GetActiveOleObject('Excel.Application');
            except
                    vMSExcel := CreateOleObject('Excel.Application');
            end;
            vMSExcel.Visible := true;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        // Ouvre le fichier Excel
        aFileName := ExtractFilePath(Application.ExeName)+'sort.xls';
        memo1.Lines.Add(aFileName);
     
        vXLWorkbooks := vMSExcel.Workbooks;
        vXLWorkbook := vXLWorkbooks.Open(aFileName);
     
        aSheetName := 'Feuil1';
        vWorksheet := vXLWorkbook.WorkSheets[aSheetName];

    C'est à partir de là que ça coince...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TForm1.Sort_XLSClick(Sender: TObject);
    begin   vWorksheet.Range['B5','B15'].sort(vWorksheet.Range['B5','B5'],'xlAscending',EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,'xlGuess', 1, False, 'xlTopToBottom', EmptyParam);
    end;
    Si je ne met pas entre apostrophe les paramètres: "xlAscending, xlGuess, xlTopToBottom", j'ai un message d'erreur à la compilation : [DCC Erreur] Unit1.pas(53): E2003 Identificateur non déclaré : 'xlAscending'
    Si je place des apostrophes, pas d'erreur de compilation, mais une erreur d’exécution :


    Vous avez une idée, je galère depuis hier...
    Je suis sous Delphi 2009.
    Merci à l'avance pour votre aide.
    Stef

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par Hicks90 Voir le message
    ...Il y a bien le "ComObj" dans le Uses.
    Mais il n'y a pas Excel2000 ou ExcelXP ou autre dans la clause uses ?

    Dans ce cas, il faut introduire les constantes qui sont présentes dans ces unités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const
      xlAscending = $00000001;
      xlDescending = $00000002;
    //...
      xlGuess = $00000000;
      xlNo = $00000002;
      xlYes = $00000001;
    //...
      xlTopToBottom = $00000001;

  3. #3
    Membre averti Avatar de Hicks90
    Homme Profil pro
    Support technique en recherche
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Support technique en recherche

    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Par défaut
    Bonjour,
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,

    Mais il n'y a pas Excel2000 ou ExcelXP ou autre dans la clause uses ?
    Merci pour ta réponse, c'est exactement ça

    J'ai une autre question... que j'avais oublié dans ma question initiale
    Dans mon programme de test j'utilise la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vWorksheet.Range['B5','B20'].sort(vWorksheet.Range['B5','B5']... etc
    Dans le programme que je suis a modifier, j'utilise des variables integer pour les références de cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vWorksheet.Cells[LastLine,1].value:= ... etc
    Dans tout les exemples que j'ai vu avec la fonction Range, Sort (et d'autre) utilises des indices pour les cellules en string ('A1'). Est-ce qu'il est possible des d'utiliser ces fonctions avec des indices en integer ?

    Merci encore,
    Bonne soirée
    Stef

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Citation Envoyé par Hicks90 Voir le message
    Dans le programme que je suis a modifier, j'utilise des variables integer pour les références de cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vWorksheet.Cells[LastLine,1].value:= ... etc
    Dans tout les exemples que j'ai vu avec la fonction Range, Sort (et d'autre) utilises des indices pour les cellules en string ('A1'). Est-ce qu'il est possible des d'utiliser ces fonctions avec des indices en integer ?
    Il manque un petit quelque chose dans la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vWorksheet.Cells.Item[LastLine,1].value:= ... etc
    Et c'était dans la FAQ, même si c'était indirectement...
    Manipulation des cellules

  5. #5
    Membre averti Avatar de Hicks90
    Homme Profil pro
    Support technique en recherche
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Support technique en recherche

    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Par défaut
    Bonjour,
    Citation Envoyé par Ph. B. Voir le message
    Et c'était dans la FAQ, même si c'était indirectement...
    Manipulation des cellules
    Ce doit-être très indirecte... parce que j'ai arpenté la FAQ et cette page en particulier de long en large sans trouver
    Désoler, je suis un boulet...


    Bonne journée
    Stef

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Citation Envoyé par Hicks90 Voir le message
    Ce doit-être très indirecte...
    Plus précisément, c'est dans la question : Comment insérer ou supprimer des cellules ?

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

Discussions similaires

  1. Fonction Tri Excel VBA
    Par Nako_lito dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/08/2009, 16h15
  2. Tri après l'utilisation de la fonction "explode"
    Par celinedecham dans le forum Langage
    Réponses: 7
    Dernier message: 04/10/2008, 20h40
  3. Réponses: 10
    Dernier message: 22/01/2008, 16h25
  4. [VBA-EXCEL] Utiliser la fonction recherche
    Par plasticgoat dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2007, 15h06
  5. [VB.NET][Excel] utiliser des fonction Excel comme xlToRight
    Par Alexj51 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2006, 12h10

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