Une méthode pour supprimer une ligne d'une très grande plage ?

Salut le Forum!

Vous avez une méthode pour supprimer une ligne selon le contenu d'une cellule dans une très grande plage ?

Parce que là j'ai un fichier de 68 384 lignes (683 840 cellules) et il décède à chaque tentative :p

Par exemple si la ligne x ne contient pas en Cell(x,8) un des numéros de Polices renseignées par l'utilisateur, alors on supprime la ligne !

Merci d'avance pour vos retours !

Bonjour,

A quoi ressemble ton fichier ?

J'ai fait un test; chez moi, sélectionner et supprimer une ligne d'un ensemble de 68500 lignes est immédiat.

Sub aargh()
'charger feuille avec valeurs aléatoires 685000 cellules, pour le test
    Dim a(1 To 10)
    For i = 1 To 68500
        For j = 1 To 10
            a(j) = Application.RandBetween(1, 100000)
        Next j
        Cells(i, 1).Resize(, 10) = a
    Next i

End Sub
Sub aargh1() 'le test
'supprimer toutes les lignes contenant, en colonne 8, un numéro de police donné
npol = Val(InputBox("numéro de police à supprimer"))
For i = 68500 To 1 Step -1
    If Cells(i, 8) = npol Then
    Rows(i).Delete shift:=xlUp
    ctr = ctr + 1
    End If
    Next i
    MsgBox "lignes supprimées " & ctr
End Sub

Bonjour,

@ Juice,

Joins un petit classeur que l'on voit comment traiter ta question au plus simple.

Cdlt.

Salut h2so4,

Salut Jean-Eric,

