Comment ajouter dynamiquement une fonction Worksheet_BeforeDoubleClick ?

  • Initiateur de la discussion JCB
  • Date de début
J

JCB

Guest
Bonjour...
J'ai un pb assez tordu à résoudre :
A l'aide d'un scritp VBS, je crée dynamiquement un tableau Excel
Set oXL = WScript.CreateObject("EXCEL.application")
...
que je remplis par une suite de oXL.Cells(NL,NC).Value = Chaine

Je désire qu'une fois le tableau créé, quand on double-clique sur certaines cellules (celles d'une colonne donnée- C), que cela lance une appli externe (un autre script VBS) à laquelle est passée en paramètres le contenu de la cellule cliquée.

J'ai réussi à le faire en ajoutant à la mimine une fonction dans "Worksheet" de la feuille Excel UNE FOIS qu'elle a été créée.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
CellName = Target.AddressLocal
If Left(CellName, 2) = "$C" Then
key = Target.Value
If key <> "" Then
ret = Shell("cscript h:\wsh\runreg.vbs " & key, vbMinimizedFocus)
End If
End If
End Sub

Cela fonctionne très bien, le 2ème script est bien lancé, avec le contenu de la cellule.

Mais mon problème est le suivant :
Comment insérer cette fonction "Worksheet_BeforeDoubleClick" automatiquement (et donc dynamiquement) depuis le VBS initial dans la feuille qui vient d'être créée?
Je sais, c'est un peu tarabiscoté!
Autant il est facile d'exécuter n'importe quelle fonction qui sera exécutée immédiatement depuis un VBS, autant définir une gestion d'événements depuis cet environnement me semble obscur..

J'ai essayé de créer une macro complémentaire contenant cette fonction, j'ai coché dans EXCEL le XLA correspondant, mais cela ne fonctionne pas, la macro complémentaire n'est pas prise en compte (j'ai fait peut-être une conceté!).

J'ai bien pensé aussi à ajouter un paramètre d'événement dans la création de l'objet Excel dans le VBS :
Set oXL = WScript.CreateObject("EXCEL.application"," "Event_")
mais je n'ai pas l'impression que çà soit prévu (comme avec l'objet InternetExplorer.Application)

Si quelqu'un avait une idée, suggestion, correction ... à me soumettre, je lui en serais très reconnaissant.
Merci ...
 
J

JCB

Guest
Merci à Zon pour sa réponse.
Entre temps j'ai trouvé,

Je me suis inspiré d'un exemple donné ici :
http://j-walk.com/ss/excel/files/addpath.htm

où on retrouve les mêmes principes que dans
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouteEvenementAModule.txt

Dans mon script VBS, j'ai ajouté les lignes suivantes :
Set WBCodeMod = oXL.ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
With WBCodeMod
.insertlines 1, "Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)"
.insertlines 2, "CellName = Target.AddressLocal"
.insertlines 3, "If Left(CellName, 2) = ""$D"" Then"
.insertlines 4, " key = Target.Value"
.insertlines 5, " If key <> """" Then"
.insertlines 6, " cmd=""cscript """"" & FicVBS & """"" "" & chr(34) & key & chr(34)"
.insertlines 7, " ret = Shell(cmd, vbMinimizedFocus)"
.insertlines 8, " End If"
.insertlines 9, " End If"
.insertlines 10, "End Sub"
End With

et ça a marché du 1er coup !

La feuille Excel, pourtant toute neuve puisque créée à la volée par le VBS, s'est trouvée dotée de la méthode "Workbook_SheetBeforeDoubleClick" dans "ThisWorkbook", et quand on double-clique sur une cellule de la colonne D (oui, j'ai ajouté une colonne par rapport au début!), cela lance impeccablement le script dont le nom est dans "FicVBS", avec en paramètres le contenu de la cellule.

Mais sans les exemples que j'ai cités au début, je n'aurais jamais pu trouver en n'utilisant que l'aide en ligne d'EXCEL VBA (XP) !

P.ex. il n'est fait nulle part mention des propriétés de l'objet "VBProject"
La recherche sur "VBcomponents", "CodeModule" ou "insertlines " donne "[Veuillez reformuler votre question" !
 

Discussions similaires

Statistiques des forums

Discussions
312 379
Messages
2 087 772
Membres
103 662
dernier inscrit
rterterert