Quelques raccourcis dans Excel

Je vous présente ici quelques raccourcis méconnus d’Excel (dont certains m’ont été présentés par Cathy Monier lors du ReBuild)

Sélection de tableaux dans un fichier Excel (Ctrl-*)

Ce raccourci permet de sélectionner automatiquement un tableau, de “manière intelligente” en sélectionnant toutes les cellules possibles autour de la ou les cellules actives.

Démonstration :

Control-Etoile

Sélection d’une colonne (Ctrl-Espace)

Ce raccourci permet de sélectionner toutes les colonnes de la ou les cellules actives. Si plusieurs cellules sont actives, plusieurs colonnes seront sélectionnées.

Démonstration :

Control-Espace

Sélection d’une ligne (Shift-Espace)

Ce raccourci permet de sélectionner toutes les lignes de la ou les cellules actives. Si plusieurs cellules sont actives, plusieurs lignes seront sélectionnées.

Démonstration :

Shift-Espace

N’hésitez pas à aller voir sur son site Cathy Astuces pour plus d’informations sur Excel & Access.

ReBuild 2014 : C’est fini (et c’était bien)

P1050090

Voilà, cette 2ème édition du ReBuild s’est terminée jeudi soir dans le rangement, la bonne humeur. Les derniers survivants se sont retrouvés autour d’une bière et d’une bonne pizza.

Le bilan de cette édition

  • Des sessions d’excellente qualité : il faut dire que les speakers sont les mêmes que ceux des TechDays ce qui aide pas mal.
  • Une organisation au top : ok, en faisant partie je ne suis pas d’une partialité absolue mais nous avons quand même assuré Sourire. Pour exemple, voici les badges du ReBuild 2014 désignés par Nasreddine et imprimés par XpressEvent  :P1050103
  • De la nourriture de qualité : un petit déjeuner réussi et des bons sandwichs (malheureusement uniquement pour les speakers / organisateurs …, l’année prochaine il faudrait que l’on prévoit aussi pour les participants)
  • Des salles de tailles diverses et variées : La salle D n’étant vraiment pas très grande … et un Atrium de dimensions très respectables (Cf. première photo)

La session d’Eric Vernié et son outil magique :

En terme de session, j’ai été surtout bluffé par “l’outil magique” d’Eric Vernié qui lui permettait de taper du code plus vite que la lumière sans aucune erreur : l’effet est très bluffant. Je pense d’ailleurs redévelopper cet outil très rapidement et le mettre sous CodePlex (plus d’infos dans un prochain ticket)

Ma session : “Coding for fun pour Excel”

L’objectif de cette session était de montrer que l’on pouvait faire des choses rigolotes avec Excel tout en limitant le code développé et en utilisant au maximum les formules. En effet, Excel est un tableur et tout petit jeu à base de grille est normalement facilement transposable sous Excel.

J’ai d’ailleurs commencé par montrer Minecraft sous Excel, disponible ici.

Voici les différents jeux que j’ai présenté :

Mots croisés

Le principe de base est la mise en place des règles de mise en forme conditionnelle :

  • Une pour afficher sur fond vert les lettres qui sont correctes
  • Une pour afficher en rouge les lettres incorrectes
  • Une pour afficher les cases noires

Le fichier Excel correspondant est téléchargeable ici.

Jeu de la vie

Pour ceux qui ne le connaissent pas, l’algorithme d’implémentation du jeu de la vie est disponible sous Wikipedia..

Ici, l’idée est d’avoir 2 onglets, 1 qui contient la génération en cours (onglet “Temp”) et 1 qui contient la génération future calculée via de simples formules (onglet “Jeu de la vie”).

Il suffit de positionner les cellules vivantes via la saisie de “v” dans les cellules pour voir le résultat dans l’onglet “Jeu de la vie”)

Pour obtenir un résultat assez joli j’ai aussi ajouté quelques règles de mise en forme conditionnelle pour que la saisie de “v” dans une cellule la grise complètement.

Pour finir, j’ai enregistré une macro en VBA (associée au raccourci Ctrl-I) qui permet de lancer 1000 itérations successives interruptibles par un simple Ctrl-Pause.

