supprimer des lignes si deux conditions

topo

XLDnaute Junior
bonjour à tous,

je voudrais supprimer toutes les lignes d'un classeur excel (beaucoup d'onglets) qui respectent deux conditions :
- la colonne G est vide
- ET la colonne H est vide

Il faut que absolument que les deux conditions soient réunis pour supprimer la ligne

Merci
 

wilfried_42

XLDnaute Barbatruc
Re : supprimer des lignes si deux conditions

Bonjour

une macro :

Code:
sub efface()
    dim cel as range, i as long
    Range("G1:G" & Range("G65536").End(xlUp).Row).Cells.SpecialCells(xlCellTypeBlanks).Select
    if selection.cells.count<2 then msgbox "Pas de suppression" : exit sub
    For i = Selection.Cells.Count To 1 Step -1
        Set cel = Selection(i)
        If cel.Offset(0, 1) = "" Then cel.EntireRow.Delete
    Next i
end sub

faire une sauvegarde avant de faire l'essai, je n'ai pas testé
 

mromain

XLDnaute Barbatruc
Re : supprimer des lignes si deux conditions

Bonjour Topo, wilfried_42

Je te propose ce code, mais, je me sert de la colonne "A" pour trouver la dernière ligne (je considère que la colonne "A" de chacune de tes entrées est saisie)


Code:
Public Sub supp()

Dim curSheet As Excel.Worksheet
Dim derLigne As Integer
Dim i As Integer

For Each curSheet In ThisWorkbook.Worksheets
'la colonne "A" sert à trouver la dernière ligne.
'il faut donc qu'elle soit toujours complétée
    derLigne = curSheet.Range("A" & curSheet.Rows.Count).End(xlUp).Row
    For i = derLigne To 1 Step -1
        If (curSheet.Range("G" & i).Value = "") And (curSheet.Range("H" & i).Value = "") Then
            curSheet.Rows(i).Delete
        End If
    Next
Next curSheet

End Sub

A+
 

topo

XLDnaute Junior
Re : supprimer des lignes si deux conditions

merci wilfried, mais là, ça me supprime tout sauf la colonne G non vide

En fait, je veux garder toutes les lignes qui n'ont ni G et H de vide (si l'une des deux est remplie, on garde toute la ligne.

merci
 

wilfried_42

XLDnaute Barbatruc
Re : supprimer des lignes si deux conditions

re:

autre macro, testée celle-ci

Code:
Sub efface()
    Dim cel As Range, i As Long, adr As String
    Range("G1:G" & Range("G65536").End(xlUp).Row).Cells.SpecialCells(xlCellTypeBlanks).Select
    If Selection.Cells.Count < 2 Then MsgBox "Pas de suppression": Exit Sub
    adr = ""
    For Each cel In Selection
        If cel.Offset(0, 1) = "" Then
            If adr = "" Then
                adr = cel.Address
            Else
                adr = adr & "," & cel.Address
            End If
        End If
    Next
    if adr>"" then Range(adr).EntireRow.Delete
End Sub
 

wilfried_42

XLDnaute Barbatruc
Re : supprimer des lignes si deux conditions

re:

autre macro elle aussi testée, beaucoup plus rapide (pas de boucles)

Code:
Sub efface()
    Dim cel As Range, i As Long, adr As String
    Range("G1:G" & Range("G65536").End(xlUp).Row).Cells.SpecialCells(xlCellTypeBlanks).Select
    If Selection.Cells.Count < 2 Then MsgBox "Pas de suppression": Exit Sub
    Selection.Offset(0, 1).Cells.SpecialCells(xlCellTypeBlanks).Select
    If Selection.Cells.Count > 0 Then Selection.EntireRow.Delete
End Sub
 

topo

XLDnaute Junior
Re : supprimer des lignes si deux conditions

Merci, ça marche, mais j'ai un autre souci, cela décale toutes mes formules (évidemment j'aurais du y penser) :mad:

bon, les macros sont bonnes, c'est le principale, maintenant je vais me creuser la tête sur autre chose :p

Merci
 

Discussions similaires

Réponses
22
Affichages
764

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87