VBA – Evénementielle lancée depuis macros personnelles

DoubleZero

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Dans les macros personnelles, j’ai, à titre d’exemple, ce code :

Code:
Sub Aujourdhui()
Selection.Value = Date
End Sub

Depuis un bouton logé en « barre d’outils Accès rapide… », je souhaiterais pouvoir rendre cette macro événementielle, par double clic, dans n’importe quel onglet d’un fichier existant ou nouveau.

Je vous remercie vivement pour votre aide.

A bientôt :)
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Re-bonjour :),

Cette ligne de code modifiée est, à son tour, surlignée et le message :

"Erreur d'exécution '9' :
L'indice n'appartient pas à la sélection."


continue d’apparaître.

...Par ailleurs je n'ai pas vraiment compris où tu places tes macros. Dépose donc le fichier avec les macros et celui où tu veux créer la macro événementielle...

Je pense que le dépôt d’un nouveau fichier est inutile. En effet, je ne souhaite pas créer la macro événementielle dans un fichier en particulier mais la créer dans un fichier existant ou bien tout nouveau, depuis un bouton placé en « barre d’outils Accès rapide ».

En réalité, l’intitulé de ma question ne devrait pas être « VBA – Evénementielle lancée depuis macros personnelles » mais « VBA – Transformer une macro personnelle en macro événementielle ».

J’espère être plus précise :confused:.

...Tu nous remercies c'est gentil mais si ça beugue chez toi il faut y porter remède...

Oui, je vous remercie pour le temps que vous consacrez, Dranreb et toi, afin de satisfaire mon souhait. Si le message d’erreur continue de sauter à mes mirettes, peu importe puisque, en trois clics (lancement macro, ok sur message d’erreur, lancement macro), j’obtiens un résultat magique :D.

A bientôt :D:D
 

job75

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Re,

Ce qui est bizarre dans ton problème c'est que tout se passe comme si ActiveSheet n'existait pas :confused:

Fais des essais en plaçant au début de la macro CréerMacro :

Code:
AppActivate "Microsoft Excel"
ActiveSheet.Activate 'y a-t-il un bug sans la ligne précédente ?
A+
 

DoubleZero

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Re-bonjour,

@ job75 :) :

La modification suggérée en #17 n’apporte aucune amélioration.

Au lieu de placer les codes dans "PERSONAL.XSLB", j’ai, cette fois, tenté de créer un nouveau fichier en y insérant lesdits codes dans un module.

Résultat : la macro doit encore être lancée trois fois avant de devenir opérationnelle.

Dans mes macros personnelles se trouve ce code, très pratique, de PMO2 :

Code:
Sub Evenementielle_activer_désactiver()
Dim Msg
With Application
  .EnableEvents = Not .EnableEvents
  If .EnableEvents Then
  .StatusBar = False
Msg = "Evénementielle ACTIVE !"
MsgBox Msg
  Else
  .StatusBar = "Evènementiel désactivé"
  Msg = "Evénementielle INACTIVE !"
  MsgBox Msg
End If
End With
End Sub

Pensant qu’il pouvait être la cause de mes petits bobos, je l’ai désactivé (mis en commentaire).

Résultat : la macro doit encore être sollicitée trois fois avant de devenir opérationnelle.

Saperlipopette ! Pourquoi ce fonctionnement capricieux ? Cela me rappelle les soucis rencontrés - toujours d’actualité - avec mon clavier numérique !

Mais peu importe : je finis, après trois clics sur un bouton, par obtenir le résultat sollicité dans cette discussion.

@ Dranreb :) :

La précision apportée en #18 permet, à présent, la bonne exécution de la macro « Toto » qui, sauf maladresse de ma part, n’est pas transformée en événementielle dans le fichier, existant ou nouveau, sur lequel je me trouve...

Je vous remercie, à nouveau :D et encore :eek:, et vous suggère de ne plus perdre votre temps avec cette discussion !

A bientôt :):)
 

job75

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Re,

Tu n'as pas répondu à ma question : ActiveSheet.Activate beugue ou pas ?

