Suppression d'une ligne si la cellule de la colonne X est vide
Bonjour à tous,
Alors voila j'ai besoin de supprimer une ligne entière si en colonne CI nous n'avons rien (vide), c'est un fichier avec + de 40000 lignes et 132 colonnes donc assez gros fichier...
J'ai essayé de mettre en place la macro suivante mais j'ai un problème de dépassement de capacité que je ne parviens pas à résoudre (Erreur 6)
Pourriez vous m'aider ?
Sub Suppr()
Dim n%, i% 'Déclaration des variables
Application.ScreenUpdating = False
With Worksheets("Formatage") 'Nom de la feuille à modifier suivant le cas
n = .Range("CI" & .Rows.Count).End(xlUp).Row 'N° de la dernière ligne remplit
For i = n To 2 Step -1 'Boucle de la dernière ligne remplit vers la ligne 2 (première ligne remplit) par PAS de -1
If Range("CI" & i) = "" Then .Range("CI" & i).EntireRow.Delete 'si la ligne de la colonne CI est = à "" , suppression de la ligne
Next i
End With
End SubJ'ai également essayé de faire la macro suivante mais cela freeze Excel, donc surement pas adaptée ... :
Sub ExclureCertainnesLignes()
Sheets("Formatage").Select
Dim i As Long, j As Long, MesVals As Variant
'Renseigner les valeur recherchée pour supprimer les lignes
MesVals = Array("")
For i = Range("CI50000").End(xlUp).Row To 1 Step -1
For j = LBound(MesVals) To UBound(MesVals)
'88 correspond à la colonne CI
If MesVals(j) = Cells(i, 88).Value Then Rows(i).Delete: Exit For
Next j
'Next i
End Sub- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
j'ai un petit un doute avec une des deux des déclarations de ces variables
n, i as Long
Dim n&, i& 'Déclaration des variablesLong (&)
Les variables de type Long peuvent avoir des valeurs comprises entre -2 147 483 648 et 2 147 483 647
Integer (%)
Les variables de type Integer peuvent avoir des valeurs comprises entre -32 768 et 32 767
Option Explicit
Sub Suppr()
On Error Resume Next
Dim n&, i& 'Déclaration des variables
Application.ScreenUpdating = False
With Worksheets("Formatage") 'Nom de la feuille à modifier suivant le cas
n = .Range("CI" & .Rows.Count).End(xlUp).Row 'N° de la dernière ligne remplit
For i = n To 2 Step -1 'Boucle de la dernière ligne remplit vers la ligne 2 (première ligne remplit) par PAS de -1
If Range("CI" & i) = "" Then .Range("CI" & i).EntireRow.Delete 'si la ligne de la colonne CI est = à "" , suppression de la ligne
Next i
End With ' corrigé 22062020 à 21h26
On Error Goto 0
Application.ScreenUpdating = True ' pas obligatoire
End Subsans aucune certitude
crdlt,
André
Bonjour,
Merci d'avoir pris le temps pour répondre,
J'ai essayé votre code, J'ai un message qui me dit : Erreur de compilation :
End With sans With
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
re
oups
End With
Next i
j'ai inversé sans faire exprès
Next i
End WithJ'ai le même problème de freeze d'Excel ...
J'ai essayé cela mais sans succès, ça mouline et rien ne semble se passer :
Sub suppr()
'Lancement de toutes les Bruts
Worksheets("Formatage").Range("CI:CI").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End SubBon j'ai adapté cette macro qui fait ce que je veux (supprime les lignes qui ont dans la colonne CI "" (en regardant la derniere celule remplie en G, néanmoins c'est affreusement long (5 minutes) et j'imagine que ça pourrais aller plus vite si c'était optimisé par un connaisseur du forum, du genre ajouter à la sélection pour supprimer à la fin au lieu de supprimer à chaque fois la ligne ?
Ou faire un filtre pour ne pas avoir les cellules vide de la colonne CI et remplacer les données de la feuille en cours par le resultat de ce filtre ? mais la ça me dépasse !
help ? =)
Sub Ma_05_ExclureCertainnesLignes()
ThisWorkbook.Worksheets("formatage").Activate
j = 1
For i = 1 To Range("G50000").End(xlUp).Row 'calcule la dernière cellule remplie dans la colonne 7 colonne G
If Cells(j, 87).Value = "" Then
Cells(j, 87).EntireRow.Delete
Else
j = j + 1
End If
Next i
MsgBox "Macro terminée"- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
Ah je comprend mieux, s'il y a des filtres, il faut chercher dans le forum comment ôter les filtres provisoirement dans un 1er temps dans 2nd temps l’exécution de ton code et dans le 3ème temps remettre les filtres
Sub AjouteFiltre()
With Sheets("MAFEUILLE") ' remplacer MAFEUILLE par la feuille adéquate
.Select
If .AutoFilterMode = True Then .AutoFilterMode = False
.Range("A2:Z2").AutoFilter
End With
End SubSub SupprimeFiltre()
With Sheets("MAFEUILLE") ' remplacer MAFEUILLE par la feuille adéquate
.Select
If .AutoFilterMode = True Then .AutoFilterMode = False
End With
End Subsuivant ton code ci-dessus à tester:
Sub Ma_05_ExclureCertainnesLignes()
' déclaration des variables
Dim i, j As Integer
On Error Resume Next
With Sheets("formatage")
.Select
If .AutoFilterMode = True Then .AutoFilterMode = False
j = 1
For i = 1 To Range("G50000").End(xlUp).Row 'calcule la dernière cellule remplie dans la colonne 7 colonne G
If Cells(j, 87).Value = "" Then
Cells(j, 87).EntireRow.Delete
Else
j = j + 1
End If
Next i
MsgBox "Macro terminée"
If .AutoFilterMode = False Then .AutoFilterMode = True
End With
On Error Goto 0
End Sub@+