Monsieur Excel
Pour tout savoir faire sur Excel !

19 novembre 2017

Enigme 2 – Simulation n°2

Comme toutes les meilleurs solutions que je trouvais avaient les valeurs de 1 à 4 dans le carré central, j’ai donc décidé de figer ces quatre valeurs et de ne plus tirer que les 12 numéros restants. C’est ce que vous pouvez observer dans la copie d’écran suivante. Du coup, j’ai dû modifier toutes en conséquence les formules du bloc E1:H4.

L’insert dans la copie d’écran vous montre les 12 formules restantes dans ce bloc. Certes, j’aurais pu ne faire qu’une seule formule, la même dans les 12 cellules, à grand renfort de fonctions ligne() et colonne(), mais ces formules auraient été assez lourdes…


Toutes les autres formules de la feuille restent inchangées. J’ai aussi modifié la macro car cela n’avait plus de sens d’effectuer autant de tirages. En effet, après quelques tâtonnements, j’ai découvert qu’il suffisait de 3.000 itérations – au lieu de 100.000 ! – et 2 à 3 secondes pour trouver à tous les coups la solution optimale de 352, comme on en voit un exemple dans le bloc S1:V4.

Remarque 1 – Mes félicitations aux deux lecteurs qui ont déclaré dans des commentaires sur le premier article de cette série avoir trouvé une solution de cette valeur.

Remarque 2 – C'est logique qu'il ait fallu beaucoup moins d'itérations : il y a en effet 43.680 combinaisons de moins avec 12! qu'avec 16! ...

11 novembre 2017

Enigme 2 – Simulation n°1

En analysant le problème posé dans l’article précédent, je voyais bien comment créer une très bonne solution,  mais je me suis dit qu’il serait intéressant de voir comment trouver – par étapes successives – la meilleure solution par simulation dans Excel.

Je me suis donc dit que l’on pouvait en toute logique se limiter au départ aux valeurs de 1 à 16 pour le bloc A. J’ai alors mis au point un modèle dans lequel je tirais ces nombres au hasard.

Voici la formule de B1, recopiée vers le bas : =alea().

En colonne C, j’ai calculé la position de chaque aléa avec en C1 la formule : =rang(B1;B:B).

En E1, recopiée dans le bloc E1:H4, la formule =equiv(4*ligne()+colonne()-8;$C:$C;0) tire au hasard un des 16 nombres.

En J1, recopiée dans le bloc J1:L3, la formule =somme(E1:F2).

En N1, recopiée dans le bloc N1:O2, la formule =somme(J1:K2).

Enfin, en Q1, la formule =somme(N1:O2).

J’ai ensuite créé une macro qui faisait 100.000 itérations en copiant le bloc E1:H4 et en le collant en S1 chaque fois que la solution en Q1 était inférieure à celle de X1, que je mettais alors à jour avec la nouvelle solution.

Chaque simulation de 100.000 itérations durait 28 à 29 secondes et me donnait des résultats entre 352 et 360.


J’ai constaté que toutes les simulations que je faisais aboutissaient à un résultat dans lequel les quatres cubes du milieu portaient les numéros 1 à 4.

J’ai alors augmenté à 1.000.000 d’itérations et observé que, dans ce cas, je trouvais toujours 352.

Bravo donc aux deux lecteurs qui ont proposé cette solution en commentaire dans l’article précédent !

05 novembre 2017

Enigme 2 – Les cubes

Nous nous attaquons aujourd’hui à une seconde énigme qui sera une nouvelle occasion pour nous de voir comment – à l’aide d’Excel – résoudre simplement des problèmes complexes.

Nous avons en A une série de 16 cubes présentée sous la forme d’un carré. Chaque cube est marqué d’un nombre entier, ces nombres entiers étant tous différents les uns des autres. Nous avons illustré dans le graphique une possibilité de numérotation des 4 cubes de A en avant et à gauche.

Nous avons en B une série de 9 cubes présentée elle aussi sous la forme d’un carré.

Nous superposons alors les cubes de B, de façon centrée, sur les cubes de A ainsi que le montre l’illustration graphique.

