Evernote et VBA – Episode 1

Banniere Evernote

Vous connaissez certainement Evernote (www.evernote.com), le logiciel de prise de notes avec synchronisation dans le « nuage ».

Evernote est à la fois une application de bureau (Windows et Mac), une application pour mobiles et tablettes (iPhone, Android, BlackBerry, Windows Phone) et une extension pour navigateur. Rien que ça ! Les notes que vous prenez sur n’importe lequel de ces supports sont transférées automatiquement sur le site Evernote, et peuvent être retrouvées sur les autres supports.

Dans cette nouvelle série, nous allons voir comment Access mais aussi Excel, Word… peuvent lire des données Evernote, ou envoyer des notes dans cette application.

Mise en place

Pour que votre connexion Evernote fonctionne, voici ce que vous devez préparer :

  1. Créez-vous un compte sur le site Evernote, si ce n’est pas déjà le cas.
  2. Installez le client Evernote (l’application de bureau) sur votre ordinateur. Celle-ci fournit les bibliothèques nécessaires pour interfacer efficacement Access et Evernote.
  3. Dans votre base de données Access (ou dans votre classeur Excel, votre document Word), ouvrez Visual Basic Editor ([Alt] + [F11]).
  4. Cliquez sur le menu Outils / Références.
  5. Cochez la bibliothèque Evernote APi (enapi).

Les portions de VBA à venir font également appel à la fonction StringFormat() (voir cette page du blog).

Quelques classes à connaître

L’API Evernote (enapiLib) permet d’attaquer l’application du même nom à partir de VBA. Pour cela, elle expose un certain nombre d’objets dont :

  • L’application Evernote (Evernote)
  • Le classeur (Notebook)
  • La note (Note)

Et quelques collections utiles comme :

  • La liste des classeurs (Evernote.Notebooks)
  • La liste des notes d’un classeur donné (Notebook.Notes)

Exemple pratique

Dans ce premier exemple, nous allons tâcher d’afficher le contenu de votre base Evernote, à savoir : la liste des classeurs, le nombre de notes qui s’y trouvent, le titre et la date de création de chaque note (vous noterez le format curieux des dates pour l’instant).

  1. Créez un module standard dans votre base de données.
  2. Ajoutez les 2 constantes et la procédure qui suit dans le module (les constantes servent à centraliser vos identifiants Evernote).

Attention
Le mot de passe ne devrait pas être stocké « en dur » dans la base. Vous devriez le demander à l’utilisateur à chaque session Access.

Explications

  • La variable en pointe une instance de l’application Evernote. Les instructions principales sont appelées à partir de cette variable.
  • Parmi elles, la méthode Login sert à ouvrir la connexion (vous lui fournissez logiquement votre identifiant et votre mot de passe).
  • On affiche ensuite le nombre de classeurs disponibles (en.Notebooks.Count), et le nom du classeur par défaut (en.DefaultNotebook.Name).
  • Enfin, on parcourt par une boucle la collection des classeurs (en.Notebooks) pour afficher le code (ID), le nom (Name) et le nombre de notes (Notes.Count) de chaque classeur.
  • A l’intérieur de la boucle « Classeurs », une boucle « Notes » affiche la date de création (DateCreated) et le titre (Title) de chaque note.

Tester le code

  1. Affichez la fenêtre Exécution (CTRL + G).
  2. Placez le curseur dans la portion de code précédente.
  3. Cliquez sur l’icône Exécuter Sub/UserForm, en haut de votre écran.
  4. Exécutez la procédure, les résultats s’affichent dans la fenêtre Exécution.

Vous aimerez aussi...

6 réponses

  1. Hervé Inisan dit :

    Julien > Pas eu beaucoup de temps ces jours-ci pour répondre, mais voici quelques pistes : effectivement, ce serait la fonction d’écriture binaire qui fausse le départ du fichier. VBA ajoute des méta-informations lors du Put, selon les données passées en argument. En remplaçant le type Variant par un type Byte(), on devrait avoir de meilleurs résultats.

    Je tâcherai – dès que ça se calme un peu par ici 🙂 – de poster un article complémentaire sur le sujet.

  2. Julien dit :

    Hello again. j’ai finalement réussi à faire marcher tout ça. Il semblerait que lorsque je lance une boucle vba sur trop de notes en même temps, à un moment l’extraction « plante » au bout de quelques notes. Mais je n’arrive pas à avoir un comportement cohérent. Je laisserai des test plus complets à plus tard.
    Par contre, ce que je n’arrive pas à faire, c’est extraire les « Resources » (fichiers et images) d’une note, et avoir un fichier cohérent :
    – extraire le Byte() avec Resources.Data
    – extraire le nom de fichier avec Resources.Name
    – écrire dans un fichier le Byte()

    Pour les fichiers docx, le fichier présente des erreurs mais word les répare, pour tous les autres fichiers, il y a des erreurs irréparables.
    J’ai le même nombre de bytes entre le fichier extrait et le fichier dans la note, mais il doit y avoir un décalage quelque part. Par exemple, pour un fichier exe, l’icône reconnue par windows n’est pas l’icône du fichier mais il affiche une petite icône « exec » : http://goo.gl/5dOPm alors que le logo aurait du être celui-ci : http://goo.gl/ET48e
    Voici le code d’écriture du Byte() récupéré par Resources.Data : http://goo.gl/E0i88
    Poursuivant mon investigation, il semblerait que les premiers octets du fichier extrait (en haut) soient différents du fichier initial : http://goo.gl/VTt7I

  3. Hervé Inisan dit :

    Julien > Chez moi, .Content extrait bien le contenu de toutes les notes (pas de problème à partir d’un numéro particulier). Quel est le code qui ne marche pas ?

  4. Julien dit :

    Re
    Avez-vous testé la fonction Content de l’objet Note. Quand je boucle sur l’ensemble de mes notes, cette fonction ne « marche » que pour les deux premières notes. C’est assez étonnant.
    Finalement, je pense que la meilleure méthode pour obtenir le contenu serait d’utiliser ENScript.Exe en exportant la note en .enex, et en chargeant son contenu au format brut…

  5. Hervé Inisan dit :

    Julien > Merci pour le retour ! 🙂

    Pour ce qui est de la syntaxe, je n’ai pas trouvé grand chose sur le site officiel. J’ai analysé par moi-même la bibliothèque (Enapi.dll) et testé.

  6. Julien dit :

    C’est une excellente chose que vous ayez fait cette liste d’articles !
    Cela permettra à beaucoup d’entre nous, qui trouvent que la gestion des tags dans Evernote n’est pas suffisante, de créer facilement des applications par dessus.
    Ce sont les seuls articles du web que j’ai trouvés sur ce sujet !
    Où avez-vous trouvé la bonne syntaxe pour l’instanciation des fonctions en VBA ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *