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

Réduction nbre de macros identiques

F

Francis38

Guest
Bonsoir le FORUM,

Quelqu'un pourrait-il maider à simplifier mon fichier qui contient beaucoup de macros identiques et qui commence à être gros en taille 4.3 Mo.

J'ai 40 feuilles identiques dans la mise en forme qui servent à suivre des opérations sur des équipements, et les macros qui y sont rattachées (du type Private Sub Worksheet_Change(ByVal Target As Range)) sont les mêmes pour ces 40 feuilles, il y a aussi d'autres feuilles qui ont d'autres macros.

Comment puis-je faire pour éviter de recopier chaque macro dans ces 40 feuilles sans que celà agisse sur les feuilles non concernées.
Faut-il les créer dans 'this workbook' et de quelle manière ?

Merci pour vos réponses.
Francis38.
 

Dan

XLDnaute Barbatruc
Bonsoir,

Une manière simple est de subdiviser ta macro comme suit :

1. Création d'un module pour le classeur

- Donne un nom à ta macro (par ex : Sub Test)
- Place les instructions à exécuter venant de 'Private Sub Worksheet_Change(ByVal Target As Range)'

2. Private Sub Worksheet_Change(ByVal Target As Range)

Dans cette macro actuelle après avoir déplacé les instructions vers la macro Test, fais appel à ta macro TEST. Ce qui donne :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Call Test
End sub

Ceci est juste une proposition sans avoir connaissance du code actuel que comporte ta macro Private sub.

Si pb n'hésite pas



Message édité par: Dan, à: 29/10/2005 22:18
 
F

Francis38

Guest
Bonsoir Dan, et MERCI,

C'est parfait, ca marche comme je le souhaitais.
Par contre il me reste un petit souci.
Dans la dernière instruction, le nom de chaque feuille est normalement repris, donc comme la procédure fait appelle à 'Sub Test' il n'y a que la feuille 'CLA C4' qui est concernée.(voir procédure ci après.)
Comment dois-je procéder, STP ?

With Worksheets('CLA C4').Range('C6:C100').Characters(Start:=1, Length:=1).Font
.Name = 'Comic Sans MS'
.FontStyle = 'Gras'
.Size = 10
End With


Encore merci, à Dan, au FORUM.
 
F

Francis38

Guest
Bonsoir ya__vka

Faut-il écrire comme celà, car si c'est le cas ça ne fonctionne pas, le message suivant s'affiche 'Objet requis' en surlignant la première phrase
With ActiveSheets.Range('C6:C100').Characters(Start:=1, Length:=1).Font
.Name = 'Comic Sans MS'
.FontStyle = 'Gras'
.Size = 10
End With


Francis38
 

Dan

XLDnaute Barbatruc
Re Francis,

A la place de : With ActiveSheets.Range('C6:C100').Characters(Start:=1, Length:=1).Font

Mets : With ActiveSheet.Range('C6:C100').Characters(Start:=1, Length:=1).Font

 
F

Francis38

Guest
C'est bien la faute du S de ActiveSheets qui empêchait la macro d'aboutir.
Donc la solution de ya_v_ka était parfaite.
Comme quoi une erreur de frappe !!!!!

Encore un grand MERCI à :
ya_v_ka,
Dan,
Le FORUM.

Francis38.
 

ya_v_ka

XLDnaute Impliqué
salut tout le monde

content que ca aie fonctionné... je rame encore entre les sheets et les sheet... je dois encore toujours essayer toutes les possibilités

milles fois sur le metier tu remettras l'ouvrage... pfff

ya'v
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…