Amélioration de notre macro
Il y a quatre jours, je vous ai présenté une macro dont l’objet était de sélectionner, à l’intérieur de la sélection active, les seules cellules non vides.
La macro identifiait d’un côté les cellules contenant des formules et de l’autre celles contenant des constantes puis, si les deux ensembles étaient non vides, les fusionnaient grâce à la commande Union.
Pour cet exemple – comme très souvent avec le VBA – non seulement il y a de multiples façons d’atteindre ce même objectif, mais certaines sont nettement plus compactes que les autres. Voici ce que l’on peut obtenir quand on a activé la macro après avoir sélectionné le bloc A1:D5.
 Dans ce cas précis, nous pouvons remplacer les 18 instructions de la macro originale par seulement deux instructions ayant exactement le même effet :
Dans ce cas précis, nous pouvons remplacer les 18 instructions de la macro originale par seulement deux instructions ayant exactement le même effet :
On Error Resume Next
Union(Selection.SpecialCells(xlCellTypeFormulas, 23), _
Selection.SpecialCells(xlCellTypeConstants, 23)).Select
Quand vous rendez ainsi un code nettement plus compact, vous êtes en situation de win-win : d’un côté, vous économisez de la place mémoire et du temps de calcul ; de l’autre, vous rendez la macro nettement plus lisible, et donc plus économique du point de vue de la maintenance.
    
    La macro identifiait d’un côté les cellules contenant des formules et de l’autre celles contenant des constantes puis, si les deux ensembles étaient non vides, les fusionnaient grâce à la commande Union.
Pour cet exemple – comme très souvent avec le VBA – non seulement il y a de multiples façons d’atteindre ce même objectif, mais certaines sont nettement plus compactes que les autres. Voici ce que l’on peut obtenir quand on a activé la macro après avoir sélectionné le bloc A1:D5.
 Dans ce cas précis, nous pouvons remplacer les 18 instructions de la macro originale par seulement deux instructions ayant exactement le même effet :
Dans ce cas précis, nous pouvons remplacer les 18 instructions de la macro originale par seulement deux instructions ayant exactement le même effet :On Error Resume Next
Union(Selection.SpecialCells(xlCellTypeFormulas, 23), _
Selection.SpecialCells(xlCellTypeConstants, 23)).Select
Quand vous rendez ainsi un code nettement plus compact, vous êtes en situation de win-win : d’un côté, vous économisez de la place mémoire et du temps de calcul ; de l’autre, vous rendez la macro nettement plus lisible, et donc plus économique du point de vue de la maintenance.

 Cette macro n’est pas bien compliquée. Il faut toutefois ne pas oublier le
Cette macro n’est pas bien compliquée. Il faut toutefois ne pas oublier le  Une fois le message de la barre d’état ainsi personnalisé, il prend le pas sur les messages qu’Excel y affiche normalement.
Une fois le message de la barre d’état ainsi personnalisé, il prend le pas sur les messages qu’Excel y affiche normalement. Et pourtant, le compteur, dans la barre d'état, n’affiche rien dans le cas de la figure B.
Et pourtant, le compteur, dans la barre d'état, n’affiche rien dans le cas de la figure B. Ce menu contextuel vous permet, pour les cellules sélectionnées lors de l’appel du menu, de ne rien afficher (Aucun), d’afficher la moyenne des valeurs concernées, ou le compteur – la fonction NbVal() –, ou les chiffres – la fonction Nb() –, ou le maximum, ou le minimum, ou enfin la somme.
Ce menu contextuel vous permet, pour les cellules sélectionnées lors de l’appel du menu, de ne rien afficher (Aucun), d’afficher la moyenne des valeurs concernées, ou le compteur – la fonction NbVal() –, ou les chiffres – la fonction Nb() –, ou le maximum, ou le minimum, ou enfin la somme. La feuille actuelle est la feuille « Noms », la feuille « Données » étant une autre feuille dans laquelle nous avons fait une modification juste avant de revenir dans la feuille « Noms ».
La feuille actuelle est la feuille « Noms », la feuille « Données » étant une autre feuille dans laquelle nous avons fait une modification juste avant de revenir dans la feuille « Noms ». 
     