Si ça ne beugue pas il n'est absolument pas normal que la ligne avec ActiveWorkbook.VBProject beugue.

A+
 

Dranreb

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

n’est pas transformée en événementielle dans le fichier
Est transformée en ce qu'on veut, ce qu'on demande. Ici Tata au lieu de Toto pour l'exemple. Si on met Worksheet_BeforeDoubleClick il mettra ça. Mais je doute que ça puisse marcher parce qu'habituellement les Sub sont écrites dans des modules ordinaires alors que les procédures évènement doivent être dans des modules de feuilles.
 

DoubleZero

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Bonjour, job75 :), Dranreb :), le Forum,

...Fais des essais en plaçant au début de la macro CréerMacro :

Code:
AppActivate "Microsoft Excel"
ActiveSheet.Activate 'y a-t-il un bug sans la ligne précédente ?

... ActiveSheet.Activate beugue ou pas ?
Si ça ne beugue pas il n'est absolument pas normal que la ligne avec ActiveWorkbook.VBProject beugue...

Pardon d'avoir omis :eek: de répondre à la question posée.

Les deux lignes de code sont insérées ainsi... et j'espère les avoir placées au bon endroit :

Code:
Sub CréerMacro()
'adapter les paramètres MacroCopiée, MacroDestination, lig1, lig2
Dim MacroCopiée$, MacroDestination$, lig1$, lig2$, t$
AppActivate "Microsoft Excel"
ActiveSheet.Activate 'y a-t-il un bug sans la ligne précédente ?
MacroCopiée = "Aujourdhui"
MacroDestination = "Worksheet_BeforeDoubleClick"
lig1 = "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)"
lig2 = "Cancel = True"
With ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.ActiveSheet.CodeName).CodeModule
'With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
  On Error Resume Next
  .DeleteLines .ProcStartLine(MacroDestination, 0), .ProcCountLines(MacroDestination, 0)
  On Error GoTo 0
  With ThisWorkbook.VBProject.VBComponents("job75_ENOORME_MERCI").CodeModule '"Module1" à adapter
    t = .Lines(.ProcStartLine(MacroCopiée, 0), .ProcCountLines(MacroCopiée, 0))
  End With
  .AddFromString t
  .InsertLines .ProcBodyLine(MacroCopiée, 0) + 1, lig1
  If lig2 <> "" Then .InsertLines .ProcBodyLine(MacroCopiée, 0) + 2, lig2
  .DeleteLines .ProcBodyLine(MacroCopiée, 0), 1
End With
End Sub
Sub Aujourdhui()
With Selection
.Value = Date
.Offset(, 1) = Time
End With
End Sub

Cette ligne demeure surlignée :

Code:
With ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.ActiveSheet.CodeName).CodeModule

Ce qui est vraiment curieux c'est que tout se passe correctement à partir du troisième essai. Mais, comme déjà mentionné, le résultat est magnifique !

A bientôt :D:D
 

MJ13

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Bonjour à tous

J'ai suivi l'affaire de loin, vu mon niveau. Mais j'ai j'utilise cette macro, si cela peut aider. j'ai testé sur Xl2013, donc sur Xl2007 :confused:.

Elle permet de supprimer le code dans la feuille puis insère un code pour éviter des doublons de code.

Code:
Sub Ecrit_Code_VBA_Feuille_Sommaire()
    NomAct = ActiveSheet.Name
    ActiveWorkbook.VBProject.VBComponents(NomAct).CodeModule.DeleteLines 1, ActiveWorkbook.VBProject.VBComponents(NomAct).CodeModule.CountOfLines
    With ActiveWorkbook.VBProject.VBComponents(NomAct).CodeModule
        .InsertLines 1, "Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)"
        .InsertLines 2, "On Error Resume Next"
        .InsertLines 3, "If Sheets(ActiveCell.Text).Visible = False Then Sheets(ActiveCell.Text).Visible = True"
        .InsertLines 4, "Sheets(ActiveCell.Text).Select"
        .InsertLines 5, "End Sub"
    End With
End Sub
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Re-bonjour, bonjour, Michel :D,

