Je suis novice dans Excel VBA et je pourrais vraiment vous aider. J'ai essayé de trouver une solution sur le Web, mais je n'ai pas réussi à trouver un problème similaire.excel vba Supprimer les lignes jusqu'au critère
J'essaye de créer une macro qui aidera à supprimer des rangées basées sur certains critères et continuer à supprimer des rangées jusqu'à ce qu'un certain critère soit rencontré.
Par exemple. Dans le tableau ci-dessous, je voudrais supprimer des lignes où Col A = 1 ET Col C = 0, puis continuez à supprimer les lignes ci-dessous cette ligne JUSQU'AU Col A = 1 et Col C <> 0
A | B | C
-----|-----|-----
1 | TC | 2
-----|-----|-----
2 | TC | 1
-----|-----|-----
1 | TC | 0
-----|-----|-----
2 | TC | 2
-----|-----|-----
3 | TC | 1
-----|-----|-----
1 | TC | 2
-----|-----|-----
1 | TC | 0
-----|-----|-----
1 | TC | 1
-----|-----|-----
2 | TC | 0
-----|-----|-----
3 | TC | 2
Ainsi, le résultat final de la macro serait:
A | B | C
-----|-----|-----
1 | TC | 2
-----|-----|-----
2 | TC | 1
-----|-----|-----
1 | TC | 2
-----|-----|-----
1 | TC | 1
-----|-----|-----
2 | TC | 0
-----|-----|-----
3 | TC | 2
Idéalement, je voudrais en boucle ce nouveau avec suppression de lignes où Col A = 2 et Col C = 0 et la suppression des lignes ci-dessous cette ligne jusqu'à ce que Col A = 2 et Col C <> 0.
Ci-dessous la macro avec laquelle je suis arrivé. Ouvert à toutes les suggestions et désireux d'apprendre.
Sub deleterow()
Range("C2").Select
Do Until ActiveCell.Offset(0, -2) = "1" And ActiveCell.Value <> "0"
If ActiveCell.Value = "0" And ActiveCell.Offset(0, -2) = "1" Then
Rows(ActiveCell.Row & ":" & Rows.Count).Delete
End If
Loop
End Sub
Dans l'attente d'entendre de nouveau!
Merci
Excuses d'avance car je suis très nouveau à ce sujet. J'ai essayé d'appliquer le code ci-dessus, mais cela ne semble pas fonctionner. J'examine votre code et je ne suis pas sûr de comprendre. Je pense que je comprends le concept du code, mais je ne peux pas en saisir certaines lignes. Pourquoi est-ce "si rng n'est rien alors réglé" ..? ne devrait-il pas être "si rng n'est pas rien alors régler"? Et je ne comprends pas la ligne "rng = Union (rng, new_rng)". comment est-il possible d'avoir une égale Union et une nouvelle? –
En outre, je ne suis pas sûr de savoir comment une méthode de filtrage et de suppression fonctionnerait pour ce problème particulier. Parce que la macro doit continuer à être supprimée jusqu'à ce qu'un critère soit rencontré. Cependant, je suis ouvert à toute solution tant que cela fonctionne. –
L'Union est utilisée pour créer une plage non contiguë, comme 'Plage (" B1: B5 "," C42: C65 "," Z300 ")', vous pouvez donc tout supprimer en utilisant une seule fois. Étant donné que l'action de suppression est lente, si vous supprimez une seule fois, elle peut optimiser le temps nécessaire pour effectuer ces actions. Et 'Si rng n'est rien, alors Set rng = ws.Range (" A "& i)' est utilisé pour utiliser l'Union, car s'il n'y a pas 2 plages, Union donne une erreur. Donc, pour la première gamme (quand rng est vide ou rien), vous définissez 'rng = new_rng = ws.Range (" A "& i)' – danieltakeshi