J'ai une fonction VBA dans une feuille de calcul qui opère sur une autre feuille de calcul qui est ouverte à une étape antérieure de ma macro. La macro fonctionnait bien mais a récemment commencé à provoquer une erreur 1004 ("Impossible d'obtenir la propriété RoundDown de la classe WorksheetFunction") lors de son exécution.
Je crois comprendre l’erreur provoquée par (un problème d’exécution de RoundDown), mais je ne vois pas pourquoi elle se déclenche dans ma macro. Et ce qui est bizarre, c’est que lorsque je passe en mode Debug et que j’examine le code dans le VBE, l'erreur ne se reproduit pas (malgré rien ne change manifestement).
Est-ce que quelqu'un a une expérience similaire de ce type d'erreur se produisant de manière incohérente et sait ce que je pourrais faire pour la résoudre?
Je connais assez bien VBA/Excel, mais toute suggestion sur les étapes à suivre pour le diagnostiquer serait la bienvenue. Je me demande s’il ya un problème avec le tableur ouvert qui n’est pas prêt, mais je ne vois pas comment.
Le code est ici. L'erreur se produit sur la ligne marquée d'un commentaire.
Public Function GetDatesA(sWorkbookname As String, sSheetname As String, sCell As String) As Variant
Dim vDateList() As Variant
Dim currentCell As Range
Dim n As Long
Set currentCell = Workbooks(sWorkbookname).Worksheets(sSheetname).Range(sCell)
n = 0
Do
If Trim(currentCell.Value) = "" Then
Exit Do
Else
ReDim Preserve vDateList(0 To 1, 0 To n)
vDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0) 'error occcurs on this line
vDateList(1, n) = currentCell.Column
'Debug.Print currentCell.Value
End If
Set currentCell = currentCell.Offset(0, 1)
n = n + 1
Loop While currentCell.Column < XL_LAST_COLUMN
GetDatesA = vDateList
End Function
Les autres détails sont:
Version Excel: 2010
Le fichier en cours d'ouverture réside localement sur mon lecteur C: ma macro est dans un tableur sur le réseau
Le format de fichier pour les deux fichiers est .xls (c.-à-d. Excel 2003) - je n’ai pas la possibilité de le modifier.
Windows 7 (pas que je pense que ce serait pertinent)
J'ai déjà essayé deux points:
Substituez une fonction de feuille de calcul différente (par exemple, Min (currentCell)) et posez également le même problème.
Le fichier ouvert semble déjà résoudre le problème - je me demande s’il est possible que le classeur en cours d’ouverture (plutôt que le classeur principal dans lequel se trouve la macro) ne soit pas activé pour les macros et que cela gêne. Mais même si c'est la cause, je ne sais pas comment contourner le problème!
Des idées?
Cette erreur se produit souvent lorsqu'un argument transmis à la fonction de feuille de calcul n'est pas du type correct ou n'a simplement aucun sens.
Par exemple, j'ai eu ce problème en appelant WorksheetFunction.Asin
avec un argument supérieur à 1. Dans votre cas, je suppose que currentCell.Value
est une valeur non numérique ou non conforme aux paramètres de votre région concernant les nombres.
Oui, le message d'erreur est vraiment erroné.
J'ai eu l'erreur "Impossible d'obtenir * propriété de WorksheetFunction Class" en utilisant les fonctions Transpose, MMult, MDterm et MInverse.
J'ai pu exécuter mon code en plaçant "Option Base 1" dans la section Déclarations (avant le code lui-même) du module concerné dans l'éditeur.
Excel suppose "Option Base 0", ce qui ajoute une ligne et une colonne supplémentaires de cellules vides. Cela provoquera l'erreur et ne sera pas immédiatement évident à voir.
Je suis déjà passé par là, et pour moi, c'était parce que la fourchette de critères n'avait aucun sens, comme Andre l'a dit plus haut.
Voir exemple de formule ci-dessous: .Cells(11, i).Formula = Application.WorksheetFunction.CountIfs(Sheets("Sheet1").Range("AC8:C" & n), "S")
Jetez un coup d'œil à la gamme ... cela n'a aucun sens. A modifié la plage de "AC8:C"
à "AC8:AC"
et cela fonctionnera parfaitement