Erreur type 13 (Cells)

Bonjour à tous

Je viens vers vous après avoir consulté plusieurs rubrique du forum mais je n'ai toujours pas de solution à mon problème.

Aujourd'hui, j'ai besoin de faire une macro à partir d'un logigramme pour avoir un visuel rapide sur un userform.

Dans ce logigramme, j'ai plus de 20 critères parmi ces critères j'ai le critère 3 qui v me faire les erreur 13 (j'ai remarqué que c'est le nombre le valeur qui pose problème car si on réduit le fichier à 1000 lignes cela marche) et j'ai un autre problème avec la condition 6 qui ne me prend pas en compte les OR. Alors que la condition 5 marche parfaitement.

Voici le code ainsi que le fichier (plus de 48000 lignes) :

Private Sub Miseàjour_Click()

    Sheets("Feuil1").Select

    'Dim cell As Range
    Dim ligne As Long
    Dim Critere1 As Long
    Dim Critere1bis As Integer
    Dim Critere2 As Long
    Dim Critere2bis As Integer
    Dim Critere3 As Long
    Dim Critere3bis As Integer
    Dim Critere4 As Long
    Dim Critere4bis As Integer
    Dim Critere5 As Long
    Dim Critere5bis As Integer
    Dim Critere6 As Long
    Dim Critere6bis As Integer

    Critere1 = 0
    Critere1bis = 0
    Critere2 = 0
    Critere2bis = 0
    Critere3 = 0
    Critere3bis = 0
    Critere4 = 0
    Critere4bis = 0
    Critere5 = 0
    Critere5bis = 0
    Critere6 = 0
    Critere6bis = 0

        For ligne = 3 To ActiveSheet.UsedRange.Rows.Count

            'Critère 1
            If cells(ligne, 6) <> "" Then
            Critere1bis = cells(ligne, 2)
            Critere1 = Critere1 + Critere1bis
            End If

            'Critère 2
            If cells(ligne, 6) = "" And cells(ligne, 3) = "Obsolète_Vétuste" Then
            Critere2bis = cells(ligne, 2)
            Critere2 = Critere2 + Critere2bis
            End If

            'Critère 5
            If cells(ligne, 6) = "" And cells(ligne, 3) <> "Obsolète_Vétuste" And (cells(ligne, 7) <> "" Or cells(ligne, 8) <> "") Then
            Critere5bis = cells(ligne, 2)
            Critere5 = Critere5 + Critere5bis
            End If

            'Critère 6
            If cells(ligne, 6) = "" And cells(ligne, 3) <> "Obsolète_Vétuste" And (cells(ligne, 7) = "" Or cells(ligne, 8) = "") And cells(ligne, 1) = "Oui" And cells(ligne, 4) = "Syndic" And (cells(ligne, 5) <> "Refus de passage en domaine privé" Or cells(ligne, 5) <> "Refus travaux tiers domaine privé") Then
            Critere6bis = cells(ligne, 2)
            Critere6 = Critere6 + Critere6bis
            End If

            'Critère 3
            If cells(ligne, 6) = "" Then
            Critere3bis = cells(ligne, 2)
            Critere3 = Critere3 + Critere3bis
            End If

        Next ligne

    Critère1.Value = Critere1
    TotalLogementsRaccordable.Value = Critere1

    Critère2.Value = Critere2
    Critère3.Value = Critere3
    Critère4.Value = Critere4
    TotalHorsResponsabilité.Value = Critere2 + Critere3 + Critere4

    Critère5.Value = Critere5
    Critère6.Value = Critere6

End Sub

J'ai besoin de votre aide merci

Pardon voici le fichier:

8forum.zip (1.07 Mo)

Bonjour,

Regarde ta ligne 19382 qui contient une cellule vide colonne B

Alors vraiment merci, cela faire 2 jours que je cherche et je savais que c'était un problème bête.

Après j'ai un autre problème avec mon critère 6, il ne me prend pas en compte les OR, j'obtiens 913 alors que cela devrait être 205

