Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

macro évènementielle

11 réponses
Avatar
Caroual
Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon fichier
que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual

10 réponses

1 2
Avatar
Philippe.R
Bonjour,
Regarde chez Frédéric, il y a des exemples de manipulation de code par du
code
http://frederic.sigonneau.free.fr/VBE.htm
et de travail avec des classeurs fermés
http://frederic.sigonneau.free.fr/Ado.htm
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"Caroual" a écrit dans le message de
news:
Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon fichier
que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual




Avatar
michdenis
Bonjour Caroual,

Suppose que tu veux transférer tout le code du "Module1"
du classeur où est écrit ce code vers un nouveau classeur
(ClasseurDestination.xls) dans le module "Feuil2"

P.S- Feuil2 n'est pas le nom de l'onglet de la feuille mais
le nom de l'objet "Feuille" visible dans la fenêtre de l'éditeur de code.
Dans le code suivant, je suppose que le module de destination existe
déjà.

'-------------------------------------
Sub Transférer_Du_Code()

With ThisWorkbook
With .VBProject.VBComponents("Module1").CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With

With Workbooks("ClasseurDestination.xls")
With .VBProject.VBComponents("Feuil2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With

End Sub
'-------------------------------------




"Caroual" a écrit dans le message de groupe de discussion :

Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon fichier
que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual
Avatar
Caroual
Merci pour vos réponses.
J'ai mis ce code :

Private Sub Workbook_Open()
toto = ActiveWorkbook.Name
CodeAcopier = "D:Mes fichiers2009.xls"
Workbooks.Open Filename:=CodeAcopier, UpdateLinks:=3, ReadOnly:=True
With ThisWorkbook
With .VBProject.VBComponents("Feuil1").CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With
Workbooks(toto).Activate
For n = 1 To Sheets.Count
With ThisWorkbook
CodeAmettreAjour = "Feuil" & n
With .VBProject.VBComponents(CodeAmettreAjour).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With
Next
End Sub

Cela fonctionne de feuille à feuille mais pas en boucle car je voudrais
mettre à jour chaque feuille des classeurs.
Je n'arrive pas à voir où j'ai fait une erreur. Il ne me renvoie pas de
message d'erreur mais ne modifie aucune macro.
Caroual


"michdenis" a écrit dans le message de news:

Bonjour Caroual,

Suppose que tu veux transférer tout le code du "Module1"
du classeur où est écrit ce code vers un nouveau classeur
(ClasseurDestination.xls) dans le module "Feuil2"

P.S- Feuil2 n'est pas le nom de l'onglet de la feuille mais
le nom de l'objet "Feuille" visible dans la fenêtre de l'éditeur de code.
Dans le code suivant, je suppose que le module de destination existe
déjà.

'-------------------------------------
Sub Transférer_Du_Code()

With ThisWorkbook
With .VBProject.VBComponents("Module1").CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With

With Workbooks("ClasseurDestination.xls")
With .VBProject.VBComponents("Feuil2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With

End Sub
'-------------------------------------




"Caroual" a écrit dans le message de groupe de
discussion :

Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon fichier
que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual



Avatar
michdenis
Essaie ceci :

Pour faire ce que tu demandes, le classeur source et le
classeur de destination doivent avoir dans chacun, un
module Feuille ayant même nom. Dans le classeur de
destination, tu peux avoir plus de feuilles que dans le
classeur source...cela ne cause pas de problème !

Classeur source Classeur de Destination
Nom Des feuilles Feuil1 Feuil1
toto toto
titi titi

Ces noms pourraient être différents mais tu dois avoir un
tableau des équivalences des nom des feuilles entre les 2
classeurs afin de t'assurer que tu copies le code de l'un vers
son module équivalent dans l'autre fichier.

Essaie ceci :
Tu appelles cette procédure à partir du ThisWorkbook
"Workbook_Open"

Dans un module standard...
'------------------------------------------------
Sub Copier_Le_Code()
Dim MesMacros As String, Sh As Worksheet
Dim CodeACopier As String
Dim Wk As Workbook, Toto As String
Dim ModuleName As String

Toto = ActiveWorkbook.Name

CodeACopier = "D:Mes fichiers2009.xls"

Set Wk = Workbooks.Open(CodeACopier, UpdateLinks:=3)
With Wk
For Each Sh In .Worksheets
ModuleName = Sh.CodeName
With .VBProject.VBComponents(ModuleName).CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With

With Workbooks(Toto)
With .VBProject.VBComponents(ModuleName).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With
Next
End With
End Sub
'------------------------------------------------






"Caroual" a écrit dans le message de groupe de discussion :

Merci pour vos réponses.
J'ai mis ce code :

Private Sub Workbook_Open()
toto = ActiveWorkbook.Name
CodeAcopier = "D:Mes fichiers2009.xls"
Workbooks.Open Filename:=CodeAcopier, UpdateLinks:=3, ReadOnly:=True
With ThisWorkbook
With .VBProject.VBComponents("Feuil1").CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With
Workbooks(toto).Activate
For n = 1 To Sheets.Count
With ThisWorkbook
CodeAmettreAjour = "Feuil" & n
With .VBProject.VBComponents(CodeAmettreAjour).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With
Next
End Sub

Cela fonctionne de feuille à feuille mais pas en boucle car je voudrais
mettre à jour chaque feuille des classeurs.
Je n'arrive pas à voir où j'ai fait une erreur. Il ne me renvoie pas de
message d'erreur mais ne modifie aucune macro.
Caroual


"michdenis" a écrit dans le message de news:

Bonjour Caroual,

Suppose que tu veux transférer tout le code du "Module1"
du classeur où est écrit ce code vers un nouveau classeur
(ClasseurDestination.xls) dans le module "Feuil2"

P.S- Feuil2 n'est pas le nom de l'onglet de la feuille mais
le nom de l'objet "Feuille" visible dans la fenêtre de l'éditeur de code.
Dans le code suivant, je suppose que le module de destination existe
déjà.

'-------------------------------------
Sub Transférer_Du_Code()

With ThisWorkbook
With .VBProject.VBComponents("Module1").CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With

With Workbooks("ClasseurDestination.xls")
With .VBProject.VBComponents("Feuil2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With

End Sub
'-------------------------------------




"Caroual" a écrit dans le message de groupe de
discussion :

Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon fichier
que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual



Avatar
FS
Bonjour,

Une approche possible est de distribuer une macro complémentaire qui
"stocke" les procédures que tu fais évoluer.
Dans le fichier "utilisé par plusieurs personnes", au lieu de coder les
événements, tu appelles seulement une procédure de la macro complémentaire.
Par exemple, dans ton fichier actuel, dans le module ThisWorkbook,
l'événement Worksheet_Change peut être actuellement ceci :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & " " & Target.Address
End Sub

Tu pourrais le transformer ainsi :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub

Et dans un module ordinaire de ta macro complémentaire (à laquelle ton
classeur peut faire référence pour simplifier les appels de procédures),
tu as ce genre de code :

Sub Classeur_FeuilleChange _
(ByVal Feuille As Object, ByVal Cell As Range)
MsgBox Feuille.Name & " " & Cell.Address
End Sub

A partir de là, il te suffit de faire évoluer le code dans la macro
complémentaire et d'en distribuer les versions successives pour que tous
les utilisateurs en bénéficient sans modifier le classeur de travail
lui-même. C'est, à mon avis, beaucoup plus souple et facile à maintenir
que la solution que tu as choisie. Mais ce n'est que mon avis :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Caroual a écrit :
Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon fichier
que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual




Avatar
Caroual
J'ai eu plein de soucis avec excel qui plantait sans arrêt lorsque je
lançais le code depuis le workbook open. Pourtant je mettais bien le code
dans un module.

Private Sub Workbook_Open()
Copier_Le_Code
End Sub

Pour finir j'ai codé comme ceci dans un module

Sub Copier_Le_Code()
Dim MesMacros As String, Sh As Worksheet
Dim CodeACopier As String
Dim Wk As Workbook, Toto As String
Dim ModuleName As String
Application.EnableEvents = False
Toto = ActiveWorkbook.Name
CodeACopier = "D:Mes fichiers2009.xls"
Set Wk = Workbooks.Open(CodeACopier, UpdateLinks:=3, ReadOnly:=True)
With Wk
ModuleName = Sheets("modèle").CodeName
With .VBProject.VBComponents(ModuleName).CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With
Workbooks(Toto).Activate
ModuleName2 = ActiveSheet.CodeName
If ActiveSheet.Range("a2") = "Début de mois" Then
With ActiveWorkbook.VBProject.VBComponents(ModuleName2).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End If
End Sub
La mise à jour se lancera à la demande depuis un bouton sur la feuille à
mettre à jour et cela me convient.

Merci beaucoup pour votre aide
Caroual

"michdenis" a écrit dans le message de news:

Essaie ceci :

Pour faire ce que tu demandes, le classeur source et le
classeur de destination doivent avoir dans chacun, un
module Feuille ayant même nom. Dans le classeur de
destination, tu peux avoir plus de feuilles que dans le
classeur source...cela ne cause pas de problème !

Classeur source Classeur de Destination
Nom Des feuilles Feuil1 Feuil1
toto toto
titi
titi

Ces noms pourraient être différents mais tu dois avoir un
tableau des équivalences des nom des feuilles entre les 2
classeurs afin de t'assurer que tu copies le code de l'un vers
son module équivalent dans l'autre fichier.

Essaie ceci :
Tu appelles cette procédure à partir du ThisWorkbook
"Workbook_Open"

Dans un module standard...
'------------------------------------------------
Sub Copier_Le_Code()
Dim MesMacros As String, Sh As Worksheet
Dim CodeACopier As String
Dim Wk As Workbook, Toto As String
Dim ModuleName As String

Toto = ActiveWorkbook.Name

CodeACopier = "D:Mes fichiers2009.xls"

Set Wk = Workbooks.Open(CodeACopier, UpdateLinks:=3)
With Wk
For Each Sh In .Worksheets
ModuleName = Sh.CodeName
With .VBProject.VBComponents(ModuleName).CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With

With Workbooks(Toto)
With .VBProject.VBComponents(ModuleName).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With
Next
End With
End Sub
'------------------------------------------------






"Caroual" a écrit dans le message de groupe de
discussion :

Merci pour vos réponses.
J'ai mis ce code :

Private Sub Workbook_Open()
toto = ActiveWorkbook.Name
CodeAcopier = "D:Mes fichiers2009.xls"
Workbooks.Open Filename:=CodeAcopier, UpdateLinks:=3, ReadOnly:=True
With ThisWorkbook
With .VBProject.VBComponents("Feuil1").CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With
Workbooks(toto).Activate
For n = 1 To Sheets.Count
With ThisWorkbook
CodeAmettreAjour = "Feuil" & n
With .VBProject.VBComponents(CodeAmettreAjour).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With
Next
End Sub

Cela fonctionne de feuille à feuille mais pas en boucle car je voudrais
mettre à jour chaque feuille des classeurs.
Je n'arrive pas à voir où j'ai fait une erreur. Il ne me renvoie pas de
message d'erreur mais ne modifie aucune macro.
Caroual


"michdenis" a écrit dans le message de news:

Bonjour Caroual,

Suppose que tu veux transférer tout le code du "Module1"
du classeur où est écrit ce code vers un nouveau classeur
(ClasseurDestination.xls) dans le module "Feuil2"

P.S- Feuil2 n'est pas le nom de l'onglet de la feuille mais
le nom de l'objet "Feuille" visible dans la fenêtre de l'éditeur de code.
Dans le code suivant, je suppose que le module de destination existe
déjà.

'-------------------------------------
Sub Transférer_Du_Code()

With ThisWorkbook
With .VBProject.VBComponents("Module1").CodeModule
MesMacros = .Lines(1, .CountOfLines)
End With
End With

With Workbooks("ClasseurDestination.xls")
With .VBProject.VBComponents("Feuil2").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString MesMacros
End With
End With

End Sub
'-------------------------------------




"Caroual" a écrit dans le message de groupe de
discussion :

Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon
fichier
que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual






Avatar
Caroual
J'adore excel mais je suis loin de maitriser, notament les macros
complémentaires que je n'ai jamais utilisées.
Par contre il est vrai qu'avec les macros évènementielles dans les feuilles
j'ai souvent des soucis car si elles se désactivent il n'y a plus rien qui
marche.

Actuellement, je distribue un tas de petits outils liés à mon travail par le
biais d'une macro perso en lecture seule qui est en réseau et dont j'ai
installé un raccourci dans le xlstart des collègues. Je fais mes modifs de
mon côté et à la prochaine ouverture de leur excel ils ont la bonne version.
Si j'ai compris ta façon de procéder je pourrais peut être mettre le code
des évènements à ta manière dans mon fichier de macro perso ???
Qu'en penses-tu ?
Je vais regarder de plus près les macros complèmentaires qui m'inquiètent un
peu.
En fait je veux faire le max de choses sans devoir aller sur le poste de
chacun installer quelque chose et surtout qu'il n'en existe qu'une version.

Merci beaucoup

Caroual



"FS" a écrit dans le message de news:
uh$
Bonjour,

Une approche possible est de distribuer une macro complémentaire qui
"stocke" les procédures que tu fais évoluer.
Dans le fichier "utilisé par plusieurs personnes", au lieu de coder les
événements, tu appelles seulement une procédure de la macro
complémentaire.
Par exemple, dans ton fichier actuel, dans le module ThisWorkbook,
l'événement Worksheet_Change peut être actuellement ceci :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & " " & Target.Address
End Sub

Tu pourrais le transformer ainsi :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub

Et dans un module ordinaire de ta macro complémentaire (à laquelle ton
classeur peut faire référence pour simplifier les appels de procédures),
tu as ce genre de code :

Sub Classeur_FeuilleChange _
(ByVal Feuille As Object, ByVal Cell As Range)
MsgBox Feuille.Name & " " & Cell.Address
End Sub

A partir de là, il te suffit de faire évoluer le code dans la macro
complémentaire et d'en distribuer les versions successives pour que tous
les utilisateurs en bénéficient sans modifier le classeur de travail
lui-même. C'est, à mon avis, beaucoup plus souple et facile à maintenir
que la solution que tu as choisie. Mais ce n'est que mon avis :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Caroual a écrit :
Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des macro
quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des macros
évènements de la feuille viennent se rafraichir par rapport à mon
fichier que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual





Avatar
Caroual
Je viens d'essayer de mettre le code évènements dans une sub
Classeur_FeuilleChange dans ma macro perso et dans la feuille du classeur
concerné :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub
Comment indiquer qu'il faut aller chercher la macro à l'endroit où elle se
trouve maintenant.
Avec un bouton c'est simple d'affecter la macro du classeur qui nous
intéresse mais là je ne sais pas ...
J'ai essayé ceci mais cela ne marche pas :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Workbooks("macroperso.xls").Classeur_FeuilleChange Sh, Target
End Sub
Caroual

"Caroual" a écrit dans le message de news:

J'adore excel mais je suis loin de maitriser, notament les macros
complémentaires que je n'ai jamais utilisées.
Par contre il est vrai qu'avec les macros évènementielles dans les
feuilles j'ai souvent des soucis car si elles se désactivent il n'y a plus
rien qui marche.

Actuellement, je distribue un tas de petits outils liés à mon travail par
le biais d'une macro perso en lecture seule qui est en réseau et dont j'ai
installé un raccourci dans le xlstart des collègues. Je fais mes modifs de
mon côté et à la prochaine ouverture de leur excel ils ont la bonne
version.
Si j'ai compris ta façon de procéder je pourrais peut être mettre le code
des évènements à ta manière dans mon fichier de macro perso ???
Qu'en penses-tu ?
Je vais regarder de plus près les macros complèmentaires qui m'inquiètent
un peu.
En fait je veux faire le max de choses sans devoir aller sur le poste de
chacun installer quelque chose et surtout qu'il n'en existe qu'une
version.

Merci beaucoup

Caroual



"FS" a écrit dans le message de news:
uh$
Bonjour,

Une approche possible est de distribuer une macro complémentaire qui
"stocke" les procédures que tu fais évoluer.
Dans le fichier "utilisé par plusieurs personnes", au lieu de coder les
événements, tu appelles seulement une procédure de la macro
complémentaire.
Par exemple, dans ton fichier actuel, dans le module ThisWorkbook,
l'événement Worksheet_Change peut être actuellement ceci :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & " " & Target.Address
End Sub

Tu pourrais le transformer ainsi :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub

Et dans un module ordinaire de ta macro complémentaire (à laquelle ton
classeur peut faire référence pour simplifier les appels de procédures),
tu as ce genre de code :

Sub Classeur_FeuilleChange _
(ByVal Feuille As Object, ByVal Cell As Range)
MsgBox Feuille.Name & " " & Cell.Address
End Sub

A partir de là, il te suffit de faire évoluer le code dans la macro
complémentaire et d'en distribuer les versions successives pour que tous
les utilisateurs en bénéficient sans modifier le classeur de travail
lui-même. C'est, à mon avis, beaucoup plus souple et facile à maintenir
que la solution que tu as choisie. Mais ce n'est que mon avis :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Caroual a écrit :
Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des
macro quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier, j'aurais
aimé qu'à l'ouverture de chaque version de ce fichier, le code des
macros évènements de la feuille viennent se rafraichir par rapport à
mon fichier que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual








Avatar
Caroual
J'ai avancé un peu. J'ai mis ce code dans la feuille de travail :

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Select
Application.Run "Martine.xls!Classeur_FeuilleChange"
End Sub

et le code dans ma macro perso Martine.xls où j'ai déclaré Targette as range
et Set Targette = ActiveCell
J'ai juste quelque souci avec Nom définir que je voudrais ne définir que
dans le classeur perso martine.xls et qui devrait me servir pour créer des
validations de cellules.

De ce fait je ne vais plus avoir qu'un code à gérer dans ma macro perso.
Merci beaucoup

Caroual


"Caroual" a écrit dans le message de news:
%
Je viens d'essayer de mettre le code évènements dans une sub
Classeur_FeuilleChange dans ma macro perso et dans la feuille du classeur
concerné :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub
Comment indiquer qu'il faut aller chercher la macro à l'endroit où elle se
trouve maintenant.
Avec un bouton c'est simple d'affecter la macro du classeur qui nous
intéresse mais là je ne sais pas ...
J'ai essayé ceci mais cela ne marche pas :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Workbooks("macroperso.xls").Classeur_FeuilleChange Sh, Target
End Sub
Caroual

"Caroual" a écrit dans le message de news:

J'adore excel mais je suis loin de maitriser, notament les macros
complémentaires que je n'ai jamais utilisées.
Par contre il est vrai qu'avec les macros évènementielles dans les
feuilles j'ai souvent des soucis car si elles se désactivent il n'y a
plus rien qui marche.

Actuellement, je distribue un tas de petits outils liés à mon travail par
le biais d'une macro perso en lecture seule qui est en réseau et dont
j'ai installé un raccourci dans le xlstart des collègues. Je fais mes
modifs de mon côté et à la prochaine ouverture de leur excel ils ont la
bonne version.
Si j'ai compris ta façon de procéder je pourrais peut être mettre le code
des évènements à ta manière dans mon fichier de macro perso ???
Qu'en penses-tu ?
Je vais regarder de plus près les macros complèmentaires qui m'inquiètent
un peu.
En fait je veux faire le max de choses sans devoir aller sur le poste de
chacun installer quelque chose et surtout qu'il n'en existe qu'une
version.

Merci beaucoup

Caroual



"FS" a écrit dans le message de news:
uh$
Bonjour,

Une approche possible est de distribuer une macro complémentaire qui
"stocke" les procédures que tu fais évoluer.
Dans le fichier "utilisé par plusieurs personnes", au lieu de coder les
événements, tu appelles seulement une procédure de la macro
complémentaire.
Par exemple, dans ton fichier actuel, dans le module ThisWorkbook,
l'événement Worksheet_Change peut être actuellement ceci :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & " " & Target.Address
End Sub

Tu pourrais le transformer ainsi :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub

Et dans un module ordinaire de ta macro complémentaire (à laquelle ton
classeur peut faire référence pour simplifier les appels de procédures),
tu as ce genre de code :

Sub Classeur_FeuilleChange _
(ByVal Feuille As Object, ByVal Cell As Range)
MsgBox Feuille.Name & " " & Cell.Address
End Sub

A partir de là, il te suffit de faire évoluer le code dans la macro
complémentaire et d'en distribuer les versions successives pour que tous
les utilisateurs en bénéficient sans modifier le classeur de travail
lui-même. C'est, à mon avis, beaucoup plus souple et facile à maintenir
que la solution que tu as choisie. Mais ce n'est que mon avis :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Caroual a écrit :
Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des
macro quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier,
j'aurais aimé qu'à l'ouverture de chaque version de ce fichier, le code
des macros évènements de la feuille viennent se rafraichir par rapport
à mon fichier que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual












Avatar
Caroual
Re bonjour,
Est-il possible de définir une plage de cellule dans mon classeur de macro
perso et d'attribuer ensuite à une validation de cellules dans un autre
classeur ?
je sais le faire dans le même classeur mais je n'y arrive pas entre 2
classeurs.
Merci
Caroual

"Caroual" a écrit dans le message de news:
%
Je viens d'essayer de mettre le code évènements dans une sub
Classeur_FeuilleChange dans ma macro perso et dans la feuille du classeur
concerné :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub
Comment indiquer qu'il faut aller chercher la macro à l'endroit où elle se
trouve maintenant.
Avec un bouton c'est simple d'affecter la macro du classeur qui nous
intéresse mais là je ne sais pas ...
J'ai essayé ceci mais cela ne marche pas :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Workbooks("macroperso.xls").Classeur_FeuilleChange Sh, Target
End Sub
Caroual

"Caroual" a écrit dans le message de news:

J'adore excel mais je suis loin de maitriser, notament les macros
complémentaires que je n'ai jamais utilisées.
Par contre il est vrai qu'avec les macros évènementielles dans les
feuilles j'ai souvent des soucis car si elles se désactivent il n'y a
plus rien qui marche.

Actuellement, je distribue un tas de petits outils liés à mon travail par
le biais d'une macro perso en lecture seule qui est en réseau et dont
j'ai installé un raccourci dans le xlstart des collègues. Je fais mes
modifs de mon côté et à la prochaine ouverture de leur excel ils ont la
bonne version.
Si j'ai compris ta façon de procéder je pourrais peut être mettre le code
des évènements à ta manière dans mon fichier de macro perso ???
Qu'en penses-tu ?
Je vais regarder de plus près les macros complèmentaires qui m'inquiètent
un peu.
En fait je veux faire le max de choses sans devoir aller sur le poste de
chacun installer quelque chose et surtout qu'il n'en existe qu'une
version.

Merci beaucoup

Caroual



"FS" a écrit dans le message de news:
uh$
Bonjour,

Une approche possible est de distribuer une macro complémentaire qui
"stocke" les procédures que tu fais évoluer.
Dans le fichier "utilisé par plusieurs personnes", au lieu de coder les
événements, tu appelles seulement une procédure de la macro
complémentaire.
Par exemple, dans ton fichier actuel, dans le module ThisWorkbook,
l'événement Worksheet_Change peut être actuellement ceci :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & " " & Target.Address
End Sub

Tu pourrais le transformer ainsi :

Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
Classeur_FeuilleChange Sh, Target
End Sub

Et dans un module ordinaire de ta macro complémentaire (à laquelle ton
classeur peut faire référence pour simplifier les appels de procédures),
tu as ce genre de code :

Sub Classeur_FeuilleChange _
(ByVal Feuille As Object, ByVal Cell As Range)
MsgBox Feuille.Name & " " & Cell.Address
End Sub

A partir de là, il te suffit de faire évoluer le code dans la macro
complémentaire et d'en distribuer les versions successives pour que tous
les utilisateurs en bénéficient sans modifier le classeur de travail
lui-même. C'est, à mon avis, beaucoup plus souple et facile à maintenir
que la solution que tu as choisie. Mais ce n'est que mon avis :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Caroual a écrit :
Bonjour,
J'ai cré un fichier où j'ai placé des macros quand sélection et des
macro quand feuille change.
plusieurs personnes utilise une version de ce fichier.
Comme je veux faire évoluer les macro évènements de ce fichier,
j'aurais aimé qu'à l'ouverture de chaque version de ce fichier, le code
des macros évènements de la feuille viennent se rafraichir par rapport
à mon fichier que je fais évoluer régulièrement.
Est-ce possible ?
Merci
Caroual












1 2