Monsieur Excel
Pour tout savoir faire sur Excel !

26 novembre 2014

Une formule enfin lisible...

Nous apportons dans cet article la solution au problème posé dans l’article précédent.

La première chose que j’ai constatée est que la séquence $D$58+$D$71 +$B$110-$B$125 apparaissait à 11 reprises dans la formule. J’ai donc créé une cellule à gauche, nommée Cal_01, avec cette formule.

J’ai ensuite créé deux autres cellules nommées, la première – ADT – avec la formule =annee(Der_traité) et la seconde – API – avec la formule =annee(Prem_inc).

Enfin, j’ai provoqué un retour chariot après chaque SI principal grâce à la combinaison [Alt]-[Entrée].

Voici le résultat :


Comparez cette formule avec celle de l’article précédent…
C’est le jour et la nuit !

On constate que la formule effectue une double comparaison de API et Year d’une part et de ADT et Year d’autre part. Tout cela se présente donc comme la « simple » somme de six composants.

Remarque 1 – On aurait pu encore raccourcir un peu cette formule en nommant MDT la formule =mois(der_traité) mais cela ne nous a pas paru nécessaire…

Remarque 2 – Cette formule aurait pu être remplacée par une macro-fonction. Ceci dit, j’essaye de les utiliser le moins possible car mes clients – qui ne sont en général pas à l’aise avec le VBA – ont plus de mal à s’approprier un modèle comportant du code VBA.

En conclusion, vous voyez bien dans cet exemple, en comparant la solution ci-dessus à la formule originale, ce que l’on peut gagner avec une procédure d’audit et amélioration d’un modèle…


21 novembre 2014

Une formule très complexe !

Je fais du conseil en modélisation depuis 1967, donc depuis 47 ans déjà. Dans ce cadre, j’ai créé et/ou audité et/ou amélioré les modèles de plus de 100 entreprises dans plus de 10 pays. Parmi ces entreprises, j’ai travaillé pour les sociétés pharmaceutiques suivantes : Aventis, Johnson & Johnson, Lilly France, Pasteur Mérieux, Sanofi et Smithkline Beecham.

Hier, je travaillais chez l’une de ces entreprises et j’ai rencontré une formule qui est probablement la plus complexe que j’aie jamais rencontrée lors de telles interventions. Cette formule était reproduite sur 12 colonnes, une fois par mois de l’année (avec de petites différences en janvier et décembre), et apparaissait dans huit blocs horizontaux consécutifs..

Voici la formule pour le mois de février :


Remarque – Quand on édite la formule, on voit bien les différents éléments dans des couleurs différentes, ce qui est une excellente idée de la part de Microsoft. Ce qui est regrettable, c’est qu’il n’y ait pas la possibilité d’augmenter la taille de la police ou de disposer d’une loupe. En effet, malgré les couleurs, avec de petits yeux comme les miens, il est difficile de bien associer les parenthèses fermantes aux parenthèses ouvrantes.

La question que je vous pose, et à laquelle vous trouverez une réponse dans le prochain article, est donc : « Que feriez-vous dans une telle situation pour rendre la formule plus compréhensible et même – dans la mesure du possible – auditable ? »


16 novembre 2014

Calcul de l’espace libre

Aujourd'hui, nous vous proposons une petite fonction macro dont le seul but est de calculer l’espace libre sur un support donné.

Il suffit d’écrire =libre("C:") pour calculer l’espace libre sur le disque C.

Bous affichons en commentaire, dans la copie d'écran ci-dessous, la formule entrée en B1 et reproduite ensuite vers le bas.


A l’aide de cette fonction, on peut par exemple vérifier si un support contient encore assez de place pour que l’on puisse y enregistrer un fichier donné.

Ce qui est particulièrement intéressant dans cette fonction, c’est que nous avons une preuve de plus du contrôle que nous pouvons avoir – via Excel – sur notre environnement.


10 novembre 2014

La liste déroulante « interactive »

Dans le monde Excel, il est rare qu’une innovation réelle voie le jour.

Cela a été le cas il y a deux ans avec le concept de survol de la souris découvert par Jordan Goldmeier. Vous en aurez tous les détails avec les trois articles suivants :

