Page 1 sur 1

[R] Excel : Pb avec ExcelSheeetList

Posté : lun. 26 mars 2012 17:56
par ltrautoit
Bonjour,

Je souhaite utiliser la fonction "_ExcelSheetList" dans ma macro, mais je constate le problème suivant :

Si j'utilise un nouveau fichier excel (ouvert avec _ExcelBookNew), réponse OK, j'ai bien la liste des feuilles excel.

Code : Tout sélectionner

Local $oExcel = _ExcelBookNew() 
    $aArray = _ExcelSheetList($oExcel)
_arraydisplay($aArray)
 
Si j'utilise un fichier excel déja ouvert (que je rattache avec succès via _ExcelBookAttach), j'ai une erreur de la part de l'UDF Excel :
Line 1055
Local îTemp = $oExcel.ActiveWorkbook
Error : The requested action with this object has failed
Autoit v3.3.6.1
UDF Excel : La version d'origine incluse (1.5, je crois)

Auriez-vous idées, pistes, codes pour résoudre cela ?

Merci.

Edit : Correction du titre (avant de me faire tirer les oreilles)

Re: [..] Excel : Pb avec ExcelSheeetList

Posté : mar. 27 mars 2012 13:15
par TopXm
Salut,

Il est bien indiqué dans l'aide de _ExcelSheetList

<<An Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()>>

J'ai fait l'essai et en effet avec un _ExcelBookAttach le ExcelSheetList plante :
► Afficher le texte

Re: [R] Excel : Pb avec ExcelSheeetList

Posté : jeu. 29 mars 2012 11:31
par ltrautoit
Bonjour,

C'était justement ca le problème que j'aurais souhaité résoudre.

Par curiosité j'aurais bien voulu savoir le pourquoi du comment, ceci dit j'ai trouvé une solution palliative.

Pb Fermé.

Re: [R] Excel : Pb avec ExcelSheeetList

Posté : jeu. 29 mars 2012 14:13
par tioxine
Bonjour,

Il y a un bug dans le plugin Excel
En effet , quand on utilise _ExcelBookAttach , l'objet ramené est $o_Result.Application.Workbooks , soit un Workbook , alors que dans le create, l'objet est juste .Application

Hors, la fct _ExcelSheetList présuppose que l'objet est de type .Application, ce qui est faux si on vient d'un attach ou d'un open

Code : Tout sélectionner

Func _ExcelSheetList($oExcel)
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    Local $iTemp = $oExcel.ActiveWorkbook.Sheets.Count
    Local $aSheets[$iTemp + 1]
    $aSheets[0] = $iTemp
    For $xx = 1 To $iTemp
        $aSheets[$xx] = $oExcel.ActiveWorkbook.Sheets($xx).Name
    Next
    Return $aSheets
EndFunc   ;==>_ExcelSheetList
 

Donc, correction du code

Code : Tout sélectionner

    Local $iTemp
    Local $obj

    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    Local $s_Name = String(ObjName($oExcel))
    If ($s_Name <> "_Workbook") Then
        $obj = $oExcel.ActiveWorkbook
    Else
        $obj = $oExcel
    EndIf
    $iTemp = $obj.Sheets.Count
    Local $aSheets[$iTemp + 1]
    $aSheets[0] = $iTemp
    For $xx = 1 To $iTemp
        $aSheets[$xx] = $obj.Sheets($xx).Name
    Next
    Return $aSheets
 
A+