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