Simplifier ce code en utilisant une boucle ? possible ?

Bonjour tout le monde,

Avant de montrer le code voici quelques explications sur le fonctionnement du classeur, celui-ci est composé de 5 onglet, un onglet "DonnéesBrutes" qui contient l'ensemble des données à analyser (plusieurs centaines de milliers de ligne), un onglet "DonnéesFiltrées" qui contient les séries filtrés suivants les critères définit dans l'onglet "Informations", ces séries filtrés sont ensuite afficher dans l'onglet "Graphiques_Modes".

Il y a deux paramètres pour déterminer le nombre de fois que les données brutes devront être filtrées. Le paramètre NB qui détermine le nombre d'éolienne que comporte le parc ainsi que le paramètre (E1,E2,E3 ... E9) qui permet de déterminer si l'éolienne à un ou deux modes de fonctionnement, si E1 = "Oui" alors il y a deux modes donc deux séries différentes à filtrer.

Voici le code que je voudrais simplifier (seulement pour deux éoliennes), il y a 9 fois le code dans ma macro), en utilisant une bouche si possible:

Sub FiltreAvancé()

Dim DerLig As Long

Dim E1, E2, E3, E4, E5, E6, E7, E8, E9, NB, Modèle

Call SupprimerDonnéesBrutes

'Détermine le type de modèle des éoliennes sélectionnées

Modèle = Sheets("Informations").Range("D8").Value

'Détermine le nombre d'éolienne du parc

NB = Sheets("Informations").Range("E8").Value

'Permet de déterminer si l'éolienne possède un bridage ou non

E1 = Sheets("Informations").Range("AA13").Value

E2 = Sheets("Informations").Range("AA26").Value

E3 = Sheets("Informations").Range("AA39").Value

E4 = Sheets("Informations").Range("AA52").Value

Application.ScreenUpdating = False

Sheets("DonnéesFiltrées").Columns("A:U").Clear

'Filtre éolienne 1 mode normal

Sheets("DonnéesBrutes").Activate

Columns("A:U").Select

'Filtre suivant critère E1.

Selection.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _

Sheets("Informations").Range("A12:I17"), Unique:=False

'Copie des informations.

Range("C2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("A1")

Range("E2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("B1")

Range("H2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("C1")

Range("K2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("D1")

Sheets("DonnéesBrutes").ShowAllData

If E1 = "Oui" Then

'Filtre éolienne 1 mode bridé

Columns("A:U").Select

'Filtre suivant critère E1.

Selection.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _

Sheets("Informations").Range("A19:H21"), Unique:=False

'Copie des informations.

Range("C2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("E1")

Range("E2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("F1")

Range("H2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("G1")

Range("K2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("H1")

Sheets("DonnéesBrutes").ShowAllData

End If

If NB > 1 Then

Columns("A:U").Select

'Filtre suivant critère E2.

Selection.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _

Sheets("Informations").Range("A25:I30"), Unique:=False

'Copie des informations.

Range("C2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("I1")

Range("E2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("J1")

Range("H2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("K1")

Range("K2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("L1")

Sheets("DonnéesBrutes").ShowAllData

If E2 = "Oui" Then

'Filtre éolienne 2 mode bridé

Columns("A:U").Select

'Filtre suivant critère E2.

Selection.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _

Sheets("Informations").Range("A32:H34"), Unique:=False

'Copie des informations.

Range("C2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("M1")

Range("E2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("N1")

Range("H2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("O1")

Range("K2").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy Destination:=ThisWorkbook.Sheets("DonnéesFiltrées").Range("P1")

Sheets("DonnéesBrutes").ShowAllData

End If

End If

Je ne vois pas trop comment simplifier le code car la destination des données ainsi que les critères du filtre sont variable pour passer d'une éolienne à une autre, quelqu'un à une idée ?

Bonjour

Yoda22 a écrit :

quelqu'un à une idée ?

Ton fichier dans lequel tu auras inscrit ce que tu as et ce que tu veux

Pas sur que cela t’amènera une solution mais augmentera tes chances d'en avoir une

Banzai64 a écrit :

Bonjour

Yoda22 a écrit :

quelqu'un à une idée ?

Ton fichier dans lequel tu auras inscrit ce que tu as et ce que tu veux

Pas sur que cela t’amènera une solution mais augmentera tes chances d'en avoir une

Malheureusement je ne peux pas fournir le fichier (protection des données).

Rechercher des sujets similaires à "simplifier code utilisant boucle possible"