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 :),

C’est à s’arracher les cheveux :mad: !

Cette nuit :

Après la modification apportée par Dranreb en #27, grand bonheur : la macro de Michel a fonctionné dès le premier et unique lancement.

Cet après-midi :

- job75, je modifie ton code déposé en #29, VBA indique à mes mirettes :

attachment.php


- Michel, je teste, pour la deuxième fois, ton code et VBA indique à mes mirettes :

attachment.php


Tout comme avec la macro de job75, je dois cliquer sur « Fin » avant de relancer la macro qui me permet, alors, d’obtenir le résultat idoine.

Petite précision : j’ai pris la peine de tester vos codes sur plusieurs nouveaux fichiers, sans en modifier les noms d’onglets.

C’est vraiment désolant, mais… absolument pas grave.

Un nouveau gr:):)s merci pour votre patience - que j’envie sincèrement - et, je vous en prie, ne perdez plus votre temps sur cette discussion. Une fois de plus, j’ai reçu, grâce à vous, un très beau cadeau :eek:.

A bientôt :D:D
 

Pièces jointes

  • job75 - Copie.JPG
    job75 - Copie.JPG
    21.2 KB · Affichages: 99
  • MJ13 - Copie.jpg
    MJ13 - Copie.jpg
    13.7 KB · Affichages: 66

job75

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

Re 00,

Juste une chose quand même, mets au début de ma macro CréerMacro ce code qui liste normalement tous les éléments du projet VBA :

Code:
Dim c As Object
For Each c In ActiveWorkbook.VBProject.VBComponents
  MsgBox c.Name
Next
S'il y a bug dans le code du bas, normalement l'élément n'a pas été listé, exact ???

A+
 

DoubleZero

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

Re-bonjour :),

... Juste une chose quand même, mets au début de ma macro CréerMacro ce code qui liste normalement tous les éléments du projet VBA :

Code:
Dim c As Object
For Each c In ActiveWorkbook.VBProject.VBComponents
  MsgBox c.Name
Next
S'il y a bug dans le code du bas, normalement l'élément n'a pas été listé, exact ???...

La macro est appelée par bouton en « barre d’outils Accès rapide ».

J’ouvre un nouveau fichier et me place en onglet n° 1 :
attachment.php



J’ouvre un nouveau fichier et me place en onglet n° 4 :


attachment.php


Je dois cliquer x fois « OK » mais, avec la modification du #35, plus aucun message d’erreur n’apparaît.

Merci, job75 :D et…

[FONT=&amp]A bientôt :):)[/FONT]
 

Pièces jointes

  • job75 01 - Copie.JPG
    job75 01 - Copie.JPG
    18.4 KB · Affichages: 67
  • job75 02 - Copie.JPG
    job75 02 - Copie.JPG
    27.5 KB · Affichages: 73

job75

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

Re 00,

Ta réponse n'est pas claire, j'ai l'impression que tu n'as pas bien compris le but de la manoeuvre.

Mais s'il n'y a plus de bug ceci fonctionnera (peut-être) à tout coup :

Code:
Sub CréerMacro()
'adapter les paramètres MacroCopiée, MacroDestination, lig1, lig2
Dim MacroCopiée$, MacroDestination$, lig1$, lig2$, NomAct$, c As Object, 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
For Each c In ActiveWorkbook.VBProject.VBComponents
  If c.Name = NomAct Then
    With c.CodeModule
      On Error Resume Next
      .DeleteLines .ProcStartLine(MacroDestination, 0), .ProcCountLines(MacroDestination, 0)
      On Error GoTo 0
      With ThisWorkbook.VBProject.VBComponents("job75_ENOORME_MERCI").CodeModule
        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 If
Next
End Sub
En tout cas ça ne devrait pas beuguer, mais la macro événementielle est-elle toujours créée ???

A+
 

DoubleZero

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

Bonjour, le Fil :), le Forum,

job75, tu as, ENCORE, travaillé tard, avant-hier, pour bibi :eek: !

