Bonjour,
Je suis un peu nouveau dans le domaine de la macro et du langage VBA, 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 à +/- 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 :
Mais quand j'éxécute, j'ai le message "Erreur d'éxécution 13 : Incompatibilité de type" qui apparait.
Vous auriez une idée ?
Merci d'avance
Je suis un peu nouveau dans le domaine de la macro et du langage VBA, 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) :
Code:
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
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 à +/- 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:
'Je sélectionne mes données triées
DerLigX = Range("I65536").End(xlUp).Row
Set MaPlageX = Range("I2:I" & DerLigX).SpecialCells(xlVisible)
If MaPlageX = "" Then
C1 = Replace(">=" & CStr(i - 0.1), ",", ".")
C2 = Replace("<=" & CStr(i + 0.1), ",", ".")
ActiveSheet.Range("G1", [G65000].End(xlUp)).AutoFilter Field:=1, Criteria1:=C1, _
Operator:=xlAnd, Criteria2:=C2
DerLigX = Range("I65536").End(xlUp).Row
Set MaPlageX = Range("I2:I" & DerLigX).SpecialCells(xlVisible)
End If
Mais quand j'éxécute, j'ai le message "Erreur d'éxécution 13 : Incompatibilité de type" qui apparait.
Vous auriez une idée ?
Merci d'avance
Dernière édition: