Optimisé code VBA
Bonjour
j'ai enregistrer un code qui clic sur chacun de mes onglet puis sur chaque cellule A4.
j'ai fais ça pour activé un événement change sur clic qui ce déclenche sur chaque feuille.
Je voudrais savoir si il étais possible d'optimisé le code clic feuille?
en vous remerciant de votre aide .
'code 1 pour un auto adjuste sur chacune de mes feuille
'Ce code 1 est sur chacune de mes feuille
'sa fonctionne dés que je clic n'importe ou sur la feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set wS = ThisWorkbook.Sheets("mm16")
WSLC = wS.Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To WSLC
dl = wS.Cells(Rows.Count, i).End(xlUp).Row
If dl > WSLR Then WSLR = dl
Next i
Set PrintArea = wS.Range("A1:M" & WSLR)
wS.PageSetup.PrintArea = PrintArea.Address(0, 0)
End Sub
Sub clicfeuille()
' clicfeuille Macro
'(cliconglet,feuille cellluel(A4))dans un module qui fais suite au code 1
'debut
Sheets("MM16").Select
Range("A4").Select
Sheets("LG87").Select
Range("A4").Select
Sheets("SC46").Select
Range("A4").Select
Sheets("BA64&BI64").Select
Range("A4").Select
Sheets("BD33").Select
Range("A4").Select
Sheets("PA64").Select
Range("A4").Select
Sheets("AU32").Select
Range("A4").Select
Sheets("MTM").Select
Range("A4").Select
Sheets("RD12").Select
Range("A4").Select
Sheets("CC11").Select
Range("A4").Select
Sheets("TO81").Select
Range("A4").Select
Sheets("BR31").Select
Range("A4").Select
Sheets("LISTEIMPRETION").Select 'fin
End Sub
bonjour,
en terme d'optimisation, on peut simplifier le code, mais il ne sera pas nécessairement plus performant !
1) mettre le code dans le module dans thisworkbook (et supprimer le code équivalent dans chacune des feuilles)
Private Sub Workbook_SheetActivate(ByVal ws As Object)
' activation dès qu'une feuille est sélectionnée
WSLC = ws.Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To WSLC
dl = ws.Cells(Rows.Count, i).End(xlUp).Row
If dl > WSLR Then WSLR = dl
Next i
Set PrintArea = ws.Range("A1:M" & WSLR)
ws.PageSetup.PrintArea = PrintArea.Address(0, 0)
End Sub
2) mettre code dans un nouveau module
Sub clicfeuille()
' clicfeuille Macro
For Each v In Split("mm16,lg87,sc46,ba644&bi64,bd33,pa64,au32,mtm,rd12,cc11,to81,br31,listeimpretion", ",")
Sheets(v).Activate
Next v
End Sub
Bonjour Tal mdh
Si j'ai bien compris, seul ces quelques lignes devraient suffire
Sub DéfinirZoneImp()
Dim Ws As Worksheet
Dim RngPrint As Range
' Pour chaque feuille
For Each Ws In ThisWorkbook.Sheets
' Définir la plage des cellules utilisées comme zone d'impression
Ws.PageSetup.PrintArea = Ws.UsedRange.Address
Next Ws
End Sub
On peut éventuellement testé si on se trouve bien sur une des feuilles requise
A+
Edit : salut h2so4
bonjour
Merci à vous deux je vois bien que je ne suis pas votre niveaux ,moi je ne connais que l'enregistreur de macro,
Mais je vais essayer d'en apprendre plus sur la simplification du code sur les partie du début comme les déclaration.
puis sur les boucle for i to des therme pas facile à comprendre, contrairement à l'enregistreur.
Je vais tester vos 2 solutions.
Merci beaucoup du coup de main.
Que mes problèmes puissent aider d'autre utilisateurs, avec les solutions que vous m'avez apporter .