... j'ai l'impression que tu n'as pas bien compris le but de la manoeuvre.

Mais s'il n'y a plus de bug ceci fonctionnera (peut-être) à tout coup :

Ton impression est juste :(.

J’ai testé ton code du #37.

Résultat : aucun message d’erreur :D mais je dois appeler à deux reprises la macro pour que l’événementielle devienne opérationnelle, quel que soit l’onglet sur lequel je me trouve.

Ce n’est absolument pas méchant et je te remercie encore 1:):)1 fois.

A bientôt :D:D
 

Si...

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

salut

à partir de la première macro de Job (merci ;)), une adaptation de création mais feuille par feuille pour mieux voir ce qui se passe.
Si... tu la testes avec ton environnement* , dis nous, si cette fois ci, les double clics sont opérationnels immédiatement (comme dans le mien* et bien entendu dans la (les) feuille(s) concernée(s)).
 

Pièces jointes

  • Création Macro VBA.xls
    36.5 KB · Affichages: 32

DoubleZero

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

Re-bonjour, bonjour, Si... :D,

...à partir de la première macro de Job (merci ;)), une adaptation de création mais feuille par feuille pour mieux voir ce qui se passe...

Avec mon environnement, les doubles clics sont, comme avec le tien, totalement opérationnels :D après sollicitation de la macro réservée à chaque onglet (1, 2 et 3).

Un gros MERCI, Si... , pour ton aide :eek: !

A bientôt :):)
 

job75

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

Bonjour DoubleZero, salut Si...

Tu dis qu'au 1er clic la macro événementielle n'est pas opérationnelle, très bien mais qu'est-ce que cela signifie ?

La macro événementielle a-t-elle été créée ou non ?

Si elle a bien été créée je ne sais pas quoi faire.

Si elle n'a pas été créée alors relançons la macro jusqu'à ce qu'elle le soit :

Code:
Sub CréerMacro()
'adapter les paramètres MacroCopiée, MacroDestination, lig1, lig2
Dim MacroCopiée$, MacroDestination$, lig1$, lig2$, NomAct$, c As Object, 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
For Each c In ActiveWorkbook.VBProject.VBComponents
  If c.Name = NomAct Then
    With c.CodeModule
      On Error Resume Next
      .DeleteLines .ProcStartLine(MacroDestination, 0), .ProcCountLines(MacroDestination, 0)
      On Error GoTo 0
      With ThisWorkbook.VBProject.VBComponents("job75_ENOORME_MERCI").CodeModule
        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
    Exit Sub 'on sort
  End If
Next
CréerMacro 'relance la macro si l'événementielle n'a pas été créée
End Sub
A+
 

DoubleZero

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

Re-bonjour,

...Tu dis qu'au 1er clic la macro événementielle n'est pas opérationnelle... La macro événementielle a-t-elle été créée ou non ?... Si elle a bien été créée... Si elle n'a pas été créée...

Job75, je ne sais plus que dire ! Je suis dans la rage et le désespoir.

Le code déposé en #41 fonctionne PARFAITEMENT, quel que soit l’onglet sur lequel je me trouve.
CEPENDANT… le résultat ne correspond PAS INTEGRALEMENT à ma demande initiale. En effet, le double clic n’insère ni la date en cellule x, ni l’heure en cellule x.offset(,1) mais fournit des valeurs et formes non sollicitées, provenant de je ne sais où !

En voici la preuve :confused: :

attachment.php


C’est grave, docteur :eek: ?

Un IMMENSE MERCI à chaque intervenant de cette discussion, assorti d’un MERCI TOUT PARTICULIER à job75 :eek:.

A bientôt :D:D
 

Pièces jointes

  • Abracadabra....jpg
    Abracadabra....jpg
    42.1 KB · Affichages: 72

Membres actuellement en ligne

Statistiques des forums

Discussions
312 748
Messages
2 091 616
Membres
105 009
dernier inscrit
aurelien76110