XL 2019 appliquer une macro sur n'importe quel fichier excel

pasquetp

XLDnaute Occasionnel
Bonjour,

je constate dans mon travail que je dois souvent utiliser des macros sur differents fichiers

j'aimerai pouvoir appliquer une macro via un bouton sans avoir copier coller la macro dans l'autre fichier ==> VOILA MON OBJECTIF

le bouton tools que j'ai mis dans le fichier PERSONAL XLSB, applique bien la macro mais cela appliquera une macro normal genre sub machin

le probleme est que la macro ne s'applique pas si cest un private sub worksheet change


voici la macro


==========================================

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then

If ActiveCell.Offset(-1, 1) = "not on the list" Then
ActiveCell.Offset(-1, O).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With


Else


With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With ActiveCell.Offset(-1, O).Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End If
End Sub

======================================

s'agissant d'une macro sur une page, auriez vous une idee pour que le bouton tools puisse appliqer cette macro sur n'importe quel page selectionnée de n'improte quel fichier selectionné?

je vous remercie
 

Pièces jointes

  • forum.JPG
    forum.JPG
    24.7 KB · Affichages: 27

Dudu2

XLDnaute Barbatruc
Bonjour,
Comprends pas.
Il y a une contradiction entre d'une part un bouton (déclenché par l'utilisateur) et l'évènement Worksheet_Change ((déclenché par Excel).
Quand veux-tu que le code que tu as prévu se déclenche ? Sur le bouton ou sur l'évènement ?
 

pasquetp

XLDnaute Occasionnel
bonjour,

je vous remercie d'avoir pris le temps de me repondre et mes excuses pour le manque de clareté

Quand veux-tu que le code que tu as prévu se déclenche ? Sur le bouton ou sur l'évènement ? ==> sur l'evenement.

je prend un exemple:

disons que je telecharge un fichier de données sur notre site en interne ( il ne contient aucun code VBA), il contient juste des données brutes sur excel. ca veut dire que je ne peux pas appliquer de macros dessus a ce stade precis. ca c'est mon probleme majeur.

une fois telechargé, je suis obligé d'aller ouvrir un autre fichier excel qui lui contient le code VBA qui m'interesse , je copie le code vba et je vais le coller dans Sur VBA de ce nouveau fichier dans une des microsoft excel object.

une fois fairt je peux commencer a travailler sur la feuille excel concerné et les evenements se feront automartiquement

cela resume bien les etapes.

Le defi est comment eviter a piocher du code VBA ailleurs ? comment l'avoir quant je telecharge le fichier directement ?

j'espere avoir appporté de meilleures precisions et hesitez pas a me le dire si il reste des zones d'ombres

Cdt

Pierre
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pasquetp, Dudu,
Si votre fichier contenant les macros à exécuter est à un endroit précis qui ne bouge pas, alors vous pouvez exécuter dans un nouveau fichier une macro du premier fichier.
Et si vous regrouper toutes ces macros dans un même fichier, vous pouvez créer un xlam qui sera appelé comme n'importe quel tools d'XL.
Vous avez des exemples comme ceux là :
ou encore de créer un fichier xlam qui regroupe vos macros :
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Faites votre fichier avec macros
Et importez vos données avec Power query (onglet 'Données ')
Ou créer un module de classe application qui contrôlera tous vos classeur ouverts. Une usine à gaz pour si peu :)
 

Dudu2

XLDnaute Barbatruc
Ce que tu veux faire demande des manips pas tout à fait simples.

Étape 1:
La difficulté c'est que tu dois gérer des évènements qui s'appliquent à tous les classeurs ouvert.
Alors il te faut cette structure de classeur qui inclut une classe avec un WithEvents Application.

Utilise le classeur joint Macros sur Évènements.xlsm que je t'ai préparé.
Il contient des Sub relatifs à quelques évènements dont le SheetChange qui semble t'intéresser et dont une liste exhaustive est documentée ici:

Étape 2:
Il faut que tu enregistres ce classeur comme Complément Excel:
Fichier / Enregistrer sous (n'importe quel répertoire où il n'ira pas de toutes façons) / Complément Excel (.xlam)
Le fichier Complément (.xlam) sera placé dans ton répertoire standard des Compléments:
C:\Users\<Utilisateur>\AppData\Roaming\Microsoft\AddIns\Macros sur Évènements.xlam

