Une machine d'essai teste les pièces à deux vitesses différentes: 50 et 200 tr / min. La machine sort les données de chaque pièce à chaque vitesse de telle sorte que
Rangée 1 = partie 1 à 50 tr / min
Rangée 2 = partie 1 à 200 tr / min
Rangée 3 = partie 2 à 50 tr / min
Rangée 4 = partie 2 à 200 tr / min
et ainsi de suite pour environ 23 000 pièces.
Si un numéro de pièce échoue pour une vitesse spécifique, leles données montreraient "n.i.O." dans la colonne H de cette ligne, mais il ne l'afficherait que pour cette vitesse. J'essaie d'écrire une macro qui vérifiera si une ligne contient la valeur "n.i.O.", puis je supprime cette ligne et la ligne de l'autre vitesse. Voici le code que j'ai jusqu'à présent:
Sub DeleteFailures()
Dim r As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For r = 1 To lastrow
If Cells(r, "H").Value = "n.i.O." Then
If Cells(r, "E").Value = "50" Then
Rows(r + 1).EntireRow.Delete
Rows(r).EntireRow.Delete
ElseIf Cells(r, "E").Value = "200" Then
Rows(r - 1).EntireRow.Delete
Rows(r).EntireRow.Delete
End If
Else
End If
Next
End Sub
Cela ne semble pas vouloir fonctionner pour moi. Je pense que le problème pourrait être qu'il saute une ligne à chaque suppression, mais je ne suis pas sûr. Existe-t-il une autre approche qui pourrait mieux fonctionner?
Réponses:
0 pour la réponse № 1C'est exactement la raison pour laquelle vous pensez. Pour le faire fonctionner, vous devez boucler en commençant par le bas:
For r = lastrow To 1 Step -1
La totalité For
Je pense que le bloc de boucle devrait ressembler à ceci (changé ElseIf
partie):
For r = lastrow To 1 Step -1
If Cells(r, "H").Value = "n.i.O." Then
If Cells(r, "E").Value = "50" Then
Rows(r + 1).EntireRow.Delete
Rows(r).EntireRow.Delete
ElseIf Cells(r, "E").Value = "200" Then
Rows(r).EntireRow.Delete
Rows(r - 1).EntireRow.Delete
r = r - 1
End If
Else
End If
Next