Instructions identiques macro

Fermé
Minimix - Modifié par baladur13 le 14/12/2016 à 21:50
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 15 déc. 2016 à 11:29
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.
A voir également:

2 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
14 déc. 2016 à 17:52
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
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
Modifié par Zoul67 le 15/12/2016 à 10:57
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
Modifié par cs_Le Pivert le 15/12/2016 à 10:31
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
15 déc. 2016 à 10:54
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023
15 déc. 2016 à 11:21
C'est pour cela que la boucle
 For Each Ws In ThisWorkbook.Worksheets
est plus adapter

@+
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
Modifié par Zoul67 le 15/12/2016 à 11:29
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
15 déc. 2016 à 11:19
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