Erreur 424, Objet requis inexpliquée

Bonjour à tous,

Je demande votre aide au sujet de la macro suivante:

Sub tri_des_doublons()

Dim Worksheets As Worksheet
Dim lignfin As Integer

Workbooks("Comparaison des listes de vh par database").Activate

For Each Worksheets In Sheets
    If WorksheetFunction.CountBlank(Worksheets.UsedRange.Value) = 0 Then
        Sheets(Worksheets.Name).Activate
        ActiveSheet.Cells(2, 1).End(xlDown).Select
        lignfin = ActiveCell.Row

        For i = lignfin To 2 Step -1
            If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
                Cells(i, 2).Interior.Color = RGB(0, 200, 0)
                Cells(i - 1, 2).Interior.Color = RGB(0, 200, 0)
            End If
        Next
    End If
Next

MsgBox "Vérifiez que les cellules signalées en vert soient vraiment des doublons et procédez aux modifications si nécessaire"

End Sub

Elle me génère un message d'erreur "Objet requis" en surlignant la ligne

If WorksheetFunction.CountBlank(Worksheets.UsedRange.Value) = 0 Then

Hors, cette ligne vient d'un autre code qui marche très bien, dans une macro plus compliquée que celle-ci.

Quelqu'un a une idée d'où celà peut venir?

Mon but avec cette macro est de parcourir toutes les feuilles de mon classeur et de ne traiter que celles qui ne sont pas vides, pour gagner du temps.

Merci d'avance,

Cordialement

Mateo MNH

Bonjour

Pour trouver un bug, il est souvent plus simple de faire tourner la macro et de voir ainsi où il est et pourquoi il se produit.

Tu devrais donc joindre ton fichier qui va avec.

Bye !

bonjour,

worksheets est un objet collection qui contient l'ensemble des feuilles d'un classeur. Je ne pense pas que tu puisses ce utiliser nom pour définir une variable associée à un autre objet.

essaye en remplaçant worksheets par un autre nom de variable (ws par exemple

Sub tri_des_doublons()

Dim ws As Worksheet
Dim lignfin As Integer

Workbooks("Comparaison des listes de vh par database").Activate

For Each Ws In Sheets
    If WorksheetFunction.CountBlank(ws.UsedRange.Value) = 0 Then
        Sheets(ws.Name).Activate
        ActiveSheet.Cells(2, 1).End(xlDown).Select
        lignfin = ActiveCell.Row

        For i = lignfin To 2 Step -1
            If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
                Cells(i, 2).Interior.Color = RGB(0, 200, 0)
                Cells(i - 1, 2).Interior.Color = RGB(0, 200, 0)
            End If
        Next
    End If
Next

MsgBox "Vérifiez que les cellules signalées en vert soient vraiment des doublons et procédez aux modifications si nécessaire"

End Sub

Merci à vous pour vos réponses.

Malheureusement gmb je ne peux pas partager mon fichier car il est confidentiel.

Mais il s'agit d'un classeur dont chaque feuille contient des informations sur ses deux première colonnes,

On a une feuille par source de données. Certaines sont vides et d'autres completes d'où ma macro pour identifier quelles sont les feuilles sur lesquelles il faut travailler.

h2So4, j'ai essayé ta technique mais sans succès. D'ailleurs, comme je l'ai dit plus haut, j'utilise mot pour mot cette commande qui pose ici problem dans une macro qui marche sans erreur.

Peut être que le problème vient d'une autre ligne, car j'ai entendu que parfois l'outil de débogage n'est pas très précis... J'ai revu ma macro plusisurs fois sans déceler d'erreur à mes yeux. Mais peut être qu'avec une vision plus neuve vous verrez quelque chose.

Bonjour,

en effet bien que worksheets soit un objet défini par défaut dans l'environnement VBA excel, il semble ne pas y avoir de problème à le redéfinir.

En supprimant le .value, l'instruction ne donne plus d'erreur.

WorksheetFunction.CountBlank(ws.UsedRange) = 0 Then

Bim ça marche! Merci!

Je ne sais pas pourquoi ce .Value pose soucis ici tandisque dans l'autre code il n'y a aucun souci...

Je te le joins pour exemple si jamais tu as une idée là-dessus...

Sub Test()

Dim Worksheets As Worksheet
Dim count As Integer
Dim lignfin As Long
Dim prevlignfin As Integer
Dim dataorigin As String

Workbooks("Comparaison des listes de vh par database").Activate

count = 0
lignfin = 2
Application.ScreenUpdating = False

Sheets.Add After:=Sheets("Origine")
ActiveSheet.Name = "Tableau de bord"

Sheets.Add After:=Sheets("Tableau de bord")
ActiveSheet.Name = "Temp"

For Each Worksheets In Sheets
    If Worksheets.Tab.Color = RGB(255, 224, 64) Then
        If WorksheetFunction.CountBlank(Worksheets.UsedRange.Value) = 0 Then
            If MsgBox("Faut-il traiter la feuille: " & Worksheets.Name & "?", vbYesNo, "Identification des feuilles à traiter") = vbYes Then
                Sheets(Worksheets.Name).Activate
                dataorigin = ActiveSheet.Name
                ActiveSheet.Range(Cells(1, 1), Cells(1, 2)).Select
                Range(Selection, Selection.End(xlDown)).Select
                Selection.Copy

                Sheets("Temp").Activate
                ActiveSheet.Cells(lignfin, 2).Select
                Selection.PasteSpecial Paste:=xlPasteValues

                prevlignfin = lignfin
                lignfin = (prevlignfin + Selection.Rows.count - 1)
                MsgBox "lignfin: " & lignfin & Chr(10) & "prevlignfin: " & prevlignfin
                Range(Cells(prevlignfin, 1), Cells(lignfin, 1)).Select
                Selection.Value = dataorigin
                lignfin = lignfin + 1

            End If
        End If
    End If
Next

Application.ScreenUpdating = True

End Sub

bonsoir,

pour moi la syntaxe correcte est celle que j'ai mise, l'autre fonctionne sans doute par hasard... je ne peux en dire plus sans voir les données.

Rechercher des sujets similaires à "erreur 424 objet requis inexpliquee"