On marque sur chaque cube de B la somme des nombres des cubes de A avec lesquels il est en contact. Dans notre exemple graphique, le cube en avant et à gauche de B portera la valeur 10, car c’est la somme des valeurs des 4 cubes de A avec lequel il est en contact.

On a ensuite une série C de 4 cubes que l’on place – de la même façon – centrée sur la série de cubes de B.

Chaque cube de C porte un nombre égal à la somme des nombres des cubes de B avec lesquels il est en contact.

Enfin, on place un cube unique D centré sur la série de cubes de C et on lui attribue un nombre égal à la somme des nombres des cubes de C.


Le problème à résoudre est le suivant : quel nombre doit-on mettre sur chaque cube de A de façon à minimiser la valeur affichée par le cube de D ?

Je vous laisse réfléchir jusqu’au prochain article…

23 octobre 2017

Mes formations en décembre

Vous trouverez ci-dessous la liste des formations que je propose pour décembre 2017. Chacune de ces formations est limitée à huit participants, chaque participant venant avec son ordinateur.

  • Modélisation avec Excel (2 jours) : les mardis 12 et 19 décembre 2017.
  • Création de tableau de bord sous Excel : le jeudi 14 décembre 2017.
  • Modélisation du risque : le jeudi 21 décembre 2017.
Vous trouverez la description détaillée de ces formations en cliquant dans le ruban droit, dans le gros bouton « Prochaines formations ».

Les autres séminaires habituels ne sont pas proposés en inter lors de cette session. Toutes les formations proposées sont organisées en association avec la société EuroDécision.

Avec la formation « Modélisation avec Excel », je garantis de transformer en deux jours tout utilisateur moyen d'Excel en « power user », c'est-à-dire à l'amener au niveau des 5% des meilleurs utilisateurs d'Excel.

Avec la formation « Modélisation du risque », vous découvrirez comment utiliser Excel pour faire des simulations probabilistes (dites de Monte Carlo). Nous utiliserons à cet effet l’add-in Crystal Ball, le meilleur produit au monde dans cette catégorie.

La formation « Création de tableau de bord sous Excel » vous permettra, en une seule journée, de totalement maîtriser la création d’un tableau de bord personnalisé, comme vous pouvez le voir dans l’article
« Notre premier tableau de bord » du 22 mai 2013.

Chacune de mes formations peut être animée en intra dans votre entreprise et – le cas échéant – personnalisée grâce à l’analyse et à l’amélioration des modèles propres à votre entreprise.

Ne manquez pas cette occasion de découvrir tout cela de la bouche même de l’auteur de ce blog, qui partagera avec vous l’expérience qu'il acquise en développant plus de 1.000 modèles dans plus de 100 entreprises en 10 pays.

Quelques-unes de mes références de formation intra : Aéroports de Paris, Aérospatiale, Arianespace, Bouygues, Caisse des dépôts, CASE-Poclain, CCIP, Cegelec, CNES, CNET, EADS, EdF, Elf, Ernst & Young, Euroconsult, Finacor, France Telecom, Gaz de France, GIAT, IFP, Isochem, Lafarge, La Poste, Lilly France, Marsh, RTE, Sanofi, SIRIS, Texas Instruments, Tir Groupé, Total, Wabco, Walt Disney.

16 octobre 2017

Une étude de cas – Conclusion

Nous avons démarré le 22 août dernier une série d’articles sur le « Cas n°1 ». En fait, il s’agit d’une séquence relative à un petit problème d’optimisation de prix de vente qui nous a servi de véhicule pour vous présenter différentes façons de résoudre un problème d’optimisation.

Le 8 septembre, nous avons vu comment résoudre le problème par une recherche dichotomique, une méthode qui permet de converger rapidement vers la solution optimale.

Le 14 septembre, nous avons vu comment résoudre le problème en utilisant le solveur, un add-in d’optimisation fourni avec Excel mais qui n’est pas installé par défaut. Il faut donc l’installer en passant par la séquence FichierOptionsCompléments. Avec le solveur, on trouve bien sûr immédiatement le prix de vente optimal.

Ensuite, nous avons résolu le problème en utilisant des tables à 1 dimension (20 septembre) puis à 2 dimensions (27 septembre et 3 octobre).

