Erreur définie par objet

Bonjour,

J'écris un programme simple de calcul de statistiques telles que la moyenne, le mode, le coefficient d'asymétrie et le kurtosis sous VBA. Cependant, même si mes lignes me semblent être justes, excel me renvoie l'erreur 1004. Pouvez vous m'aider s'il vous plait. Voici le code:

Sub stats()

Dim nbfeuil As Integer
Dim plage As Range

nbfeuil = Sheets.Count - 1

For i = 1 To nbfeuil

Set plage = Worksheets(i).Range(Range("d2"), [d2].End(xlDown))  'l'erreur parail-il est ici, sur cette ligne

   With Worksheets("Statistiques")

            .Range("a" & i + 1) = Worksheets(i).Name
            .Range("b" & i + 1) = WorksheetFunction.Count(plage)
            .Range("c" & i + 1) = WorksheetFunction.Average(plage)
            .Range("d" & i + 1) = WorksheetFunction.Median(plage)
            .Range("e" & i + 1) = WorksheetFunction.StDev(plage)
            .Range("f" & i + 1) = WorksheetFunction.Skew(plage)
            .Range("g" & i + 1) = WorksheetFunction.Kurt(plage)

    End With

    Next i
End Sub

Bonjour darkanett,

Essaie comme ceci :

    With Worksheets(i)
        Set plage = .Range(.Range("d2"), .[d2].End(xlDown))
    End With

à la place de ceci :

[barrer]Set plage = Worksheets(i).Range(Range("d2"), [d2].End(xlDown))[/barrer]

Bonjour à tous,

ou alors:

Set plage = Range(Worksheets(i).Range("d2"), Worksheets(i).[d2].End(xlDown))

perso, j'ajouterai

If WorksheetFunction.Count(plage) > 0 Then

code complet

Sub stats()
Dim nbfeuil As Integer, i%
Dim plage As Range

    nbfeuil = Sheets.Count - 1

    For i = 1 To nbfeuil
        'Set plage = Worksheets(i).Range(Range("d2"), [d2].End(xlDown))  'l'erreur parail-il est ici, sur cette ligne
        Set plage = Range(Worksheets(i).Range("d2"), Worksheets(i).[d2].End(xlDown))
        If WorksheetFunction.Count(plage) > 0 Then
            With Worksheets("Statistiques")
                .Range("a" & i + 1) = Worksheets(i).Name
                .Range("b" & i + 1) = WorksheetFunction.Count(plage)
                .Range("c" & i + 1) = WorksheetFunction.Average(plage)
                .Range("d" & i + 1) = WorksheetFunction.Median(plage)
                .Range("e" & i + 1) = WorksheetFunction.StDev(plage)
                .Range("f" & i + 1) = WorksheetFunction.Skew(plage)
                .Range("g" & i + 1) = WorksheetFunction.Kurt(plage)
            End With
        End If
    Next i
End Sub

Bonne journée

Claude

Ah!

Merci beaucoup! J'ai passé la soirée à chercher. Il faut dire que je débute. Pouvez vous me dire pourquoi avec un WITH ça marche et pourquoi il ne veut pas comprendre sans? Quelle est la logique? Est ce que c'est parce que dans une plage on ne peut pas mettre l'indicateur "i"?

Non, c'est pas parce qu'il y a le WITH que ça marche, c'est juste un oubli de ta part.

Dans ton code, il manque des Workssheets(i) :

Set plage = Worksheets(i).Range(Worksheets(i).Range("d2"), Worksheets(i).[d2].End(xlDown))

Dans ton code précédent si tu ne mets pas les Worksheets(i), le Range("d2") et le [d2].End(xlDown) ne précise pas la feuille source et prend la feuille active comme source.

Ensuite, le WITH est juste une optimisation du code ci-dessus afin d'éviter les 3 Worksheets(i). Tu remarqueras les points :

With Worksheets(i)
    Set plage = .Range(.Range("d2"), .[d2].End(xlDown))
End With

Merci! C'est très clair comme explication.

Bonjour,

Si tu repasse par là, n'oublie pas la petite formalité

a resolu3
Rechercher des sujets similaires à "erreur definie objet"