Confronté à un problème pour lequel je n'ai pas trouvé de solution, à savoir lire le commentaire d'une cellule excel et gérer les erreurs générées (en particulier s'il n'y a pas de commentaire à lire), je vous propose ma solution :
;===============================================================================
;
; Description: Read a comment from a cell.
; Syntax: $var = _ExcelCommentRead($oExcel, $sRangeOrRow, $iColumn = 1)
; Parameter(s): $oExcel - An Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
; $sRangeOrRow - Either an A1 range, or an integer row number to read from if using R1C1
; $iColumn - The column to read from if using R1C1 (default = 1)
; Requirement(s): None
; Return Value(s): On Success - Returns the string contents of the comment
; On Failure - Returns 0 and sets @error on errors:
; @error=1 - Specified object does not exist
; Author(s): SEO <locodarwin at yahoo dot com>
; Note(s): A non-visible comment will show up as a red, earmarked corner of the affected cell(s).
;
; Ajout d'une fonction permettant de gérer les erreurs critiques
; (comme dans le cas ou la cellule lue n'a pas de commentaire)
; Restrictions : 1 - Utilise un objet COM, donc dépend fortement de l'OS et du logiciel employé
; 2 - Utilise la fonction ObjEvent, qui ne peut être employé qu'une seule fois simultanément
;===============================================================================
Func _ExcelCommentRead($oExcel, $sRangeOrRow, $iColumn = 1)
Global $oErr = ObjEvent("AutoIt.Error", "_ErrFunc")
If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
If NOT StringRegExp($sRangeOrRow, "[A-Z,a-z]", 0) Then
Return $oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Comment.Text
else
Return $oExcel.Activesheet.Range($sRangeOrRow).Comment.Text
EndIf
EndFunc ;==>_ExcelCommentRead
; Fonction d'erreur pour gérer le cas ou il n'y a pas de commentaire à lire
Func _ErrFunc($oError)
$oErr.stop ; Dit que nous voulons arrèter de recevoir des événements
$oErr=0
EndFunc
Je pense qu'elle doit pour ête appliquée/adaptée aux autres fonctions du même type comme : _ExcelCommentShow, _ExcelCommentDelete, _ExcelCommentAdd
Je ne suis pas sur qu'elle soit applicable à beaucoup de cas mais come on dit : Hope it helps !