Re,

Perso en filtrant sur la feuille 1 d'après tes critères de la macro pour le critère 6 je ne trouve que 35 lignes

Re,

Je t'écris sur le papier ce que je veux:

Si Date effective raccordement=vide(colonne6)

et si Cause blocage Syndic<>Obsolète_Vétuste (colonne3)

et (si Motif refus=vide ou Motif dénonciation syndic=vide) (colonne7/8)

et si Site bloqué=oui (colonne1)

et si Type blocage site=Syndic (colonne4)

et (si Cause blocage Syndic<>Refus travaux tiers domaine privé ou Cause blocage Syndic<>Refus de passage en domaine privé) (colonne5)

Alors donner le résultat de la colonne 2

Normalement j'obtiens 205 mais après j'ai remplacé mes OR par des AND, et maintenant cela marche.

Je pense que je n'ai pas compris la condition OR

Bonjour le fil, bonjour le forum,

Ta macro devrait tourner beaucoup plus vite si tu utilises une variable de type variant (ici TV, Tableau des Valeurs) plutôt que de lire directement dans les cellules. Avec le code ci-dessous chez moi pas de bug :

Private Sub Miseàjour_Click()
Dim ligne As Long
Dim Critere1 As Long
Dim Critere1bis As Long
Dim Critere2 As Long
Dim Critere2bis As Long
Dim Critere3 As Long
Dim Critere3bis As Long
Dim Critere4 As Long
Dim Critere4bis As Long
Dim Critere5 As Long
Dim Critere5bis As Long
Dim Critere6 As Long
Dim Critere6bis As Long
Dim O As Worksheet
Dim TV As Variant
Dim I As Long

Set O = Worksheets("Feuil1")
TV = O.Range("A1").CurrentRegion

Critere1 = 0
Critere1bis = 0
Critere2 = 0
Critere2bis = 0
Critere3 = 0
Critere3bis = 0
Critere4 = 0
Critere4bis = 0
Critere5 = 0
Critere5bis = 0
Critere6 = 0
Critere6bis = 0

For I = 3 To UBound(TV, 1)
    'Critère 1
    If TV(I, 6) <> "" Then
    Critere1bis = TV(I, 2)
    Critere1 = Critere1 + Critere1bis
    End If
    'Critère 2
    If TV(I, 6) = "" And TV(I, 3) = "Obsolète_Vétuste" Then
    Critere2bis = TV(I, 2)
    Critere2 = Critere2 + Critere2bis
    End If
    'Critère 5
    If TV(I, 6) = "" And TV(I, 3) <> "Obsolète_Vétuste" And (TV(I, 7) <> "" Or TV(I, 8) <> "") Then
    Critere5bis = TV(I, 2)
    Critere5 = Critere5 + Critere5bis
    End If
    'Critère 6
    If TV(I, 6) = "" And TV(I, 3) <> "Obsolète_Vétuste" And (TV(I, 7) = "" Or TV(I, 8) = "") And TV(I, 1) = "Oui" And TV(I, 4) = "Syndic" And (TV(I, 5) <> "Refus de passage en domaine privé" Or TV(I, 5) <> "Refus travaux tiers domaine privé") Then
    Critere6bis = TV(I, 2)
    Critere6 = Critere6 + Critere6bis
    End If
    'Critère 3
    'If TV(I, 6) = "" Then
    'Critere3bis = TV(I, 2)
    'Critere3 = Critere3 + Critere3bis
    'End If
Next I

Critère1.Value = Critere1
TotalLogementsRaccordable.Value = Critere1
Critère2.Value = Critere2
Critère3.Value = Critere3
Critère4.Value = Critere4
TotalHorsResponsabilité.Value = Critere2 + Critere3 + Critere4
Critère5.Value = Critere5
Critère6.Value = Critere6
End Sub

Effectivement c'est beaucoup plus rapide merci

Rechercher des sujets similaires à "erreur type"