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.