VBA:lignes supprimées si elles vérifient la condition

Bonjour,

Est ce qu'il est possible de supprimer une ligne si elle vérifie la condition suivante:

if(year(wsECF.Cells(i + 1, 11).Value)> k sachant que wsECF est le nom du fichier et k l'année en cours

Si oui pourriez vous m'aidez sur le code à mettre en place?

Sachant que le tableau contient 32 colonnes, et les données sont changeantes d'un mois à un autre?

Cordialement

Bonsoir,

Voici un exemple de code pour supprimer une ligne :

wsECF.Rows(i + 1 & ":" & i + 1).EntireRow.Delete

Si cela ne convient, un extrait du fichier serait souhaitable.

Merci

Bonsoir,

Je ne vois pas ce que vient faire le nom du fichier wsECF.

Ce qu'il faut savoir :

  • A quoi correspond i et K
  • Ce que tu veux faire ? Supprimer une ligne lorsqu'en colonne K tu as une valeur supérieur à ... ?

Sinonavec i et K connus, j'aurais plutôt fais ceci :

With ActiveSheet
If .Cells(i + 1, 11) > K Then
.Rows(i + 1 & ":" & i + 1).EntireRow.Delete
End If
End With

Si cela ne convient pas, donne plus d'explications ou mets un petit fichier comme le dit Readi.

Amicalement

Dan

En fait j(le mois en cours) et k(lannée en cours) se trouvent dans un autre fichier, c'est pourquoi j'ai besoin du nom de fichier .Voici la condition entière.

En appliquant ce code, j'ai remarqué que trés peu de suppression.

For i = 1 To nbre

    If (Year(wsECF.Cells(i + 1, 11).Value) > k Or ((Month(wsECF.Cells(i + 1, 11).Value) > j And Year(wsECF.Cells(i + 1, 11).Value = k)))) Then
    wsECF.Rows(i + 1 & ":" & i + 1).EntireRow.Delete
    End If
Next i
2zps-forecast.xlsm (50.29 Ko)

Voici en fichier joint le tableau, sachant que ce n'est qu'un extrait et que pour le mois de mars par exemple j'ai 8000 lignes.

Il n'y a donc pas de solution?

Bonsoir,

tu as joint un fichier, c'est bien...

cependant, tu ne mets pas "Tout" le code que tu essayes d'optimiser.....

Et de plus, les dates, en colonne "K", ne sont pas vraiment des dates (ou telles, comme considérées par Excel)

Donc, si tu pouvais joindre "TOUT" le code, avec le nom du fichier parent, on pourrait peut-être t'aider un peu plus...

A te relire

Bonjour

En fait, il est un peu long mon code, et il fait référence à plusieurs fichiers. Merci en tout cas.

Sub En_cours_du_mois()

Dim balise As Boolean
Dim nbre As Integer, nbre2 As Integer, i As Integer, j As Integer, k As Integer, reponse As Integer
Dim wsEM As Worksheet, wsSF As Worksheet, wsLf As Worksheet, wsECF As Worksheet
Dim liste As Range
Dim valeur As Variant

Set wsEM = Workbooks("Enregistrement du mois").Worksheets("feuil2")
Set wsSF = Workbooks("Liste fournisseurs_test mdb").Worksheets("Fournisseur")
Set wsLf = ThisWorkbook.Worksheets("Liste fournisseur")
Set wsECF = ThisWorkbook.Worksheets("en cours ouvert fin de mois")

Application.WindowState = xlMinimized
    wsLf.Cells.ClearContents
    wsSF.Activate
    Cells.Select
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    wsLf.Activate
    Range("B1").Select
    ActiveSheet.Paste

'Calcul du nombre de fournisseurs
nbre = wsLf.Cells(Rows.Count, 2).End(xlUp).Row - 1
Set liste = wsLf.Cells(2, 2).Resize(nbre, 3)

'Création du nom de la plage de cellule des fournisseurs
ThisWorkbook.Names.Add Name:="liste", RefersToR1C1:=liste

'Calcul du nombre d'en_cours du mois
nbre = wsECF.Cells(Rows.Count, 1).End(xlUp).Row - 1

'''''Filtre fournisseurs'''''
'Calcul intermédiaire des valeurs de RechercheV
wsECF.Cells(2, 32).Resize(nbre, 1).FormulaR1C1 = "=VLOOKUP(RC[-11],liste,1,0)"

'Tri des cadences en fonction du résultat de la RechercheV
Selection.NumberFormat = "@"
wsECF.Activate
wsECF.Range("AF2").Select
wsECF.Cells(2, 1).Resize(nbre, 32).Sort Key1:=Range("AF2"), Order1:=xlAscending

'Calcul du nombre de fournisseurs hors contexte
nbre2 = WorksheetFunction.CountIf(wsECF.Cells(2, 32).Resize(nbre, 1), "=#N/A")

'Suppression des cadences hors contexte
wsECF.Cells(nbre - nbre2 + 2, 1).Resize(nbre, 34).Delete Shift:=xlUp

'Stockage du mois en cours
j = wsEM.Cells(1, 2).Value
k = wsEM.Cells(1, 3).Value

Suppression des encours ultérieurs au mois concerné
For i = 1 To nbre

    If (Year(wsECF.Cells(i + 1, 11).Value) > k Or ((Month(wsECF.Cells(i + 1, 11).Value) > j And Year(wsECF.Cells(i + 1, 11).Value = k)))) Then
    wsECF.Rows(i + 1 & ":" & i + 1).EntireRow.Delete
    End If
Next i

End Sub

Cordialment

Rechercher des sujets similaires à "vba lignes supprimees verifient condition"