Étape 3:
Il faut ensuite activer ce Complément.
Ferme ce classeur.
Ouvre un nouveau classeur et va dans:
Fichier / Options / Compléments / Atteindre
et coche la case du Macros sur Évènements

Dès lors, dans tous les classeurs que tu ouvres, les évènements passeront par les Sub correspondants que tu auras codés dans Macros sur Évènements.xlsm.
 

Pièces jointes

  • Macros sur Évènements.xlsm
    25.8 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Bonjour.
Je conseillerais dans le classeur de macro un UserForm non modal montrant que le dispositif est actif (Des évènements de n'importe quel type d'objet y compris de Worksheet ne peuvent de toute façon être pris en charge que depuis un module objet, alors pourquoi pas un UserForm).
VB:
Option Explicit
Private WithEvents Wsh As Worksheet
Private Sub UserForm_Initialize()
   Set Wsh = ActiveSheet
   Me.Caption = Wsh.Name
   End Sub
Private Sub Wsh_Change(ByVal Target As Range)
…
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Il existe une étape supplémentaire que j'appellerai l'Étape @patricktoulon (il saura bien pourquoi ;) )

Le Complément Excel tel qu'installé est fonctionnel. Rien de plus n'est nécessaire.

Si toutefois, tu veux en prime intégrer dans ton Complément des fonctions à but générique que tu souhaites pouvoir appeler directement, comme si elles étaient dans le module appelant de n'importe quel classeur ouvert, @patricktoulon (et sans doute d'autres) applique cette méthode.

- Donner un nom particulier au ProjetVBA dans le classeur des macros: Macros sur Évènements.xlsm. Le nom que j'ai donné est ComplémentMacros.
1669980347473.png


- Dans le classeur quelconque où tu souhaites appeler les fonctions qui sont dans le classeur des macros, ajouter / cocher la Réference qui y apparait automatiquement à partir du moment où le classeur des macros est enregistré comme Complément.
1669980586663.png
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Enregistrer-sous et dans la liste des extension choisir .XLTM (T pour Template).
N'importe quel classeur peut être ouvert comme modèle.
Dans l'explorateur de fichiers, faites un click-droit sur un classeur (.xlsx ou xlsm) et choisir "Nouveau", votre fichier sera ouvert comme s'il était un modèle et quand vous l'enregistrerez par l'interface, c'est "Enregistrer sous" qui s'ouvrira.

Enregistrer comme modèle permet de l'avoir dans les listes de modèles lorsque vous ouvrez un nouveau classeur par "Nouveau"
 

Dudu2

XLDnaute Barbatruc
Oui, merci pour ton explication, en parallèle, j'ai pu consulter la doc Microsoft.
On peut enregistrer le classeur en tant que modèle ou même faire du copier/coller d'un fichier texte dans chaque feuille concernée. Et toute l'équipe doit suivre le process, et reprendre si possible le backlog des classeurs. Ça c'est du simple en effet !
 

Hasco

XLDnaute Barbatruc
Repose en paix
Il n'est question ici ni d'équipe ni de faire suivre le process par quiconque autre que le demandeur.
Proposer à quelqu'un qui maîtrise mal VBA un module de classe application qu'il ne saura pas adapté et le rendra ainsi dépendant de "sachants" aléatoires est pour moi un non sens évident.

Alors au demandeur, je dis : faites avec vos connaissances actuelles, et celles qu'il vous semble simple d'acquérir.
Mais ce n'est que l'avis de quelqu'un qui a quarante ans d'expérience.

@Dudu2 je sais bien qu'avec vos copains vous préférez les grosses machines outils aux mécanismes obscures mais ici il ne s'agit pas de vous.
 

Dudu2

XLDnaute Barbatruc
@Hasco, je ne vois pas ce que viennent faire les grosses machines outils dans cette affaire.
Si vous considérez la création d'un Complément Excel comme une grosse entreprise, revoyez vos standards et dispensez-vous de conseillez du modèle à répliquer à l'envie. Ça ne relève plus du simple mais du simplisme.
 

Discussions similaires

Réponses
9
Affichages
342