Appliquer une macro en même temps sur toutes les feuilles

Résolu
Dromois26000 Messages postés 11 Statut Membre -  
Zayx59530 Messages postés 3 Statut Membre -
Bonjour,
Je souhaite appliquer (vis un bouton) une macro en même temps à toutes les feuilles d'un classeur.
Cette macro supprime les lignes vides (mais contenant des formules) et elle édite la feuille.

Ma macro marche parfaitement mais uniquement sur la feuille active et je n'arrive pas à la faire fonctionner sur toutes les feuilles (sauf une qui contient les données.

Voila ma macro :

Sub SupprLigne()
'Suppression lignes vides
Dim Lg%, Plg As Range
Lg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
Range("x2").Formula = "=or($a2=0,$a2="""",$c2=0,$c2="""")"
Range("a1:c" & Lg).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("x1:x2"), Unique:=False
On Error Resume Next
Set Plg = Range("a2:a" & Lg).SpecialCells(xlCellTypeVisible)
Plg.EntireRow.Delete
Range("x2").ClearContents
ActiveSheet.ShowAllData

ActiveSheet.PrintOut
End Sub

Merci d'avance à ceux qui pourront m'aider.

Cdlt
Patrick

10 réponses

  1. JamesH_007
     
    Bonjour Patrick. Pour répondre à ta question, il faut que tu utilises la fonction « Next » pour que ta macro puisse interpréter tous les onglets. Tu trouveras ci-dessous un exemple :

    Sub MAJ()

    Dim ws As Worksheet
    Sheets("Sheet1").Select 'Ici met ton premier onglet

    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets

    ws.Activate

    'Ici ta macro

    Next ws

    End Sub

    Voilà, tu me laisses savoir si ça t'aide ! Bonne journée.
    9
  2. JamesH_007
     
    Salut Patrick, tu trouveras ci-dessous ta macro complete :-)

    Sub supprligne()

    Dim ws As Worksheet
    Sheets("Journaliers").Select

    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets

    ws.Activate

    'macro

    if ws.Name <> "toto" Then

    Dim Lg%, Plg As Range
    Lg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Range("x2").Formula = "=or($a2=0,$a2="""",$c2=0,$c2="""")"
    Range("a1:c" & Lg).AdvancedFilter Action:=xlFilterInPlace, _
    CriteriaRange:=Range("x1:x2"), Unique:=False
    On Error Resume Next
    Set Plg = Range("a2:a" & Lg).SpecialCells(xlCellTypeVisible)
    Plg.EntireRow.Delete
    Range("x2").ClearContents
    ActiveSheet.ShowAllData

    ActiveSheet.PrintOut

    End if

    Next ws

    End Sub

    A+
    1
  3. Dromois26000 Messages postés 11 Statut Membre
     
    Bonjour,

    On progresse, effectivement ça semble s'appliquer à toutes les feuilles mais il ma faudrait exclure la première qui contient les formules et qui ne doit ni être modifiée ni être imprimée.

    J'ai bien essayé d'indiquer le nom de la deuxième feuille au début mais visiblement ça prend quand même la première en compte et du coup ça me flingue complètement ce qui devrait rester imprimé sur les autres...

    Comment exclure une feuille et ou mettre l'instruction, je patauge.

    Merci en tout cas pour ta réponse rapide.
    0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    si la feuille nommée "toto" est à exclure

    Sub xxx()
    Dim ws As Worksheet
    
    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets
         If ws.Name <> "toto" Then
              MsgBox "pour faire qq chose"
         End If
    Next
    End Sub

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dromois26000 Messages postés 11 Statut Membre
     
    Encore merci mais, honte à moi je ne comprends pas où mettre ce complément.

    Voilà ce que j'ai actuellement, la feuille à exclure est "Journaliers".
    Est-ce que j'abuse si je te demande de rectifier ma macro ?

    Sub supprligne()

    Dim ws As Worksheet
    Sheets("Journaliers").Select

    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets

    ws.Activate

    'macro

    Dim Lg%, Plg As Range
    Lg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Range("x2").Formula = "=or($a2=0,$a2="""",$c2=0,$c2="""")"
    Range("a1:c" & Lg).AdvancedFilter Action:=xlFilterInPlace, _
    CriteriaRange:=Range("x1:x2"), Unique:=False
    On Error Resume Next
    Set Plg = Range("a2:a" & Lg).SpecialCells(xlCellTypeVisible)
    Plg.EntireRow.Delete
    Range("x2").ClearContents
    ActiveSheet.ShowAllData

    ActiveSheet.PrintOut

    Next ws

    End Sub
    0
  7. Dromois26000 Messages postés 11 Statut Membre
     
    Bonsoir,

    C'est génial !
    Un grand merci à toi.

    Patrick
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      et moi, je sens le paté ?

      t'es bien un dromois...
      0
  8. Dromois26000 Messages postés 11 Statut Membre
     
    Oups ! Désolé, j'étais tellement content d'avoir la solution que j'ai même pas pensé à remercier les précédents.
    Alors merci aussi à toi bien sur :-)
    0
  9. Jean_max Messages postés 1 Statut Membre
     
    Merci à tous, en lisant vos échanges j'ai pu résoudre un problème similaire!

    Bonne année !

    Amicalement
    0
  10. ultralight
     
    Merci aussi

    J'avais besoin de faire la même chose, nickel
    0
  11. Zayx59530 Messages postés 3 Statut Membre
     
    Bonjour le forum! Je recherche une solution à un problème similaire.

    Pour ma part mon code ressemble à cela:

    Private Sub TextBox1_Change()
    Dim ws As Worksheet
    For Each ws In Sheets(Array("Sommaire", "Prévisions", "Tableau des téléchargements"))
    Dim sCritere As String

    sCritere = "=" & TextBox1.Text & "*"
    ActiveSheet.Range("$A$18:$J$100000").AutoFilter Field:=1, Criteria1:=sCritere, _
    Operator:=xlAnd

    Next ws
    End Sub


    Cependant ma textbox ne filtre que ma première feuille "Sommaire" en gros elle ne traite que ma feuille active.
    J'aimerai que celle-ci filtre également les deux autres feuilles que j'ai ajouté en "Sheets(Array(" sans toucher aux autres feuilles du classeurs (j'ai plus de 600feuilles mais seulement ces trois à traiter).

    C'est possible? En espérant avoir une réponse :) Merci d'avance!
    0