Excel et le JavaScript


Le JavaScript est un langage de programmation très largement utilisé dans les pages Web.
Cliquez ici pour apprendre quelques notions de Javascript.
A priori, rien ne relie donc Excel à JavaScript.

Et pourtant,
- on sait bien créer ou ouvrir des liens hypertexte dans Excel ou par VBA
- et on sait insérer des commandes JavaScript dans des liens hypertexte.

Alors, il suffit de créer dans Excel un lien hypertexte contenant une commande JavaScript :
Dans une feuille Excel, Insertion / lien hypertexte / fichier ou URL:
javascript:alert('zaza')
Quand on clique sur le lien, la commande JavaScript est lancée, et envoie un message "zaza".

Rien n'empêche d'utiliser des commandes plus compliquées, par exemple :
javascript:document.open();document.write("Zaza");document.close()
Le lien va ouvrir une nouvelle page Web contenant le mot Zaza.

Ou bien :
javascript:window.open("file:///c:/rien.doc","","width=400,height=300");history.back()
Le document Word est ouvert sous Internet Explorer dans un popup au dessus du fichier Excel.

Et on peut évidemment faire de même en VBA :
ThisWorkbook.FollowHyperlink ("javascript:document.open();document.write('zaza');document.close()") donne le même résultat.
ThisWorkbook.FollowHyperlink ("javascript:document.open();zaza=prompt('comment t\'appelles-tu');document.write('je m\'appelle '+zaza);document.close()")
L'execution de la ligne VBA va demander à l'utilisateur ce qu'il veut écrire dans la page html.

Mais on peut aussi utiliser VBA pour générer des pages de commandes JavaScript, des bases de données JavaScript...

Un premier exemple :
Dans une feuille Excel contenant des liens hypertexte, comment rechercher ceux qui contiennent un mot clé et comment en présenter une liste au format HTML sans pour autant enregistrer une page html sur le disque dur ?
La macro présentée ci-dessous va balayer tous les liens pour rechercher le mot clé puis ouvrir un lien JavaScript qui va créer une page et y inscrire tous les liens : Sub recherche()
mot_clé = InputBox("mot à rechercher ?")
For Each lien In ActiveSheet.Hyperlinks
If InStr(1, lien.Range, mot_clé, 1) + InStr(1, lien.Address, mot_clé, 1) > 0 Then
num = num + 1
If num < 20 Then txt = txt & "<BR><A HREF=""" & WorksheetFunction.Substitute(lien.Address, "'", "_") & """>" & WorksheetFunction.Substitute(lien.Range, Chr(34), "_") & "</A>"
End If
Next lien
If txt = "" Then
MsgBox "pas de """ & mot_clé & """ dans la page"
Else
If num > 20 Then MsgBox "il y a plus de 20 liens répondant à la question," & Chr(10) & " seuls les 20 premiers seront affichés"
ThisWorkbook.FollowHyperlink "javascript:document.open();document.write('" & txt & "');document.close()", , True
End If
End Sub
Une contrainte toutefois, la ligne de commande JavaScript doit être de taille raisonnable. Au delà de 20-25 liens, une erreur risque de se produire, c'est pour cela que le nombre de lien est limité à 20 dans la macro (on aurait évidemment pu faire plusieurs pages).


D'autres exemples :

un moteur de recherche en JavaScript

Une base d'URL et de mots-clés crée et mise à jour par VBA, et un script JavaScript pour aller y chercher touts les liens correspondant à un mot clé... volià de quoi faire un moteur de recherche permettant de faciliter la navigation sur votre site Web.
cliquez ici.

Le dicton du jour affiché par Javacript à partir d'une table mise à jour par VBA.
cliquez ici.

Les prochains anniversaires affichés par Javacript à partir d'une table mise à jour par VBA.
cliquez ici.

Codage sur le Web
Sur une page Web, insérer des lignes qui ne sont visible que par vos amis
(codage VBA et lecture JavaScript).
cliquez ici.

Codage sur le Web II
Le même principe mais avec l'aide de cookies
(codage VBA et lecture JavaScript).
cliquez ici.