Le fichier Excel correspondant est téléchargeable ici.

Morpion (Tic-Tac-Toe)

Dans cet exemple, l’idée était d’implémenter un morpion sans code VBA et sur un seul onglet. Le principe était de trouver une caractéristique de cellule qui pouvait être modifiée sans écraser la formule à l’intérieur.

La seule option que j’ai trouvée consiste à utiliser la formule “Cellule” qui permet notamment de récupérer le format d’une cellule. Ainsi la coche d’une case se fait par simple modification de format. Il y a aussi quelques formules qui se baladent pour faire “plus joli”.

Le fichier Excel correspondant est téléchargeable ici.

Démineur

Même principe que ci-dessus avec des formules un peu plus compliquées et une mise en forme un peu plus sexy.

Je pense qu’il aurait probablement été possible de supprimer l’onglet de référence en générant une formule par cellule contenant directement la présence ou non d’une mine dans la cellule.

Le fichier Excel correspondant est téléchargeable ici.

Snake / Serpent

Dernière démonstration : le “Snake” qui se déplace tout seul en évitant les cases jaunes.

2 idées de base pour son implémentation :

  1. Stocker l’ensemble des coordonnées du serpent dans un onglet à part : une macro (DessinerSerpent) suffit ensuite à le dessiner. Pour le faire bouger, il suffit de rajouter une coordonnée à la suite des autres
  2. Une détection de la couleur de la case pour savoir où il est possible d’aller (macro Jouer)

Pour finir, j’ai associé le raccourci Ctrl-I à l’enchainement “DessinerSerpent” & “Jouer”, ce qui simule son déplacement.

N’hésitez pas à modifier le code de décision du serpent pour le rendre plus intelligent.

Le fichier Excel correspondant est téléchargeable ici.

 

Une macro

Implémentation personnelle des “BigNumbers”

3216290796_18f53fb0fa_b

Aujourd’hui je vous présente une implémentation personnelle (et naïve) des “BigNumbers” démarrée il y a longtemps (sous forme de stage à l’école et repris à mon compte pendant mon temps libre)

“Diagramme de classe” et principe général d’implémentation

Celle-ci se présente sous forme de 2 classes :

  • BigInt : permet de gérer des entiers à peu près aussi grand que l’on souhaite. (En fait, la limitation technique est de 8589934588 chiffres)
  • BigRat : permet de gérer des rationnels sous forme de fractions de BigInt

La base de cette implémentation est l’écriture du nombre en base 10000 avec stockage de chaque “chiffre” (chiffre allant de 0 à 9999) dans un tableau. Je vous accorde que la notion de chiffre est ici discutable : je souhaitais juste reprendre la notion mathématique associée.

Par exemple, 4578965561230 sera stocké en interne sous forme d’un tableau de 4 éléments:

  • Elément 0 : 1230
  • Elément 1 : 6556
  • Elément 2 : 5789
  • Elément 3 : 4

On a bien 4578965561230  = 4 * (10000 ^ 3) + 5789 * (10000 ^ 2) + 6556 * (10000 ^ 1) + 1230 * (10000 ^ 0).

Réécriture des opérations

Ce qui a été intéressant dans cette réécriture, c’est d’optimiser un minimum le code (même si de base l’implémentation n’est pas la meilleure : Cf. dernier paragraphe).

Ainsi le codage de l’opérateur ++ a été optimisé pour être plus efficace qu’un bête “+1”.

Je vous laisse aussi imaginer la réécriture de la division qui est assez facile à poser mais légèrement plus compliqué à écrire (rien d’impossible mais quelques tâtonnements pour les cas “tordus”)

J’en ai aussi profité pour ajouter des méthodes permettant le calcul :

  • de l’ensemble des diviseurs d’un entier
  • du PPCM de 2 nombres (utilisé pour les simplifications de fractions dans les BigRat)
  • du PGCD de 2 nombres

Surcharge des opérateurs

