septembre
2011
Si vous lancez cette procédure sous 2007 et postérieurs :
Sub Dénombrer()
MsgBox Worksheets(1).Cells.Count
End Sub
vous obtiendrez une Erreur d’exécution’6’ : Dépassement de capacité.
Pourquoi ?
Parce que, comme précisé dans l’aide, la propriété Count de l’objet Range renvoie une valeur de type Long qui représente le nombre d’objets de la collection.
Hors les variables numériques de type long sont limitées en entiers positifs à 2 147 483 648.
Une Feuille de calcul Excel à partir de 2007 comprenant plus de 17 milliards de cellules, on se heurte à un dépassement de capacité et donc à un plantage.
Il faut à partir de cette version utiliser la propriété CountLarge de l’Objet Range qui, elle retourne un variant et ne pose donc pas de problème.
Sub DénombrerLarge()
MsgBox Worksheets(1).Cells.CountLarge
End Sub
La propriété count a été retenue sous 2007 pour la rétrocompatibilité, mais des problèmes verront surement le jour dans certains codes.
En effet la propriété Count de l’Objet Range est opérationnelle sous 2007 et postérieurs tant que l’on se situe dans la limite du Long.
CountLarge est toujours opérationnelle sous 2007 et postérieurs, par contre elle ne peut-être employée sur un classeur à enregistrer sous une version antérieure car elle provoquera immanquablement une erreur d’exécution ‘438’ : propriété ou méthode non gérée par cet objet… Donc pas simple à gérer.
Didier Gonard
Articles récents
- Vidéo formative: Excel 2010 – Comparer des listes grâce à la mise en forme conditionnelle
- Office 2010 Tool: Compatibility Inspector
- [ACCESS] Gérez une liste de saisie dont les enregistrements sont filtrés dynamiquement lors d’une saisie de texte
- [Article] L’opérateur SQL IN : Comment utiliser une liste d’éléments dans une requête
- La Propriété Count de l’objet Range dangereuse à partir d’office 2007