Bonjour,
Je suis un peu nouveau dans le domaine de la macro et du langage VBA, bien que j'ai trouvé de l'aide ici, et je coince sur un petit truc.
J'ai 2 colonnes de données (des nombres décimaux), et je cherche à filtrer la colonne 1 sur un intervalle de +/- 0.05 autour de 1 puis 2 puis 3 ... puis 25, et de faire la moyenne des valeurs de la colonne 2 après filtrage et de copier cette moyenne dans une case.
Voici le code que j'ai (qui fonctionne) :
J'ai un souci qui m'en amène un autre. Par exemple, une fois filtré, je n'ai aucune valeur dans l'intervalle pour l'entier 16. Dans ce cas, j'aimerais étendre l'intervalle de recherche à +/- 0.1 pour la colonne 1 et calculer la moyenne de la colonne 2, mais je n'y arrive pas. J'avais pensé à modifier la sélection des données triées en testant si la plage est vide ou non de cette façon :
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 Dim i As Integer Dim c As Range Dim TotalX As Double, MoyenneX As Double Dim CompteurX As Long, DerLigX Dim C1 As String, C2 As String Dim MaPlageX As Range For i = 1 To 25 CompteurX = 0 TotalX = 0 'Je filtre sur mon intervalle C1 = Replace(">=" & CStr(i - 0.05), ",", ".") C2 = Replace("<=" & CStr(i + 0.05), ",", ".") ActiveSheet.Range("G1", [G65000].End(xlUp)).AutoFilter Field:=1, Criteria1:=C1, _ Operator:=xlAnd, Criteria2:=C2 'Je sélectionne mes données triées DerLigX = Range("I65536").End(xlUp).Row Set MaPlageX = Range("I2:I" & DerLigX).SpecialCells(xlVisible) 'Je fais la moyenne For Each c In MaPlageX TotalX = TotalX + c.Value CompteurX = CompteurX + 1 Next c MoyenneX = (TotalX) / (CompteurX) Cells(i, 12) = i Cells(i, 13) = MoyenneX Next i End Sub
Mais quand je fais du pas à pas, quand i=16, ça ne rentre pas dans ma boucle IF, comme s'il la considérait non vide, ou qu'il ne la considère pas du tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 'Je sélectionne mes données triées DerLigX = Range("I10000").End(xlUp).Row Set MaPlageX = Range("I2:I" & DerLigX).SpecialCells(xlVisible) If MaPlageX Is Nothing Then C1 = Replace(">=" & CStr(i - 0.1), ",", ".") C2 = Replace("<=" & CStr(i + 0.1), ",", ".") ActiveSheet.Range("G1", [G10000].End(xlUp)).AutoFilter Field:=1, Criteria1:=C1, _ Operator:=xlAnd, Criteria2:=C2 DerLigX = Range("I10000").End(xlUp).Row Set MaPlageX = Range("I2:I" & DerLigX).SpecialCells(xlVisible) End If
Vous auriez une idée du problème ?
Merci d'avance
PS : Fichier joint en annexe, la macro est "Feuil1.Selection"
Partager