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).