[VBA] Supprimer une ligne sur deux d'un fichier volumineux

Bonjour à tous !

Je reviens vers vous pour vous demander votre aide sur un sujet que je n'arrive pas à traiter intégralement, encore une fois. Mon niveau en VBA étant encore bien faible.

Le but serait de supprimer une ligne sur deux, en partant de la ligne 2 de mon fichier.

Sur un petit fichier, j'arrive à réaliser ce traitement, la formule étant assez basique.

Seulement mon fichier fait près de 100000 lignes, et lorsque je lance ma macro, j'ai un message d'erreur me disant qu'il y a "dépassement de capacité".

Comment remédier à mon problème ?

Merci d'avance.

Bonjour,

Seulement mon fichier fait près de 100000 lignes, et lorsque je lance ma macro, j'ai un message d'erreur me disant qu'il y a "dépassement de capacité".

Comment remédier à mon problème ?

peut être une mauvaise déclaration d'un type de variable.... une variable de type "integer" qu'il serait souhaitable de déclarer en "Long".... Sans voir le code concerné, difficile d'en dire plus...

bon après miidi

@+

C'était exactement ça, j'avais déclaré une variable Integer et ça plantait tout.

Merci beaucoup, Bonne fin d'après-midi aussi

PS : Voici le code en question

Option Explicit

Sub SupprimerLignes2()

Dim x As Long

For x = 105858 To 1 Step -3
Rows(x).Delete
Next

EDIT : Je voulais supprimer une ligne sur trois plutôt, mais ça n'a que peu d'importance.

Bonjour,

Pour aller plus loin, serait-il possible de déplacer ces lignes (donc une ligne sur trois) vers au autre fichier plutôt que de les supprimer ?

J'ai vu qu'il y a la possibilité de couper-coller des données d'une feuille à une autre, mais d'un classeur un un autre, est-ce possible ?

Merci d'avance

Re,

essaye peut être ceci, nom classeur et nom feuille à adapter

Option Explicit
Sub test()
Dim x As Long
For x = 105858 To 1 Step -3
Rows(x).Cut Destination:=Workbooks("NomClseeur.xls").Sheets("NomFeuille").Range("A65536").End(xlUp)(2)
Next
End Sub

Bonjour Pierrot

Alors j'ai essayé ton code, dans l'absolu ça fait ce qui est demandé, c'est à dire que ça coupe bien et ça colle bien les lignes dans le deuxième fichier, mais il y a quelques petits problèmes.

Tout d'abord, les lignes coupées dans le fichier Test1.xlsm sont remplacées par des lignes vides. Hors j'aimerais que les "trous" soient comblés, c'est-à-dire que le fichier soit homogène. Et ensuite dans le fichier Test2.xlsx, les lignes sont bien collées, mais dans l'ordre inverse, la première ligne coupée se retrouve en dernier dans le fichier et inversement.

Tu crois que ces problèmes peuvent être résolus ?

Je te joins les deux fichiers pour que tu puisses mieux comprendre.

En tout cas je te remercie vraiment, tu gères

74test1.xlsm (14.66 Ko)
76test2.xlsx (6.17 Ko)

Re,

essaye ceci, j'ai pas ouvert tes fichiers, les noms de classeur et feuille sont troujours à adapter :

Option Explicit
Sub test()
Dim x As Long
For x = 105858 To 1 Step -3
With Rows(x)
    .Cut Destination:=Workbooks("NomClseeur.xls").Sheets("NomFeuille").Range("A" & x)
    .Delete
End With
Next x
With Workbooks("NomClseeur.xls").Sheets("NomFeuille")
    .Range("A1", .Range("A65536").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub

Re-salut !

Merci bien pour ta réponse, ça fonctionne sur un petit fichier.

Cependant, dès lors que j'utilise mon "vrai fichier" de plus de 100000 lignes, le débugger me met "Erreur d'exécution '9' : L'indice n'appartient pas à la sélection", je ne comprends pas pourquoi.

Merci encore

Re,

vu le message d'erreur, tu es sur d'avoir modifié le noms du classeur et de la feuille de destination... la feuille active doit être celle ou les données sont à couper....


Re,

modifie tout de même ainsi :

Option Explicit
Sub test()
Dim x As Long
For x = 105858 To 1 Step -3
With Rows(x)
    .Cut Destination:=Workbooks("NomClseeur.xls").Sheets("NomFeuille").Range("A" & x)
    .Delete
End With
Next x
With Workbooks("NomClseeur.xls").Sheets("NomFeuille")
    .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub

J'avais fait une erreur sur le nom du format en effet :s

J'ai testé sur mon gros fichier et ça a marché nikel, il y a juste des lignes vides dans le fichier de destination mais je vais me démerder pour les enlever avec une petite macro.

Un grand merci en tout cas, pour ton talent et ta patience surtout ^^

A une prochaine

Re,

tu avais vu mon dernier post avec cette modif :

With Workbooks("NomClseeur.xls").Sheets("NomFeuille")
    .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With

Re-Salut !

Non, je viens de le voir en effet.

Cela permettrait de bien supprimer les lignes vides selon toi ?

Je dois appliquer cette macro sur plusieurs fichiers, je vais donc tester la nouvelle.

Ton ancienne marchait très bien aussi, j'ai juste dû créer une petite macro supplémentaire sur le fichier de destination pour supprimer les lignes vides en aval.

Merci encore !

Re,

la macro complète modifiée :

Option Explicit
Sub test()
Dim x As Long
Application.ScreenUpdating = False
For x = 105858 To 1 Step -3
    With Rows(x)
        .Cut Destination:=Workbooks("NomClseeur.xls").Sheets("NomFeuille").Range("A" & x)
        .Delete
    End With
Next x
With Workbooks("NomClseeur.xls").Sheets("NomFeuille")
    .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
End Sub
Rechercher des sujets similaires à "vba supprimer ligne deux fichier volumineux"