Instructions identiques macro

Minimix -  
Zoul67 Messages postés 2001 Statut Membre -
Bonjour,

J'ai une macro qui me permet de faire des filtres élaborés sur 4 onglets.
Je souhaiterais savoi s'il est possible "raccourcir" la macro.

Les instructions sont 4 fois les mêmes ;
Sheets(1er filter). Sélect
Range(A6). Sélect
Sheets(BDD).columns(a:i).advancedfilter action:=xlfiltrecopy,_criteriarange=range(a1:c3), copytorange:=range(1er filtre!extraction)_, unique:=false


Et ainsi de suite pour les 3 autres onglets.

De plus j'ai rajouter une somme :

Dim derlig As Long
Sheets(1er filtre).select
derlig = Range("D65536").End(xlUp).Row
Cells(derlig + 1, 4) = Application.Sum(Range("D2:D" & derlig))
End Sub


La encore 4 fois la même instruction...

Y a t i' un moyen plus adapté ?
Je bidouille depuis peu...

Merci d'avance


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

    Envoyé sans copier-coller depuis un iPhone... quel courage !
    Il y a peut-être moyen d'utiliser une boucle For sur les rangs des onglets :
    For i = 1 To 4
    Sheets(i).Select
    ...
    Next i
    0
    1. Minimix
       
      Pas de connexion internet, donc on s'adapte ! Et j'apprends en même temps...

      J'essaye mais étant depuis peu sur vba c'est compliqué !
      Il faut mettre (si j'ai compris) ;
      for i = 1 to 4
      Sheets (i).select
      Range(A6). Sélect
      Sheets(BDD).columns(a:i).advancedfilter action:=xlfiltrecopy,_criteriarange=range(a1:c3), copytorange:=range(1er filtre!extraction)_, unique:=false
      Next i

      Dim derlig as long
      For i = 1 to 4
      Sheets(i).select
      derlig = Range("D65536").End(xlUp).Row
      Cells(derlig + 1, 4) = Application.Sum(Range("D2:D" & derlig))
      Next i
      End Sub
      0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      Ou (dans une seule boucle For)
      Sub essai()
      Dim derlig as Long
      For i = 1 to 4
      Sheets (i).select
      Range(A6). Sélect
      Sheets(i).columns(a:i).advancedfilter action:=xlfiltrecopy,_criteriarange=range(a1:c3), copytorange:=range(1er filtre!extraction)_, unique:=false
      derlig = Range("D65536").End(xlUp).Row
      Cells(derlig + 1, 4) = Application.Sum(Range("D2:D" & derlig))
      Next i
      End Sub

      ou quelque chose d'approchant
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Pour parcourir toutes les feuilles voir ceci:

    https://silkyroad.developpez.com/vba/boucles/#LII

      Dim Ws As Worksheet
        
        'Boucle sur les feuilles du classeur.
        For Each Ws In ThisWorkbook.Worksheets
           '
           '
            'mettre le code ici
           '
        Next Ws


    tu remplaces 1er filter par Ws

    @+ Le Pivert
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bonjour Le Pivert,

      C'est toujours bon à rappeler... ou à enseigner dans ce cas.
      A souligner : il y a peut-être plus que 4 onglets.

      A+
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > Zoul67 Messages postés 2001 Statut Membre
         
        C'est pour cela que la boucle
         For Each Ws In ThisWorkbook.Worksheets
        est plus adapter

        @+
        0
      2. Zoul67 Messages postés 2001 Statut Membre 149 > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        C'est pour cela que la boucle For Each Ws In ThisWorkbook.Worksheets est plus adapter

        Je l'ai compris exactement à l'inverse...
        Si le traitement n'est à faire que sur 4 onglets (parmi 10 p. ex.) For Each tout seul ne convient pas.
        0
    2. Minimix
       
      Merci de vos retours je vais étudier tout ça, pour le moment c'est un peu abstrait mais le lien semble assez "pédagogique"
      0
    3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Je vois quand même une chose dans cette ligne:

      Sheets(1er filter). Sélect


      il faut mettre le nom de la feuille entre guillemets comme ceci:

      Sheets("1er filter"). Sélect


      et je me pose des questions sur cela aussi!

      range(1er filtre!extraction)


      Et pour finir en haut du module ( là où ce trouve ton code) mets ceci:
      Option Explicit
      , cela t'obligera à déclarer toutes tes variables

      @+
      0