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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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]
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
Partager