Tester si une plage de cellules est vide

Dadadidou

XLDnaute Nouveau
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) :
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:

Dadadidou

XLDnaute Nouveau
Re : Tester si une plage de cellules est vide

Après réflexion, toujours pour l'exemple du problème pour l'entier 16, je peux aussi faire la moyenne entre la valeur que j'obtiens pour l'entier 15 et 17, ça me donne quelque chose de convenable.

Le soucis, c'est toujours de tester si ma plage après filtrage est vide ou non, et ça je trouve toujours pas.

Mais merci d'avance de votre aide
 

ROGER2327

XLDnaute Barbatruc
Re : Tester si une plage de cellules est vide

Bonjour Dadadidou



Remplacez
Code:
If MaPlageX = "" Then
par
Code:
If MaPlageX is Nothing Then
Sans support, difficile d'en dire plus...​


ROGER2327
#5500


Samedi 21 Gueules 139 (Lavement - Vacuation)
26 Pluviôse An CCXX, 4,5023h - guède
2012-W07-3T10:48:20Z
 

Dadadidou

XLDnaute Nouveau
Re : Tester si une plage de cellules est vide

Bonjour,

Merci de ta réponse. Déjà je n'ai plus ce message d'erreur ! :)
Mais le reste de ma boucle ne fonctionne toujours pas par contre :(
Je joins mon fichier qui contient ma macro, dont le nom est "Feuil1.Selection". Je vous prie de ne pas regarder le code situé au dessus de l'extrait que j'ai donné, c'est de l'enregistreur de macro et c'est horrible :D

Bref, une fois que la macro est exécutée, vous verrez que en M16, la valeur est 0, puisque qu'il n'y a pas de valeur dans la colonne G située entre 15.95 et 16.05. Mais ca ne me va pas.
Donc je cherche à mettre une valeur en étendant l'intervalle à [15.9;16.1], mais pour l'instant mon code ne change rien.

Merci à vous ! :)
 

Fichiers joints

Haut Bas