Désolé pour la lenteur de mon retour (J'étais partie manger :p) !

@h2so4,

Je vais essayé ton code Merci !

Bonjour,

@ Juice,

Joins un petit classeur que l'on voit comment traiter ta question au plus simple.

Cdlt.

Bonjour,

A quoi ressemble ton fichier ?

Ci-joint mon fichier vierge de toute donnée personnelle!

Au niveau de la procédure, le fichier en est à la macro DeleteMetier dans le module A1_Initialisation la où vous verrez un Exit Sub

Sub DeleteMetier() 'Ici nous supprimons les logiciels (application) qui n'ont pas été validée par l'utilisateur
Dim x As Long
Columns("C:D").Delete Shift:=xlToLeft
Columns("D:D").Delete Shift:=xlToLeft
Columns("E:P").Delete Shift:=xlToLeft
Columns("F:I").Delete Shift:=xlToLeft
Columns("H:H").Delete Shift:=xlToLeft
Columns("L:Y").Delete Shift:=xlToLeft
Columns("M:S").Delete Shift:=xlToLeft
Range("C3").Select
Selection.AutoFilter
Exit Sub

Le but étant donc de supprimer dans la colonne H les polices différentes de "CCC" et de "DDD"

Une fois que les Polices ont été supprimées, alors on lance le rapprochement des ristournes et des factures (mais c'est déjà codifié) !

Merci à vous deux pour le temps que vous prenez ;D

bonjour à tous

selon le principe de bonne gestion de données, on n'efface JAMAIS de données

pour un rapprochement, il suffit de RECHERCHEV

(sauf lettrage de factures quand les clients règlent sans préciser les n° de factures et qu'il faut faire des choix à vue. Si c'est ton cas, courage)

amitiés

Salut jmd!

Disons que le rapprochement doit ce faire selon le/la même :

  • Code applicatif ou n° Police
  • Date de début d'effet
  • Date de fin d'effet
  • Date de création
  • Montant (Positif // Négatif) ou prise en compte d'un écart (max 1€)

Et le tout sur un fichier de 60 000 ~ 70 000 lignes

Donc le passage par VBA me semblait nécessaire :p

Et puis les lignes ne sont pas définitivement supprimées puisque le traitement ce fais via un copier/coller du fichier source!

Merci pour tes conseils

Re,

Essaie ainsi :

Public Sub DeleteRows()
Dim ws As Worksheet, rng As Range
    Application.ScreenUpdating = False
    Set ws = ActiveWorkbook.Worksheets("Traitement")
    If ws.FilterMode Then ws.ShowAllData
    ws.Cells(3, 3).CurrentRegion.AutoFilter _
            field:=6, _
            Criteria1:="=CCC", _
            Operator:=xlOr, _
            Criteria2:="=DDD"
    With ws.AutoFilter.Range
        On Error Resume Next
        Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
                  .SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With
    If Not rng Is Nothing Then rng.EntireRow.Delete
    ws.Cells(3, 3).CurrentRegion.AutoFilter field:=6
End Sub

@h2so4,

Merci pour ton code mais je rencontre la même erreur qu'avec mes essais : le fichier devient blanc et plus aucun Excel ne répond :p

@Jean-Eric,

Bwaaaaah! C'est super rapide XD

Mais par contre, je veux conserver les Polices "CCC" et "DDD" :0

Est-ce que je dois indiquer dans le code toutes les polices différentes de celle qui m’intéresse où est-ce qu'il y a moyen, avec ton code, de faire l'inverse ?

Merciii

Re,

Argh !...

En regardant ton Userform, je suis tombé sur le contrôle OptionButton (suppression des polices SNCF (CCC ; DDD).

Cdlt.

La modification :

Public Sub DeleteRows2()
Dim ws As Worksheet, rng As Range
    Application.ScreenUpdating = False
    Set ws = ActiveWorkbook.Worksheets("Traitement")
    If ws.FilterMode Then ws.ShowAllData
    ws.Cells(3, 3).CurrentRegion.AutoFilter _
            Field:=6, _
            Criteria1:="<>CCC", _
            Operator:=xlAnd, _
            Criteria2:="<>DDD"
    With ws.AutoFilter.Range
        On Error Resume Next
        Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
                  .SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With
    If Not rng Is Nothing Then rng.EntireRow.Delete
    ws.Cells(3, 3).CurrentRegion.AutoFilter Field:=6
End Sub

@Jean-Eric,

Re,

Argh !...

En regardant ton Userform, je suis tombé sur le contrôle OptionButton (suppression des polices SNCF (CCC ; DDD).

Cdlt.

En faite soit on conserve uniquement les polices SNCF, soit on les suppriment pour tout autre traitement ;D

Mais en tout cas c'est génial ton code! Sa rend la suppression des lignes ultra-fluide!

Je vais l'adapter à tout mes numéros de polices et code applicatif (tout ce qui est possible à l'utilisateur de supprimer quoi xD)

Merci pour ton aide

P'tite dernière question : Je viens de regarder la méthode Criteria et c'est pas possible de mettre 3 critères de filtre :0 ?

Operator:=xlAnd, _
Criteria3:="<>EEE"

Salut jmd!

Disons que le rapprochement doit ce faire selon le/la même :

  • Code applicatif ou n° Police
  • Date de début d'effet
  • Date de fin d'effet
  • Date de création
  • Montant (Positif // Négatif) ou prise en compte d'un écart (max 1€)

Et le tout sur un fichier de 60 000 ~ 70 000 lignes

Donc le passage par VBA me semblait nécessaire :p

Et puis les lignes ne sont pas définitivement supprimées puisque le traitement ce fais via un copier/coller du fichier source!

Merci pour tes conseils

re

les "ou" me font un peu peur

quoique, avec les paramètres que tu cites, ça doit rester jouable avec des RECHERCHEV qui vont matcher les lignes des 2 sources de données

concernant tes 70 000 lignes, aucun problème

note que c'est un travail que je ferais de préférence dans Power BI Desktop (gratuit)

amitiés

Re,

@ Juice,

Tu vas continuer longtemps à ajouter des critères ?

Précise une fois pour toutes les différentes situations.

On devra certainement procéder autrement.

Cdlt.

xDDD

Re,

@ Juice,

Tu vas continuer longtemps à ajouter des critères ?

Précise une fois pour toutes les différentes situations.

On devra certainement procéder autrement.

Cdlt.

Nan bah t'embête pas ^^ J'vais faire du bricolage avec ce que tu m'a filé ;D Encore merci, et désolé xD

re

les "ou" me font un peu peur

quoique, avec les paramètres que tu cites, ça doit rester jouable avec des RECHERCHEV qui vont matcher les lignes des 2 sources de données

concernant tes 70 000 lignes, aucun problème

note que c'est un travail que je ferais de préférence dans Power BI Desktop (gratuit)

amitiés

Bah les "ou" sont dû aux choix du rapprochement :p

Si il y avait pas eu les polices SNCF, seulement le code applicatif aurait servie de critère, et la responsable m'a demandé s'il était possible d'avoir des rapprochements avec un écart d'1€ maximum x)

Bref! Concernant le Power BI Desktop (gratuit), j'ai contacté le service technique de ma boîte et il semble vouloir intégrer cela aux téléchargement possible (sans avoir les droits d'admin quoi) sur les PC, mais c'est pas encore là x)

Merci à toi

Rechercher des sujets similaires à "methode supprimer ligne tres grande plage"