Pilotage OLE d'Excel : Méthode 'Range' non supportée
Bonjour à tous :)
Soit un classeur Excel. Une feuille contient une zone que je veux pouvoir lire. J'ai suivi cette faq. J'ai traduit certains noms de variables pour que ce soit plus parlant pour moi.
J'ai cette erreur :
http://reho.st/self/5670e14ead9735ca...cb827876e7.png
Code de ma procédure :
Code:
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
Procedure Lire_Zone_A_Imprimer;
Var
Lecture_Seule, Pos_Cellule, Cellule_Pointee, Val_Cellule : variant;
Excel_App : variant; // Objet instance d'Excel (EXCEL.EXE)
Lst_Classeurs : variant; // Lst des classeurs exploités par Excel (maintenant ou AVANT. Liste sauvée ds le rép. de profil utilisateur)
Classeur_Cible : variant; // Classeur exploité
Feuille_Pointee : variant; // Feuille pointee
vLink : variant; // Désigne quoi ? Pointe quoi ? "Link" serait "lien" . Pas un pointeur, mais lien vers quoi ?
Nom_F : string;
Nom_Feuille : AnsiString;
begin
Lecture_Seule := True;
Nom_F := GetCurrentDir + '\' + 'CLASSEUR.XLS';
// Instancier Excel ---------------- // Ici : j'évite une gestion d'exception avec Tst_Process_Present() : si Excel est déjà lancé, pas de Create
if Tst_Process_Present('EXCEL.EXE') = False then
begin
Excel_App := CreateOleObject('Excel.Application'); // Lancer Excel
end
Else
begin
Excel_App := GetActiveOleObject('Excel.Application'); // Se connecter à l'instantce d''Excel si acif
end;
Excel_App.Visible := False;
// Ouvrir le classeur -------------------------
Lst_Classeurs := Excel_App.WorkBooks;
Lecture_Seule := True;
vLink := Unassigned;
Classeur_Cible := Lst_Classeurs.Open(Nom_F, vLink, Lecture_Seule);
// Sélectionner la feuille ------------------
Nom_Feuille := 'Impression';
Feuille_Pointee := Classeur_Cible.WorkSheets[Nom_Feuille]; // Le bug est ici V. plus bas le message d'erreur
// à partir d'ici, non encore débogué
// Pointer la cellule -------------------------
Pos_Cellule := 'A4';
Cellule_Pointee := Classeur_Cible.Worksheets.Range[Pos_Cellule];
Val_Cellule := Classeur_Cible.Worksheet.Cellule_Pointee.Value;
// Fermer le classeur
Excel_App.Quit;
Excel_App := UnAssigned;
end; |
J'avais déjà fait qqch comme ça sous D7, et XE7 me le compile toujours. Mais l'instruction Select ne figure pas sur la faq. Je ne l'ai donc pas utilisée ds l'exemple qui plante.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
// Ouvrir le classeur
XL := CreateOLEObject('Excel.application');
XL.workbooks.open(Nom_F_XLS); // Ouvrir le fichier XLS
XL.Visible := False;
XL.sheets['Nb_Sites'].select; // Sélectionner la feuille sur laquelle on travaille
Colonne := 2; // Nb sites
Ligne := 1; // Dictionnaires
Chn := XL.cells[Ligne, Colonne].value;
Nb_Dictionnaires := StrToInt(Chn);
// Fermer le classeur
XL.Quit;
XL := UnAssigned; |