Instructions identiques macro
Minimix
-
Zoul67 Messages postés 2001 Statut Membre -
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 ;
Et ainsi de suite pour les 3 autres onglets.
De plus j'ai rajouter une somme :
La encore 4 fois la même instruction...
Y a t i' un moyen plus adapté ?
Je bidouille depuis peu...
Merci d'avance
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
-
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
-
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 -
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
-
-
Bonjour,
Pour parcourir toutes les feuilles voir ceci:
https://silkyroad.developpez.com/vba/boucles/#LIIDim 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-
-
-
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
@+
-