Enfin,  le 9 octobre, nous avons procédé par simulation en tirant simplement au hasard une série de prix de départ pour voir lequel donnait la meilleure marge bénéficiaire. Ce qui est surprenant, c’est que cette approche qui n’exerce aucune intelligence, dans la mesure ou chaque nouvelle itération ne tient aucun cas des résultats des itérations antérieures, donne contre toute attente d’excellents résultats.

Cette série d’articles a été l’occasion pour nous de voir (ou revoir) un certain nombre d’outils de modélisation auquel Excel vous donne accès et – par la même occasion – de constater qu’il y a souvent dans Excel une grande variété d’approches possibles pour résoudre un problème donné.

Pour télécharger le fichier de cette série d’articles :

09 octobre 2017

Cas n°1 – Simulation

Nous avons vu dans les articles précédents plusieurs façons d’identifier le prix de vente qui maximisera la marge bénéficiaire. Il reste une approche tout à faire originale pour résoudre ce type de problème, et qui donne des résultats d’une qualité surprenante.

J’ai donc écit une petite macro qui tire 20 fois au hasard un prix de vente entre 100 € et 150  € et copie en colonnes E et F le prix de vente ainsi tiré au hasard et la marge bénéficiaire correspondante.

En F21, on identifie avec =max(F1:F20) le meilleur bénéfice des 20 tirages et, en E21, le prix de vente correspondant avec =index(E:E;equiv(F21;F:F;0)).

J’ai reporté en I21 et J21 le prix optimal et le bénéfice maximal. En H21, la formule =abs(J21-F21)/J21 calcule l’écart entre le meilleur bénéfice des 20 tirages et le bénéfice optimal.


Ce qui est vraiment surprenant, c’est qu’avec seulement 20 tirages totalement aléatoires, on parvienne à d’aussi bons résultats.

Ainsi, en faisant 10 exécutions consécutives de la simulation, le pire résultat avait un écart de seulement 0,30%, le second le plus mauvais de 0,12%, le troisième de 0,09% et les sept autres de 0,06% ou moins !

Un résultat impressionnant pour seulement 20 tirages au hasard, n’est-ce pas !

Certes, d'autres séries de 10 donnent des résultats un peu moins brillants, mais ils sont toujours excellents considérant qu'il n'y a que 20 itérations...

03 octobre 2017

Cas n°1 – Table de données (c)

Nous avons remarqué dans le dernier article que la table de données à 2 dimensions permettait de faire varier deux paramètres, mais – en revanche – ne pouvait être utilisée que pour analyser les valeurs d’un résultat.

Il y a une façon très esthétique de contourner cette limitation en utilisant une fonction assez peu connue des utilisateurs lambda, la fonction choisir().

La fonction choisir()

La syntaxe de cette fonction est =choisir(index;formule_1;formule_2 ;…).

index est un nombre allant de 1 à 254 ou une formule aboutissant à un tel nombre.

Quand index est égal à 1, le résultat est celui de formule_1 ; quand il vaut 2, c’est celui de formule_2, et ainsi de suite.

Je n’ai encore jamais testé cette fonction avec 254 arguments, et je ne suis pas sûr qu’Excel vous laisse saisir une formule de cette longueur. Si vous l’avez déjà tenté, n’hésitez pas à ajouter un commentaire en nous disant ce qui vous est arrivé…

Mise en place de la solution

Insérons une ligne au-dessus de la ligne 20, pour aérer un peu et créons en A20 une zone de validaton par liste à partir de $A$14:$A$18. Cela nous permet donc de sélectionner Ventes prévues, Coût variable total, Chiffre d'affaires, Coût produits vendus ou Marge bénéficiaire.

Il suffit alors d’entrer en A21 la formule =recherchev(A20;A14:B18;2;faux).

Nous avons donc à présent une table capable de calculer les résultats de cinq formules différentes en fonction de deux paramètres !


Remarque – Reste à résoudre un problème esthétique. Quand nous sélectionnons « Ventes prévues »,  les quantités vendues sont formatées en € !

Pour résoudre ce problème, il suffit d’utiliser le format personnalisé suivant pour l’intérieur de la table de données : [>10000]# ##0 €;# ##0. En effet, toutes les valeurs en € sont supérieures à 10.000 !