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 !


29 octobre 2014

Liste à 3 étages et même plus

Les solutions que je vous ai proposées dans les articles précédents fonctionnent très bien pour les listes à deux étages, et représentaient une excellente occasion pour vous de pratiquer la fonction decaler() ! L’inconvénient, c’est que ces solutions ne s’étendent pas facilement à la construction de listes à 3 étages, 4 étages ou même plus !

Pour obtenir une solution totalement générique, il faut ajouter à notre exemple une première ligne de titres (cf. D1 à K1 sur la copie d’écran) puis, pour chacune de des colonnes, donner le nom de la première cellule au bloc (un nom élastique, bien entendu !) formé par les éléments suivants de la colonne.

Dans notre exemple, nous avons donc défini les références suivantes pour les listes déroulantes :
B1 : =continents
B2 : =indirect(B1)
B3 : =indirect(B2)

Cela simplifie aussi le format conditionnel introduit dans le dernier article. De fait, la condition pour remplir en noir B2 devient alors : =estna(equiv(B2; indirect(B1);0)). Notez que ce format conditionnel fonctionne pour les deux cellules du bloc B2:B3 !


En conclusion, nous avons avec cette nouvelle solution la responsabilité de créer un nom pour chaque colonne, mais nous y avons gagné l’existence de listes hiérachiques à autant d’étages  que nécessaire !


23 octobre 2014

Liste à deux étages améliorée

Un problème de la liste déroulante à deux étages est illustré par la copie d’écran ci-dessous …

Vous avez sélectionné Europe en B1 puis France en B2. Tout va bien !
Puis vous modifiez B1 pour choisir l’Amérique…


Le problème est que vous avez l’Amérique en continent et la France en pays, ce qui pose un problème et devrait – si votre modèle est bien conçu – alerter l’utilisateur.

Certes, vous pourriez ajouter une macro événementielle qui, dès que l’on modifie B1, efface B2.

Pour ma part, je n’utilise les macros événementielles que dans les situations où je n’ai pas d’autre choix. Or, ici, nous avons une autre solution, bien plus simple.

Il suffit en effet de donner à la cellule B2 un format conditionnel affichant un fond noir dès que le pays en question n’appartient pas au continent affiché en B1. Nous voyons en bas de la copie d'écran comment ce format conditionnel a été défiini.

Maintenant, la cellule B2 est toute noire, on voit immédiatement l’erreur et on la corrige, soit en effaçant B2, soit en sélectionnant un pays correspondant bien au nouveau continent.