Erreur 424 que je ne comprends pas
Bonjour à toutes et à tous !
Je viens de débuter sur VBA que j'utilise pour un stage dans lequel j'ai d'énorme quantité de données à traiter.
Pour faciliter le traitement j'essaye de coder sur VBA.
Cette communauté m'a déjà rendu un fier service alors je reviens appeler à l'aide.
Deux codes, pourtant simples, me renvoient une "erreur 424, objet requis" et je n'arrive pas à les corriger.
Voici les deux codes en question :
Sub SupressionValeursNulles()
'
With Sheets("correction")
dl = .Cells(Rows.Count, 10).End(xlUp).Row
For i = 2 To dl
If .Cells(i, 10).Value = "0" Then cell.EntireRow.Delete
Next i
End With
End Sub
Sub SuppressionNuits()
'
' SuppressionHeureNuit Macro
' Supprime les données de 22h à 4h59
With Sheets("correction")
dl = .Cells(Rows.Count, 7).End(xlUp).Row
For i = 2 To dl
gn = .Cells(i, 7)
If cell.Value = "0" Then cell.EntireRow.Delete
If cell.Value = "1" Then cell.EntireRow.Delete
If cell.Value = "2" Then cell.EntireRow.Delete
If cell.Value = "3" Then cell.EntireRow.Delete
If cell.Value = "4" Then cell.EntireRow.Delete
If cell.Value = "22" Then cell.EntireRow.Delete
If cell.Value = "23" Then cell.EntireRow.Delete
Next i
End With
End Submerci d'avance pour votre coup de main !
Bonjour Ugo
Il faut mettre "Option Explicit" en haut de chaque module
Ensuite dans les subroutines il faut déclarer les variables
On peut ajouter une gestion d'erreur "On Error goto" qui permettra d'avoir du détail sur une erreur avec une commande "Debug.Print err.Number & " " & err.Description
ce n'est pas qu'une bonne habitude, c'est indispensable.
Ensuite on va le menu "Débogage et on lance "Compiler VBAProject"
Si ceci est fait on peut poursuivre
Bonjour !
Donc si je comprends bien, j'écris l'instruction "Option Explicit" entre le nom du sub et le With, Dans le With je déclare "i" (mon numéro de ligne) comme un entier ?
Ensuite, pour la gestion d'erreur, je renvoie où ?
bonjour,
et surtout après le With ne pas oublier de semer quelques points (.) devant chaque Cells ( .Cells...)
A+
la faute la plus importante, quand on fait de trucs parreil (delete rows, ...) c'est de commencer au bout et de reculer, donc
For i = dl to 2 step -1
autrement on risque d'oublier un ou plusieurs regles successives avec valeur "0" !!!
2ieme remarque
Select Case cell.Value
Case "0", "1", "2", "3", "4", "22": cell.EntireRow.Delete ""
End Select3ieme remarque, au lieu d'effacer plusieurs fois une ligne, fait-le en un fois
Sub Plus_De_Vitesse()
Dim UN
With Sheets("correction")
dl = .Cells(Rows.Count, 10).End(xlUp).Row
Set UN = .Range("A1") 'une cellulle hors la colonne 10
For i = dl To 2 Step -1
If .Cells(i, 10).Value = "0" Then Set UN = Union(UN, .Cells(i, 10)) 'toutes ces cellulles
Next i
If UN.Cells.Count > 1 Then
Set UN = Intersect(UN, .Columns(10)) 'exclude la cellulle A1
UN.EntireRow.Delete 'tous les autres cellulles
End If
End With
End SubBonjour,
Merci pour le programme de suppression des lignes comportant une valeur nulle, il fonctionne super bien !
Je n'ai pas bien compris vos recommandations sur le programme des suppressions des heures de nuits mais voici un programme qui fonctionne :
Sub SuppressionNuits()
'
' SuppressionHeureNuit Macro
' Supprime les données de 22h à 4h59
Dim i As Long
With Sheets("correction")
dl = .Cells(Rows.Count, 7).End(xlUp).Row
For i = dl To 2 Step -1
If UCase(Cells(i, 7)) Like 0 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 1 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 2 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 3 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 4 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 22 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 23 Then Rows(i).EntireRow.Delete
Next i
End With
End SubMerci à toutes et à tous pour votre aide !
Ugo
le contenu de ces cellules, c'est un numéro sous forme de string (texte) ou un vrai numéro ?
avec cette construction, c'est plus facile à selectionner.
' strings
Select Case cell.Value
Case "0", "1", "2", "3", "4", "22": cell.EntireRow.Delete ""
End Select
'des valeurs integer
Select Case cell.Value
Case 0 to 4, 22 to 23: cell.EntireRow.Delete ""
End Select