Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
    24.7 KB · Affichages: 27

Dudu2

XLDnaute Barbatruc
@patricktoulon,
autant proposer au demandeur quelque chose qui est à sa porté
Qu'est-ce qui te permet de faire l'hypothèse que le demandeur est un quasi-ignorant ?
Tu n'en sais rien. Quand bien même serait-il débutant qu'il a droit à des solutions correctes.

De plus j'ai pris soin de lui faire un fichier, et d'expliquer en détail la procédure à suivre.

Tout ce que je récolte ce sont des sarcasmes éculés d'ex-cadre savant qui se la pète du genre "pourquoi faire simple quand on peut faire compliqué" et autres salaceries.
 

Dranreb

XLDnaute Barbatruc
Revenons en à la question du demandeur voulez vous ?
Le defi est comment eviter a piocher du code VBA ailleurs ? comment l'avoir quant je telecharge le fichier directement ?
Et la réponse c'est: en le rendant exécutable dans le classeur de macro pour n'importe quel objet du type générant ces évènements. Mais ça ne peut être écrit que dans un module objet, pas un module standard.
Donc soit un module de classe dont il faudra créer un exemplaire, soit le module d'un objet implanté par ailleurs.
 

patricktoulon

XLDnaute Barbatruc

être débutant n'est pas être ignorant ne déforme pas mes propos
ne transfert pas tes propres doutes au compte des autres
et arrête de faire de la démagogie ,tu me rappelle trop quelqu'un
Tout ce que je récolte ce sont des sarcasmes éculés d'ex-cadre savant qui se la pète du genre "pourquoi faire simple quand on peut faire compliqué" et autres salaceries.
voilà maintenant qui nous joue les vilains petits canard

essaie plutôt de profiter de l'expérience des uns et des autres
et prends le temps d’analyser (combien de fois ai-je du te le dire) c'est lassant

la meilleure réponse est celle que le demandeur comprends
 
Dernière édition:

dysorthographie

XLDnaute Accro
il faut créer un fichier XLAM ; dans la parti ThisWorBook metre ce code
Code:
Option Explicit
Private WithEvents appXls As Excel.Application
Private Wbs As New Collection

Private Sub Workbook_Open()
  Set appXls = Excel.Application
End Sub

Private Sub appXls_NewWorkbook(ByVal Wb As Workbook)
GestionClasseurs Wb
End Sub

Private Sub appXls_WorkbookOpen(ByVal Wb As Workbook)
GestionClasseurs Wb
End Sub

Sub GestionClasseurs(ByVal Wb As Workbook)
On Error Resume Next
Wbs.Add New WorkOpen, Wb.Name
Set Wbs(Wb.Name).Classeur = Wb
Set Wbs(Wb.Name).Parent = Wbs
On Error GoTo 0
DoEvents
End Sub

dans ce classeur XLAM ajouter un module de classe WorkOpen
Code:
Private WithEvents WBpXls As Workbook, ClasseurName As String
Public Parent As Collection
Public Property Set Classeur(Value As Workbook)
Set WBpXls = Value
ClasseurName = Value.Name
End Property


Private Sub Class_Terminate()
Set WBpXls = Nothing
Set Parent = Nothing
DoEvents
End Sub

Private Sub WBpXls_BeforeClose(Cancel As Boolean)
Parent.Remove ClasseurName
DoEvents
End Sub
Private Sub WBpXls_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name
End Sub
maintenant les évènements des classeurs, dès leurs ouverture ou leurs création serons pris en charge par la macro complémentaire de ton XLAM!

j'ai implémente WBpXls_SheetChange pour l'exemple, a toi de voir pour le rest!
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
@pasquetp, ouh-ou ! Vous ne donnez plus signe de vie ?
Si encore vous aviez joint un classeur j'aurais pu l'équiper de la macro qui permet de faire ce que vous voulez
À savoir une Public Sub CBBTools(), à affecter à votre bouton Tools du ruban, qui active ou désactive la prise en charge de l'évènement Change pour la feuille active et une Public Sub WorksheetChange(ByVal Target As Range) sans blanc souligné entre Worksheet et Change parce que ça ne sera pas une procédure de prise en charge d'évènement, mais elle sera appelée automatiquement quand même par une telle procédure écrite quelque part.
Qu'est-ce que vous voudriez qu'elle fasse au juste ? Là le modèle dans votre poste #1 n'est pas correct: Il y a une variable "O" qui n'est pas initialisée, et il y est utilisé Selection, qui dépend de l'option déplacer la sélection après validation, au lieu de Target qui représente la cellule modifiée. Expliquez donc ce que vous voulez qu'elle fasse exactement !
 

Discussions similaires

Réponses
9
Affichages
342
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…