Le deuxième point aussi très intéressant a été de se pencher sur la surcharge des opérateurs : +, –, *, / de manière classique mais aussi ++, –, les opérateurs de comparaison et pour finir les casts explicites ou implicites.

Exemple d’écriture de surcharge d’opérateurs :

[sourcecode language= »csharp » padlinenumbers= »true »]
// Surcharge de l’opérateur *
public static BigInt operator *(BigInt bi1, BigInt bi2)
{
}

// Surcharge de l’opérateur >> (Shift)
public static BigInt operator >>(BigInt bi, int iCount)
{
}

// Cast explicite d’un BigInt vers un double
// Ex : double d = (double) bi;
public static explicit operator long(BigInt bi)
{
}

// Cast implicite d’un double vers un BigInt
// Ex : BigInt b = 10;
public static implicit operator BigInt(long i)
[/sourcecode]

Optimisations à faire

Bien que fonctionnant correctement et avec des performances acceptables, il serait utile de revoir l’implémentation de base pour profiter au maximum de ce que fournit déjà un ordinateur. A ce titre, je pense que la division fonctionne mais n’est pas du tout optimisée.

Une implémentation qui semblerait pas mal serait :

  1. Soit de continuer à utiliser un tableau contenant cette fois des entiers non signés
  2. Soit de passer par un BitArray pour pouvoir manipuler directement tous ces octets

Je pense qu’en passant par une de ces implémentations tous les calculs seraient accélérés : la complexité passerait alors dans l’écriture en base 10 du résultat.

Si vous avez envie de vous y frotter, allez y : le code est disponible sous codeplex : http://bignumbers.codeplex.com Sourire

Ajouter des headers HTTP dans l’enregistrement d’un test sous Visual Studio

12436943915_dd9f34a696_z

J’ai récemment eu à mettre en place des tests de charge sur une application ASP.Net dont une bonne partie des appels se faisait avec de l’Ajax.
Lors de l’enregistrement tout se passait bien mais à l’exécution j’avais systématiquement une erreur d’exécution ASP.Net incompréhensible.

