Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Suppression de lignes avec plusieurs conditions en VBA

9 réponses
Avatar
Cajeto 63
Bonjour a tous,
après avoir passé beaucoup de temps de recherche sur ce forum (qui est une
véritable mine d'or d'informations,), je me risque à exposer mon problème.

J'ai lu beaucoup d'exemple permettant de supprimer des lignes, mais je
n'arrive toujours pas à écrire de macro (mon niveau est débutant extrême)
pour supprimer les lignes d'un fichier dont les cellules de 2 colonnes sont
vides.

Ex: si H4 et I4 sont vides alors supprimer ligne , sinon next, ...etc.

Merci de votre aide.

9 réponses

Avatar
Ardus Petus
Bonjour Cajeto,

Sub DelEmpty()
Dim iRow As Long
For iRow = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(iRow, "H").Value = "" And _
Cells(iRow, "I").Value = "" Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Cordialement,
--
AP

"Cajeto 63" <Cajeto a écrit dans le message de
news:
Bonjour a tous,
après avoir passé beaucoup de temps de recherche sur ce forum (qui est une
véritable mine d'or d'informations,), je me risque à exposer mon problème.

J'ai lu beaucoup d'exemple permettant de supprimer des lignes, mais je
n'arrive toujours pas à écrire de macro (mon niveau est débutant extrême)
pour supprimer les lignes d'un fichier dont les cellules de 2 colonnes
sont
vides.

Ex: si H4 et I4 sont vides alors supprimer ligne , sinon next, ...etc.

Merci de votre aide.


Avatar
anonymousA
Bonjour,

on imagine ici que ce sont les colonnes H et I qu'il faut scruter et
que la dernière ligne de ton tableau est repérée par la dernière
cellule non vide en colonne A ( mais c'est bien evidemment adaptable)

For I = Range("A65536").End(xlUp).Row To 2 Step -1
If IsEmpty(Cells(I, 8)) And IsEmpty(Cells(I, 9)) Then Cells(I,
1).EntireRow.Delete
Next

A+
Avatar
Cajeto 63
Bonjour Ardus Petus,
Tout d'abord je te remercie pour ta réponse rapide.

Ensuite, ton script marche super bien sauf que le UsedRange de mon fichier
fait 40 mille lignes au moins (?), et du coup ça prend beaucoup (énormément
trop) de temps.

A tout hasard, est-ce que cela gagnerait du temps d'ajouter ce que
anonymousA a voulu faire dans son script (qui ne marche pas sur mon fichier,
désolé AnonymousA), c'est a dire rechercher la ligne correspondant à la
dernière cellule non vide de la colonne A et de faire remonter le test
jusqu'a la ligne 3 disons?

Et comme de bien entendu si c'est possible la question suivante est comment
fait-on? ;-)



"Ardus Petus" wrote:

Bonjour Cajeto,

Sub DelEmpty()
Dim iRow As Long
For iRow = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(iRow, "H").Value = "" And _
Cells(iRow, "I").Value = "" Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Cordialement,
--
AP

"Cajeto 63" <Cajeto a écrit dans le message de
news:
Bonjour a tous,
après avoir passé beaucoup de temps de recherche sur ce forum (qui est une
véritable mine d'or d'informations,), je me risque à exposer mon problème.

J'ai lu beaucoup d'exemple permettant de supprimer des lignes, mais je
n'arrive toujours pas à écrire de macro (mon niveau est débutant extrême)
pour supprimer les lignes d'un fichier dont les cellules de 2 colonnes
sont
vides.

Ex: si H4 et I4 sont vides alors supprimer ligne , sinon next, ...etc.

Merci de votre aide.







Avatar
Cajeto 63
Bonjour AnonymousA,

malheureusement ton script ne fonctionne pas sur mon fichier.

Par contre ta contribution pourra probablement me permettre d'améliorer la
solution proposée par Ardus Petus.


Merci de ton aide.
Cordialement.



"anonymousA" wrote:

Bonjour,

on imagine ici que ce sont les colonnes H et I qu'il faut scruter et
que la dernière ligne de ton tableau est repérée par la dernière
cellule non vide en colonne A ( mais c'est bien evidemment adaptable)

For I = Range("A65536").End(xlUp).Row To 2 Step -1
If IsEmpty(Cells(I, 8)) And IsEmpty(Cells(I, 9)) Then Cells(I,
1).EntireRow.Delete
Next

A+




Avatar
anonymousA
Certainement un micro climat.

Cordialement,
Avatar
Ardus Petus
Sub DelEmpty()
Dim iRow As Long
For iRow = Cells(rows.count,"A").end(xlup).row To 3 Step -1
If Cells(iRow, "H").Value = "" And _
Cells(iRow, "I").Value = "" Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Et voilà le travail!

"Cajeto 63" a écrit dans le message de
news:
Bonjour Ardus Petus,
Tout d'abord je te remercie pour ta réponse rapide.

Ensuite, ton script marche super bien sauf que le UsedRange de mon fichier
fait 40 mille lignes au moins (?), et du coup ça prend beaucoup
(énormément
trop) de temps.

A tout hasard, est-ce que cela gagnerait du temps d'ajouter ce que
anonymousA a voulu faire dans son script (qui ne marche pas sur mon
fichier,
désolé AnonymousA), c'est a dire rechercher la ligne correspondant à la
dernière cellule non vide de la colonne A et de faire remonter le test
jusqu'a la ligne 3 disons?

Et comme de bien entendu si c'est possible la question suivante est
comment
fait-on? ;-)



