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 :


Code de ma procédure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;