Merci, Michel, de répondre également « présent ».

Tu dévalorises ton niveau…

... J'ai suivi l'affaire de loin, vu mon niveau...

J'aimerais bien avoir le même… et, compte tenu du mien… si j’aurais su, j’aurais pas venu !

Le code proposé génère ce message :

"Erreur d'exécution '9' :
L'indice n'appartient pas à la sélection."


Et surligne cette ligne :

Code:
ActiveWorkbook.VBProject.VBComponents(NomAct).CodeModule.DeleteLines 1,  ActiveWorkbook.VBProject.VBComponents(NomAct).CodeModule.CountOfLines

J’aurais dû rester dans mon enclos :( !

Encore merci :eek: et…

… A bientôt :):)
 

DoubleZero

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Bonjour, le Fil :), le Forum,

...Sinon, tu peux toujours essayer de retirer cette ligne ou mettre au début "on error resume next"...

Hélas, cela ne change rien :(. Mais ce n'est pas grave.

Merci, encore, à vous, Dranreb :), job75 :), Michel :).

Lorsque ma tirelire sera dodue, je changerai de version Excel :mad: !

A bientôt :D:D
 

DoubleZero

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Re-bonjour,

Merci, Dranreb :), le fonctionnement du code de Michel devient "parfaitement parfait" :D sur mon poste !

Reste à savoir si je parviendrai à l'adapter à mon besoin :rolleyes:...

A bientôt :):)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Bonjour DoubleZero, le fil,

Alors si la macro de Michel fonctionne, la mienne doit fonctionner aussi :

Code:
Sub CréerMacro()
'adapter les paramètres MacroCopiée, MacroDestination, lig1, lig2
Dim MacroCopiée$, MacroDestination$, lig1$, lig2$, NomAct$, t$
MacroCopiée = "Aujourdhui"
MacroDestination = "Worksheet_BeforeDoubleClick"
lig1 = "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)"
lig2 = "Cancel = True"
NomAct = ActiveSheet.CodeName
With ActiveWorkbook.VBProject.VBComponents(NomAct).CodeModule
  On Error Resume Next
  .DeleteLines .ProcStartLine(MacroDestination, 0), .ProcCountLines(MacroDestination, 0)
  On Error GoTo 0
  With ThisWorkbook.VBProject.VBComponents("job75_ENOORME_MERCI").CodeModule '"Module1" à adapter
    t = .Lines(.ProcStartLine(MacroCopiée, 0), .ProcCountLines(MacroCopiée, 0))
  End With
  .AddFromString t
  .InsertLines .ProcBodyLine(MacroCopiée, 0) + 1, lig1
  If lig2 <> "" Then .InsertLines .ProcBodyLine(MacroCopiée, 0) + 2, lig2
  .DeleteLines .ProcBodyLine(MacroCopiée, 0), 1
End With
End Sub

Sub Aujourdhui()
With Selection
.Value = Date
.Offset(, 1) = Time
End With
End Sub
Mais alors là j'en reste baba :confused:

A+
 

MJ13

XLDnaute Barbatruc
Re : VBA – Evénementielle lancée depuis macros personnelles

Bonjour à tous

J'ai testé mon code sur Xl 2007 et je n'ai pas eu de souci (à voir si le nom de la feuille a le même nom que le codename).

Merci aussi à Bernard et Job.

Le dernier code de Job que j'ai testé fonctionne bien sur Xl2013. C'est complexe pour moi, mais il fait bien son Job :eek:.

Lorsque ma tirelire sera dodue, je changerai de version Excel :mad: !

Ah, 00, XL2007, il est très bien:).

PS (c'est pas très à la mode): Mais suis-je bête :eek:, c'est normal que ça marche pour moi, puisque je testai sur un nouveau classeur et le nom de la feuille est du coup le même que le codename. Mais si tu renommes ta feuille, il faut utiliser le codename (de toute façon, c'est plus prudent :)).
 
Dernière édition:

Statistiques des forums

Discussions
312 677
Messages
2 090 807
Membres
104 671
dernier inscrit
Guilbry