vendredi 23 août 2013

(Recherche internet + copier/coller) est devenu un usage normal pour les développeurs




C'est une réflexion qui m'a choquée.
Il y a plus de 20ans, on apprenait un langage en lisant un livre, en passant beaucoup de temps à apprendre la méthode et la syntaxe. Il fallait plusieurs semaines avant d'oser dire que l'on pratiquait un langage. Pour l'anecdote, mon premier langage fut le basic du ZX80 de Sinclair que j'ai appris sans jamais posséder l'ordinateur, mais en lisant tout simplement le livre associé (qu'un ami m'avait prête), car la commande de mon ZX80 n'est jamais arrivée à cause du succès de ce petit ordinateur destiné au plus grand nombre. Tout cela, c'était avant internet. Aujourd'hui, on apprend un langage en une journée, cela signifie que l'on passe à coté de nombreuses points essentiels: la méthode, la connaissances des insuffisances, les moyens de les contourner, etc..
Moi-même aujourd’hui, j'utilise internet et le copier/coller, même pour les instructions les plus élémentaires, et pour des langages que j'ai pratiqué de longue date (PHP, VBA, C). J'ai tenté de déterminer les raisons pour expliquer ce phénomène. Voici 2 des raisons me poussant à utiliser le copier/coller:
1 - Je ne suis plus un développeur à plein temps, et ma mémoire manque d'entrainement
2- Les documentations (VAB par exemple), ne sont pas agréables, ni pour l'apprentissage (c'est une catastrophe sur ce point), ni pour les développeurs (l’absence en particulier d'un moteur de recherche efficace et comparable à google).

Il faut également ajouter l'esprit "zapping" de nos cerveaux d'aujourd'hui. Le temps va trop vite, les yeux et les cerveaux ne parviennent plus à fixer les informations qui défilent devant nous. Nous sommes drogués à la quantité d'information, et nous de passons plus assez de temps à "digérer" cette quantité. A cela s'ajoute malheureusement une dilution importante des bonnes informations noyées dans un flux de très mauvaises qualités. Il est loin le temps où un livre comme le Kernighan & Ritchie (langage C), était un plaisir de lecture tant par sa clarté que par sa pédagogie donnant envie d'apprendre. Maintenant les outils sont souvent obscurs et mal documentés.

Le constat est terrible: le copier/coller est devenu primordial pour un développeur. Je ne suis même pas certain que la productivité y gagne. En revanche, une certaine paresse et un conformisme certain risquent de s'installer durablement dans nos habitudes de développement.

jeudi 22 août 2013

Excel: solution pour générer un classeur contenant plusieurs fichiers CSV

C'était un petit problème qui a ennuyé la plupart des utilisateurs de base de données :
Comment générer automatiquement un fichier Excel contenant plusieurs CSV (à partie d'une base de données par exemple).
Toutes les bases de données sont capables d'exporter une table vers un classeur Excel en utilisant le format CSV, ce format étant reconnu automatiquement par Excel. En revanche, pas moyen d'exporter plusieurs tables d'une base de données vers un unique classeur Excel, avec un onglet par table. Cette impossibilité est la conséquence (entre autre) du format propriétaire d'Excel. Voici une astuce permettant de "créer" ce fichier Excel.

Voici la marche à suivre (avec Excel 2003):
  1. Exportez vos tables vers des fichiers CSV, le tout dans un même répertoire .
  2. Ajoutez dans le même répertoire le fichier Excel disponible plus bas.
  3. Ouvrez le fichier Excel: le chargement des fichiers CSV se fera automatiquement.
Explication:
Ce fichier Excel est un classeur contenant un seul onglet, lui-même contenant une macro en charge d'importer tous les fichiers CSV présent dans le même répertoire. Cette macro se lance automatiquement, mais uniquement si les fichiers n'ont pas été déjà importés lors d'une précédente ouverture. Par la suite, l'opération peut-être reproduite manuellement en modifiant les paramètres présents dans l'onglet 'utilitaire", comme par exemple le préfixe des fichiers à importer.

Voici la copie d'écran de l'onglet "utilitaire" permettant de reproduire l'opération, autant de fois qu'il vous plaira.


Alors me direz vous, cela ne permet pas réellement de générer automatiquement un fichier Excel incluant plusieurs CSV. En revanche, si vous avez besoin d'envoyer automatiquement ce fichier,  rien de plus simple de créer un Zip contenant tous les CSV en question, en incluant ce fichier Excel. Le destinataire (ou vous même) n'auront plus qu'à dézipper la totalité des fichiers dans un nouveau répertoire, pour permettre d'obtenir le même résultat, au moment de l'ouverture du fichier Excel du répertoire.

Ce fichier Excel est utilisable tel quel, mais est facile à adapter selon votre besoin si vous connaissez un minimum de VBA. Personnellement, j'ai ajouté la suppression des fichiers importés à postériori, un renommage du fichier Excel après le chargement, et la gestion automatique des préfixes et suffixes.

En espérant que ce petit fichier vous sera utile.

Lien:
Fichier Excel (version 2003) pour charger automatiquement les fichiers CSV présent dans le même répertoire.



lundi 19 août 2013

Excel le problème de l'importation de fichier CSV avec le point virgule comme délimiteur

Voici un des exemples de pseudo bug qui peuvent perdre une bonne demi-journée. Mon but était d'importer un fichier CSV dans un onglet Excel, à l'aide la macro OpenText (méthode associée à Workbooks). Normalement aucun soucis: pour importer un fichier avec comme séparateur le point virgule (";"), il suffit d'écrire cela:

 Workbooks.OpenText _
   Filename:="toto.csv", _
   DataType:=xlDelimited, _
   Semicolon:=True


Et bien non, cela ne marche pas avec mon Excel 2003. J'ai tout essayé: jouer avec tous les paramètres, changer le type de fin de ligne (LF => CR-LF), et autre gris-gris. A chaque fois, l'importation ne se faisait que sur une colonne. Seul le caractère virgule fonctionnait pour délimiter les colonnes. Le pire, c'est que cela fonctionnait parfaitement avec la méthode Open (l'équivalent de la fonction 'Open' du menu) sans arguments particuliers.

En cherchant sur internet, j'ai découvert que l'extention du fichier à importer devait être .txt. En renomant l'extention du fichier de CSV en TXT, tout fonctionne:


Name  "toto.csv" as "toto.txt"
Workbooks.OpenText _
   Filename:="toto.txt", _
   DataType:=xlDelimited, _
   Semicolon:=True


Et pourquoi? J'ai même pas envie de savoir pourquoi. L'informatique est remplie de bizarreries de ce type, parfaitement illogique, mais toujours chronophage. Merci au forum qui ma donnée la solution.

Voici ce qu'il faut retenir:
Si on tente d'importer un fichier avec l’extension .CSV avec la méthode OpenText, le point virgule ne peut pas être utilisé comme délimiteur, seule la virgule simple fonctionne. Dans ce cas, l’extension .TXT est obligatoire.

Bon courage à vous pour le prochain bug de ce genre.

Doc MicroS.
Merci à ce forum