Problème d'optimisation (boucle/structure de données)
Bonjour à toutes et à tous,
Je précise que je débute sur VBA et les macros (j'ai réalisé ma première macro la semaine passée).
Ma première macro fonctionne comme je le souhaite, elle applique une série de calculs à une feuille excel et les insère dans un PowerPoint.
Mon problème aujourd'hui est d'optimiser le code de ma macro dans la mesure où les calculs réalisés s'appliquent plusieurs fois à différents "sites" (notre variable). Une bonne partie du code au niveau des calculs est commun à tous les sites et est répété inutilement quelque part. Cependant une partie variable à chaque site intervient aussi dans le code.
Un petit exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| 'On filtre selon les sites (ici Argenteuil)
ActiveSheet.Range("$A$1:$R$123785").AutoFilter Field:=13, Criteria1:= _
"=*Argenteuil*", Operator:=xlAnd
'On filtre selon le SSID
ActiveSheet.Range("$A$1:$R$123785").AutoFilter Field:=14, Criteria1:= _
"=DALocal", Operator:=xlOr, Criteria2:="=PRT-Oper"
'On sélectionne les colonnes SNR et RSSI qu'on copie dans une nouvelle sheet
Columns("Q:R").Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
Application.CutCopyMode = False
'On applique une formule excel pour obtenir le nombre total de case
Range("E2").Select
ActiveCell.FormulaR1C1 = "=COUNT(C[-4])"
'On filtre le RSSI
Columns("A:B").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$B$925492").AutoFilter Field:=2, Criteria1:="<=-73" _
, Operator:=xlAnd
'On copie les données filtrés dans une sheet2
Selection.Copy
Columns("H:H").Select
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Paste
Range("E6").Select
Application.CutCopyMode = False
'On applique une autre formule avec condition pour savoir sur le nombre de cellule ayant RSSI<-73dBm combien ont un SNR<=20
ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],""<=12"")"
Sheets("Feuil1").Select
Range("E39:E40").Select
Range("E40").Activate
Sheets("Feuil2").Select
Selection.Copy
Sheets("Feuil1").Select
Range("E3").Select
'On copie la valeur obtenue dans la sheet précédante
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "Mauvais"
[etc suite d'instructions dans la même idée] |
Ici pour un site précis (Argenteuil) on a une partie de calculs commune à tous les 6 sites et une partie en rouge propre à ce site.
Pour résoudre ceci j'ai pensé à créer autant de structures que de sites avec les informations propres à chaque site contenues dedans. Les informations qui diffèrent selon les sites sont principalement des critères de filtres, des ranges et des feuilles.
Ensuite l'idéal serait d'appliquer une boucle qui parcourt ces structures et les injecte dans le "code commun". Je rappelle que je suis vraiment novice et je ne sait pas si c'est une solution possible, ni comment l'implémenter pour l'instant, quelle syntaxe etc...
Voila je ne sais pas si vous avez des idées pour résoudre ce problème, je recherche des confirmations/infirmations sur une méthode qui marcherait... Quelques pistes seraient vraiment bienvenues.
Je vous remercie de m'avoir lu, et j'espère pouvoir vous lire à mon tour!
[edit] cette discussion a été vu une petite trentaine de fois pour l'instant sans que je reçoive la moindre réponse... :(
Je voulais savoir si personne n'avait eu d'idées ou de pistes à proposer pour mon problème, ou si je l'ai mal exposé, si vous voulez plus d'informations, de précisions... etc
Merci
Antoine