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

  1. #1
    Membre à l'essai 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
    Points : 20
    Points
    20
    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 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    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;
    Philippe.

  3. #3
    Membre à l'essai 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
    Points : 20
    Points
    20
    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 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    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
    Philippe.

  5. #5
    Membre à l'essai 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
    Points : 20
    Points
    20
    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 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    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 ?
    Philippe.

  7. #7
    Membre à l'essai 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
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    Désoler, trop de boulot pour être revenu au cours de la journée.

    Citation Envoyé par Ph. B. Voir le message
    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
    Pas vraiment
    J'ai essayé et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        vWorksheet.Cells[2,2].value:='Allo';
        vWorksheet.Cells.Item[3,3].value:='La Terre';
    Donnes le même résultat.

    Citation Envoyé par Ph. B. Voir le message
    Plus précisément, c'est dans la question : Comment insérer ou supprimer des cellules ?
    Concernant ma question... j'ai vu et relu la FAQ...
    Si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        vWorksheet.Cells.Item[3,3].value:='La Terre';
        vWorksheet.Range['D4','D4'].value:='Je suis perdu';
    La première ligne écris la valeur à C3 et l'autre à D4. La fonction utiliser est Cells en "chiffres" et Range en "lettre et chiffre".

    J'ai fait un essai... et ça commence à fonctionner
    Voila à syntaxe du tri:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vWorksheet.range.item[5,2,20,2].sort(vWorksheet.range.item[5,2],xlAscending,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,xlGuess, 1, False, xlTopToBottom, EmptyParam);
    Avec ce message d'erreur:

    Il y a 12 paramètres pour la fonction "Sort"... je me demande si il ne manque pas quelque chose...

    Bonne journée
    Stef

  8. #8
    Membre à l'essai 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
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    J'ai pu refaire un essai ce matin. Toujours le même message d'erreur

    Sur le site de Microsoft sur la méthode Sort: http://msdn.microsoft.com/en-us/libr.../ff840646.aspx
    La syntaxe est :
    Syntax
    expression .Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)
    Avec toute une flopée de paramètres :
    Key1 - Optional -Variant
    Specifies the first sort field, either as a range name (String) or Range object; determines the values to be sorted.

    Order1-Optional-XlSortOrder
    Determines the sort order for the values specified in Key1.

    Key2-Optional-Variant
    Second sort field; cannot be used when sorting a pivot table.

    Type-Optional-Variant
    Specified which elements are to be sorted.

    Order2-Optional-XlSortOrder
    Determines the sort order for the values specified in Key2.

    Key3-Optional-Variant
    Third sort field; cannot be used when sorting a pivot table.

    Order3-Optional-XlSortOrder
    Determines the sort order for the values specified in Key3.

    Header-Optional-XlYesNoGuess
    Specifies whether the first row contains header information. xlNo is the default value; specify xlGuess if you want Excel to attempt to determine the header.

    OrderCustom-Optional-Variant
    Specifies a one-based integer offset into the list of custom sort orders.

    MatchCase-Optional-Variant
    Set to True to perform a case-sensitive sort, False to perform non-case sensitive sort; cannot be used with pivot tables.

    Orientation-Optional-XlSortOrientation
    Specifies if the sort should be in acending or decending order.

    SortMethod-Optional-XlSortMethod
    Specifies the sort method.

    DataOption1-Optional-XlSortDataOption
    Specifies how to sort text in the range specified in Key1; does not apply to pivot table sorting.

    DataOption2-Optional-XlSortDataOption
    Specifies how to sort text in the range specified in Key2; does not apply to pivot table sorting.

    DataOption3-Optional XlSortDataOption
    Specifies how to sort text in the range specified in Key3; does not apply to pivot table sorting.
    Ma ligne de code pour le tri est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet.range.item[2,5,2,20].sort(vWorksheet.range.item[2,5],xlAscending,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, xlNo, EmptyParam, False, xlSortColumns, EmptyParam, xlSortnormal, EmptyParam, EmptyParam);
    Les données à trier sont dans la colonne B de la ligne 5 à 20. Mais toujours le même message d'erreur : "Nombre de paramètre non valide"
    Là je en vois plus du tout...

    Merci pour votre aide
    Stef

  9. #9
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    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 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Hicks90 Voir le message
    Ma ligne de code pour le tri est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet.range.item[2,5,2,20].sort(vWorksheet.range.item[2,5],xlAscending,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, xlNo, EmptyParam, False, xlSortColumns, EmptyParam, xlSortnormal, EmptyParam, EmptyParam);
    J'écrirais plutôt un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet.Range[Worksheet.Cells.Item[2, 5], Worksheet.Cells.Item[2, 20]].Sort(Worksheet.Cells.Item[2, 5],...);
    Et en passant par des variables intermédiaires, pour la lisibilité...
    Philippe.

  10. #10
    Membre à l'essai 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
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    Impeccable ! Ca fonctionne.
    Merci pour ton aide.
    @+
    Stef

+ 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, 17h15
  2. Tri après l'utilisation de la fonction "explode"
    Par celinedecham dans le forum Langage
    Réponses: 7
    Dernier message: 04/10/2008, 21h40
  3. Réponses: 10
    Dernier message: 22/01/2008, 17h25
  4. [VBA-EXCEL] Utiliser la fonction recherche
    Par plasticgoat dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2007, 16h06
  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, 13h10

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