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 .

Rechercher des sujets similaires à "optimise code vba"