« Une macro sensible au passage de la souris » du 23 juillet 2012

« Un splendide usage du survol de souris ! » du 28 juillet 2012

« Un survol de souris vraiment bluffant ! » du 19 octobre 2013.

Je suis tombé il y a deux mois sur une autre invention originale, même si sa portée est  moins grande, la notion de « liste déroulante interactive ». Nous prendrons comme départ la liste de 100 acteurs utilisée dans l’article précédent, mais avec cette fois-ci le prénom de l’acteur avant son nom, la liste originale étant quand même triée en fonction du nom.

L’idée totalement innovante que nous allons mettre en œuvre aujourd’hui consiste à créer une liste déroulante interactive : on tape une séquence de caractères en B2, puis on déroule le menu : la liste déroulante est alors limitée à tous les acteurs dont le prénom-nom contient la séquence en question .

Les deux copies d’écran encadrées de bleu montrent ce que devient la liste déroulante quand on entre préalablement en B2 les séquences « oo » ou « ba ».

Pour obtenir ce résultat, nous avons défini le menu déroulant via une validation par liste avec la formule =acteurs. Ce nom est lui-même défini par =decaler('Liste dér.'!$E$2;;;max('Liste dér.'!$D:$D)).

Bien entendu, si l’on fait cela, on ne pourra plus taper une séquence en B2. La clef est donc, lors de la création de la validation par liste, de passer par l’onglet « Alerte d’erreur » et de décocher « Quand des données non valides sont tapées » !

En D2, recopiée vers le bas, nous avons la formule =D1+SI(estnum(cherche($B$2;A2));1;0) .
Et, en E2, copiée vers le bas, la formule =sierreur(index(A:A;equiv(ligne()-1;D:D;0));"").


Par rapport à la solution présentée dans notre dernier article, cette solution est bien entendu plus lourde car elle requiert deux colonnes supplémentaires. Mais le temps qu’elle peut vous gagner lors de la recherche dans de grandes listes déroulantes est sans mesure !

Remarque – Il y a une autre différence. Dans l’article précédent, on se cadrait sur le début du nom de l’acteur. Ici, on cherche simplement une séquence de caractères placée n’importe où dans le prénom-nom.

L’article original est dû à RajExcel :
Video Tutorial : Create a searchable drop down list in Excel 2013

Si vous consultez la vidéo, vous verrez que ma solution est une amélioration de celle proposée par Raj. Ceci dit, je lui tire mon chapeau pour cette innovation qui – à mon sens – est d’un grand intérêt pratique.


04 novembre 2014

Liste déroulante trop longue

Parfois, quand on effectue une recherche dans une liste déroulante trop longue, cela peut prendre du temps de trouver tel ou tel résultat.

D’autant que la limitation d’Excel – dont je ne comprends pas le bien-fondé ! – à afficher seulement 8 options, alors qu’on pourrait en mettre bien plus, ne simplifie pas la tâche.

C’est pourquoi, dans certains de mes modèles basés sur de longues listes, j’ai apporté un enrichissement. J’ai ajouté en B1 l’identification du résultat à partir duquel je souhaite débuter ma recherche. Dans l’exemple ci-dessous, j’indique que je souhaite chercher à partir des noms commençant par « Mad ».


Dans la cellule B2, je calcule le numéro de la première ligne où l’on trouve ce résultat :
=min(si((gauche(D2:D101;nbcar(B1))=B1);ligne(D2:D101);100))

Cette formule est bien entendu matricielle, donc validée avec [Ctrl]-[Maj]-[Entrée].

Il ne reste plus qu’à définir un nom identifiant les 20 noms à proposer dans la liste. J’ai utilisé le nom L_acteurs, qui est défini par :
=decaler(Déroule!$D$1;Déroule!$B$2-1;0):decaler(Déroule!$D$1;Déroule!$B$2+18;0)

Pour la zone de validation en B3, j’ai donc choisi une liste définie par =L_acteurs

Et nous voyons ci-dessus le résultat : une liste limitée à 20 éléments, et démarrant exactement à l’endroit voulu !