XL 2013 Suppression lignes à condition

aminovsky

XLDnaute Nouveau
Bonjour à tous,
je cherche à rectifier le code ci-dessous pour me permettre de supprimer les lignes si la colonne H de la feuille "MATRIX" est vide ou égale à Zero.

VB:
Sub Suppression()
Dim oda, f, ln, nCol
oda = Array(Sheets("MATRIX"))
For Each f In oda
    If f.Name = "MATRIX" Then
        nCol = "H"
    Else
        nCol = "D"
    End If
    For ln = f.Range(nCol & Rows.Count).End(xlUp).Row - 4 To 7 Step -1

        If IsError(f.Range(nCol & ln)) Or IsEmpty(f.Range(nCol & ln)) Then
            f.Rows(ln).Delete shift:=xlUp
        End If
    Next ln
Next f
End sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Aminovsky, bonjour le forum,

Peut-être comme ça :

VB:
Sub Macro1()
Dim M As Worksheet 'déclare la variable M (onglet Matrix)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PAF As Range 'déclare la variable PAF (Plage À Effacer)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)

Set M = Worksheets("MATRIX") 'définit l'onglet M
DL = M.Range("H" & Application.Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne H de l'onglet M
TV = M.Range("H7:H" & DL - 4) 'définit le tableau des valeurs TV
Set PAF = M.Range("A1") 'initialise la plage PAF (A1 ou n'importe quelle autre cellule)
For I = 1 To UBound(TV) 'boucle sur toutes les lignes I du tableau des valeurs TV
    'attention quand I vaut 1 cela correspond à la ligne 7 (I+6)
    If TV(I, 1) = 0 Or TV(I, 1) = "" Then 'condition : si la valeur en ligne I de TV est nulle ou vide
        Set PAF = IIf(PAF.Cells.Count = 1, M.Rows(I + 6), Application.Union(PAF, M.Rows(I + 6))) 'redéfinit la plage PAF
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
PAF.Delete 'efface la plage PAF
End Sub
 

Modeste

XLDnaute Barbatruc
Bonjour aminovsky,
Salut cher Robert :)

J'ai peut-être simplifié à l'extrême (mais sans fichier, on ne peut pas savoir :rolleyes:)
Il me semble que je ne testerais pas la dernière cellule non-vide en colonne H, précisément!? Je ne sais pas non plus pourquoi 'Row -4' ??
VB:
Sub Suppression()
Dim ln
With Sheets("MATRIX")
  For ln = .Range("H" & Rows.Count).End(xlUp).Row To 7 Step -1
  If .Range("H" & ln) = 0 Or IsEmpty(.Range("H" & ln)) Then .Rows(ln).Delete
  Next ln
End With
End Sub
 

aminovsky

XLDnaute Nouveau
Bonjour Robert, Modeste, le Forum
vous trouverez ci-joint le code dans la feuille RECAP, le code se trouve en bas comme ceci:

VB:
'Supprimer ligne si colonnes H ou D vides
Dim oda, f, ln, nCol
oda = Array(Sheets("ODA MENS"), Sheets("ODA HOR"), _
            Sheets("CAP Congés (MENS)"), Sheets("CAP Congés (HOR)"))
For Each f In oda
    If f.Name = "ODA MENS" Or f.Name = "ODA HOR" Then
        nCol = "H"
    Else
        nCol = "D"
    End If
    For ln = f.Range(nCol & Rows.Count).End(xlUp).Row - 4 To 7 Step -1

        If IsError(f.Range(nCol & ln)) Or IsEmpty(f.Range(nCol & ln)) Then
            f.Rows(ln).Delete shift:=xlUp
        End If
    Next ln
Next f

au fait je voudrais supprimer les lignes si la colonne H de la feuille04 est vide ou égale à Zero. (la même chose pour la feuille05)
Puis supprimer les lignes si la colonne D de la feuille06 est vide ou égale à Zero. (la même chose pour la feuille07)

Merci
 

Modeste

XLDnaute Barbatruc
Re,

Ce qui est surprenant, c'est qu'avec tout le code présent dans ton fichier, tu aies besoin d'aide pour quelque chose d'aussi basique :confused:
Il n'y a qu'un fifrelin à modifier dans ton code, pour qu'il fonctionne et la solution figure tant dans le code de Robert que dans le mien: remplace ton If IsError(f.Range(nCol & ln)) Or ... par If f.Range(nCol & ln) = 0 Or ...

Le code devant figurer dans un module standard.
 

Discussions similaires

Réponses
3
Affichages
590
  • Question
Microsoft 365 TEXTBOX
Réponses
7
Affichages
377