J’ai d’abord mis en cause un paramètre étrange sur mes URLs : elles contenaient tous un paramètre “_” dont la valeur était égale au nombre de millisecondes écoulées depuis le 1er janvier 1970. Après quelques recherches, je me suis rendu compte que ce paramètre était uniquement rajouté par jQuery pour forcer certaines versions d’Internet Explorer à ne pas mettre en cache la requête (Cf. http://stackoverflow.com/questions/2749560/why-does-jquery-ajax-add-a-parameter-to-the-url)

Après comparaison via ce fabuleux outil qu’est fiddler ( et que j’essaierai de présenter un jour …), je me suis rendu compte que les requêtes rejouées ne présentaient pas le header X-Requested-With valorisé à XMLHttpRequest. Une fois ce header rajouté sur toutes les requêtes qui le nécessitait, tout à tourné comme sur des roulettes.

Pour ceux et celles qui ne souhaiteraient pas rajouter ce header sur toutes les requêtes, il existe la possibilité de forcer l’enregistrement via une clé de registre de certains headers lors de l’enregistrement d’un test par Visual Studio.

Tout est décrit (en anglais) sur cette page : http://blogs.microsoft.co.il/shair/2011/02/02/how-to-include-http-headers-in-web-test-recording/

En résumé, voici les points à retenir :

  1. L’outil d’enregistrement des tests web considère uniquement les headers suivants par défaut :
    * SOAPAction
    *  Pragma
    * x-microsoftajax
    * Content-Type
  2. Il est possible de forcer l’enregistrement de n’importe quel header via la clé de registre “HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio10.0EnterpriseToolsQualityToolsWebLoadTest” et la modification de la valeur de « RequestHeadersToRecord(par défaut : SOAPAction;Pragma;x-microsoftajax;Content-Type;Referrer;Accept-Encoding;Accept-Language;User-Agent »)

ReBuild 2014 : Rappel

N’oubliez pas le 2 octobre 2014 : c’est le ReBuild 2014 (déclinaison locale des TechDays)soit :

image

Le Hub Créatic et ses 6600 m2

1 atrium de 215 m2


1  Conférence plénière​

40 Sessions techniques​ (dont une “Coding for fun sous Excel”)

1 concours de développement

15 MVP (Microsoft Most Valuable Profressional) / MSP (Microsoft Student Partner)

38 Speakers

15 Stands partenaires​​

 

Les inscriptions se font ici.

Plus d’informations sur www.rebuild.fr.

ReBuild 2014 : Challenge Docteur Souris

Accueil

Amis développeurs, Nokia vous propose un challenge pour soutenir l’association Docteur Souris dont sa principale mission est de mettre en place les conditions d’accès au loisirs « numériques » pour tous les enfants hospitalisés. A l’heure actuelle, l’association équipe 25 hôpitaux avec plus de 1100 ordinateurs et tablettes fonctionnant chaque jour avec plus de 10 000 enfants qui en bénéficient.

Le challenge consiste à créer une multitude d’applications ludiques à destination des enfants hospitalisés comme des mini-jeux ou des applications de loisirs créatifs. Un seul mot d’ordre : DISTRACTION afin de les faire oublier leur quotidien parfois difficile à supporter.

Les 3 meilleures applications gagneront un Lumia et la remise des prix sera faite lors du ReBuild 2014 au HubCreatic.

Toutes les informations complémentaires sur ce challenge : https://www.dvlup.com/Challenge/61892775-0561-4c57-a24a-94bf4417d264

A vos Visual Studio (ou Xamarin Studio)

Comment blogger efficacement

Ce blog est hébergé sous WordPress.

Pour mes premiers posts, j’ai commencé par utiliser l’interface Web de WordPress : manière de fonctionner assez laborieuse tout de même. Sur les conseils de collègues, je suis passé à Word qui ne me satisfaisait pas non plus : solution un peu lourde pour “juste” blogger.

Je suis tombé sur un des posts de Scott Hanselman (qui travaille chez Microsoft et poste beaucoup sur beaucoup de sujets notamment comment améliorer sa productivité). Ce post lui permettait de retrouver facilement l’URL de téléchargement de Live Writer. Application qui selon lui,  “is the best windows blog authoring application I have found so far”.

Après avoir écrit mes 10 derniers posts avec cette application, je confirme qu’elle est extrêmement simple et remplit exactement son rôle (ni trop, ni trop peu). Ecrire un article de blog devient aussi simple qu’écrire sous Word (avec la lourdeur de l’application en moins Sourire).

image

Les plus sont notamment :

  • La catégorisation des articles
  • Le renseignement des mots clés
  • La date de publication souhaitée
  • La possibilité d’ajouter des plugins

Ainsi, pour afficher proprement le code dans mes articles, j’utilise la combinaison gagnante :

Pour finir, 2 URLs très importantes (et très utiles) :

Migration de code VB3 vers VB.Net

Dans le cadre d’un de mes projets, j’ai eu à migrer du code VB3 (16 bits évidemment) vers du code VB.Net en framework 4.5.

Au final, cela ne s’est pas avéré très compliqué. Voici le processus suivi :

  1. Création d’un fichier projet VB6 (fichier .vbp)
  2. Migration du projet VB6 vers .Net 2.0
  3. Migration du projet .Net 2.0 vers un projet .Net 4.5
  4. Corrections des “quelques” bugs restants

1ère étape : Création d’un projet VB6 (fichier .vbp)

Visual Studio 2008 (dernière version à être capable de migrer du VB6) nécessite impérativement un fichier vbp décrivant l’ensemble des fichiers contenus dans le projet. Heureusement, VB3 fournit un fichier .Mak donnant des informations sur la compilation de l’exécutable. L’idée est donc de mixer un fichier vbp vide avec le fichier .mak de mon projet vb3.

Ainsi le fichier .mak suivant :

me donne le fichier .vbp suivant (tronqué : un exemple complet est disponible sur la MSDN ici) :

2ème étape : Migration du projet VB6 vers .Net 2.0

Cette étape est la plus simple de toutes : il suffit d’ouvrir Visual Studio 2008 (je me répète : dernière version de Visual Studio à migrer du code VB) et d’ouvrir le fichier vbp.

Un assistant développé par Artinsoft se lance et fait tout le boulot pour vous Sourire. Cette société fournit aussi un guide de migration très complet : http://migrationguide.artinsoft.com/

3ème étape : Migration du projet .Net 2.0 vers .Net 4.5

Cette étape n’est pas très compliquée non plus, il vous suffit de lancer votre dernière version de Visual Studio (2013 ou 2012 généralement) et de modifier les propriétés du projet comme suit :

image

4ème étape : Correction des bugs restants

On arrive ici à l’étape la plus laborieuse qui se fait en 2 grandes phases :

  1. Corrections dans le code jusqu’à que l’application compile : opération fastidieuse et dont la durée est directement liée au volume de code.
  2. Exécution du code migré jusqu’à cela fonctionne correctement.

Plusieurs points de vigilance lors de ces 2 phases :

  • La gestion des entiers : Short (VB3) = Byte (.Net), Integer (VB3) = Short (.Net) & Long (VB3) = Interger
  • Dans le cadre du projet, la migration avait été facilitée par l’absence de contrôles graphiques à migrer. Notamment dans le cas où l’application existante utilise des composants graphiques du marché, la migration peut être plus compliquée car il est peu probable que l’on puisse retrouver un composant équivalent présentant les mêmes signatures
  • La gestion des tableaux : en VB, ceux-ci commencent généralement à 1 (et non pas à 0)
  • L’outil de migration dans sa mansuétude vous laisse des indications sur les potentiels problèmes. Ex :

  • La 2ème phase a principalement consisté à
    • Exécuter le code
    • Corriger ce qui plantait
    • Corriger ce qui ne donnait pas de bons résultats

Sortie de Visual Studio 14 CTP 2

Je parlais hier de la sortie de l’Update 3 en RC de Visual Studio 2013 et j’apprends ce matin la sortie de la nouvelle version de Visual Studio en CTP 2 (Community Technology Preview).

Je n’ai pas encore eu le temps d’y jeter un oeil mais ca parait prometteur avec notamment :

  • La mise en place ASP.NET vNext : composant Open-Source permettant de construire des applications Web & Cloud simplement.
  • Des améliorations dans l’environnement de développement

Les « releases notes » sont disponibles sur la MSDN aux adresses suivantes :

Sortie de Visual Studio 2013 Update 3

Ca y est, l’update 3 de Visual Studio 2013 est disponible en Release Candidate (RC) à l’adresse suivante : http://www.microsoft.com/fr-fr/download/details.aspx?id=43398

Celle-ci sera disponible en version RTM (Release To Manufacturer) à la fin de l’été (je n’arrive pas à retrouver l’info exacte que j’ai lu sur un blog récemment …)

Cette version apporte comme d’habitude des corrections ainsi que des évolutions sur les outils suivants :

  • Application insights : Cette application de monitoring de site Web, et d’applications Windows 8 ou Windows Phone est maintenant inclus dans Visual Studio 2013
  • Visual Studio Graphics Analyzer : Comme son nom l’indique, cet outil permet d’analyser les performances graphiques d’une application en DirectX. Plus d’infos, ici
  • .Net Memory Analysis : Il est maintenant possible d’utiliser directement les fonctions “Atteindre la définition” (F12) et “Rechercher toutes les références” (Shift-F12) depuis l’outil d’analyse de mémoire fourni dans Visual Studio. Plus d’infos, ici.
  • Utilisation de la CPU et de la mémoire : Il est maintenant possible de naviguer directement dans le code depuis l’arborescence des appels. Le support pour les applications Win32 et WPF a aussi été amélioré (avec notamment la possibilité de forcer le déclenchement du Garbage Collector (Ramasse-miettes pour les anglophobes Sourire). Plus d’infos, ici et ici.
  • CodeLens (ou affichage tête haute) uniquement disponible dans la version Ultimate : L’outil permet maintenant de montrer les auteurs ainsi que les changements dans un référentiel Git.