"Ardus Petus" wrote:

Bonjour Cajeto,

Sub DelEmpty()
Dim iRow As Long
For iRow = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(iRow, "H").Value = "" And _
Cells(iRow, "I").Value = "" Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Cordialement,
--
AP

"Cajeto 63" <Cajeto a écrit dans le message
de
news:
Bonjour a tous,
après avoir passé beaucoup de temps de recherche sur ce forum (qui est
une
véritable mine d'or d'informations,), je me risque à exposer mon
problème.

J'ai lu beaucoup d'exemple permettant de supprimer des lignes, mais je
n'arrive toujours pas à écrire de macro (mon niveau est débutant
extrême)
pour supprimer les lignes d'un fichier dont les cellules de 2 colonnes
sont
vides.

Ex: si H4 et I4 sont vides alors supprimer ligne , sinon next, ...etc.

Merci de votre aide.









Avatar
Cajeto 63
ça fonctionne a merveilles, merci de ton aide Ardus Petus.

C'est incroyable comme le VBA simplifie la vie...quand on le connait!

Bonne continuation.


"Ardus Petus" wrote:

Sub DelEmpty()
Dim iRow As Long
For iRow = Cells(rows.count,"A").end(xlup).row To 3 Step -1
If Cells(iRow, "H").Value = "" And _
Cells(iRow, "I").Value = "" Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Et voilà le travail!

"Cajeto 63" a écrit dans le message de
news:
Bonjour Ardus Petus,
Tout d'abord je te remercie pour ta réponse rapide.

Ensuite, ton script marche super bien sauf que le UsedRange de mon fichier
fait 40 mille lignes au moins (?), et du coup ça prend beaucoup
(énormément
trop) de temps.

A tout hasard, est-ce que cela gagnerait du temps d'ajouter ce que
anonymousA a voulu faire dans son script (qui ne marche pas sur mon
fichier,
désolé AnonymousA), c'est a dire rechercher la ligne correspondant à la
dernière cellule non vide de la colonne A et de faire remonter le test
jusqu'a la ligne 3 disons?

Et comme de bien entendu si c'est possible la question suivante est
comment
fait-on? ;-)



"Ardus Petus" wrote:

Bonjour Cajeto,

Sub DelEmpty()
Dim iRow As Long
For iRow = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(iRow, "H").Value = "" And _
Cells(iRow, "I").Value = "" Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Cordialement,
--
AP

"Cajeto 63" <Cajeto a écrit dans le message
de
news:
Bonjour a tous,
après avoir passé beaucoup de temps de recherche sur ce forum (qui est
une
véritable mine d'or d'informations,), je me risque à exposer mon
problème.

J'ai lu beaucoup d'exemple permettant de supprimer des lignes, mais je
n'arrive toujours pas à écrire de macro (mon niveau est débutant
extrême)
pour supprimer les lignes d'un fichier dont les cellules de 2 colonnes
sont
vides.

Ex: si H4 et I4 sont vides alors supprimer ligne , sinon next, ...etc.

Merci de votre aide.














Avatar
Cajeto 63
Je ne vois que cette explication ;-)

Plus serieusement, est-ce que cela peut venir du format de cellule ou de
l'emplacement de la macro (feuille ou module)?

Et aussi, si tu as un peu de temps, quels sont les différences de
fonctionnement entre ton script et celui de Ardus Petus?

Parce qu'un des problèmes que je rencontre assez souvent avec VBA, c'est la
variété des solutions pour un même résultat et c'est vraiment très troublant
quand on débute, alors si je pouvais avoir un petit bout d'explications je
serais ravi.

Merci.

Cordialement.



"anonymousA" wrote:

Certainement un micro climat.

Cordialement,




Avatar
anonymousA
Fondamentalement, il n'y a pas de différence entre le script de Ardus
Petrus et le mien.La seule différence pouvant se situer sur la nature du
test ( isempty pour moi et ="" pour lui ) mais je n'y crois guère.
Autrement, en informatique, il y a quasiment toujours de multiples
solutions car les approches peuvent être différentes et les objets
sufisamment nombreux et dotés de propriétés variées.
Il y a parfois des solutions plus élégantes que d'autres ou plus rapides
que d'autres. En l'occurrence, pour ce qui te concerne , on aurait aussi
pu utiliser un filtre sur les cellules vides ( sous réserve bien sur
qu'elles soient effetivement vides) communes aux deux colonnes puis les
supprimer puis ensuite réafficher seulement les lignes restantes.C'est
sans doute d'ailleurs la solution la plus rapide quand on a un très
grand nombre de lignes.

A+

Je ne vois que cette explication ;-)

Plus serieusement, est-ce que cela peut venir du format de cellule ou de
l'emplacement de la macro (feuille ou module)?

Et aussi, si tu as un peu de temps, quels sont les différences de
fonctionnement entre ton script et celui de Ardus Petus?

Parce qu'un des problèmes que je rencontre assez souvent avec VBA, c'est la
variété des solutions pour un même résultat et c'est vraiment très troublant
quand on débute, alors si je pouvais avoir un petit bout d'explications je
serais ravi.

Merci.

Cordialement.



"anonymousA" wrote:

Certainement un micro climat.

Cordialement,