suppression ligne "vide"

ufernet

XLDnaute Junior
Bonjour;

Avec un tableau obtenu par coller en valeur d'une sélection contenant des cellules obtenues par une fonction si du type : si(A2=1; A2;""); les lignes de cellules "" ne sont pas vides! Dans l'exemple joint le tableau A1:U22 a été obtenu par la formule décrite avant. Je voudrai pouvoir selectionner les lignes 12.14.16 et 19 20 21 22 puis les supprimer en integrant cela dans la macro qui a permi d'obtenir ce tableau. Ces lignes sont vides mais pas tout à fait puisque elles sont selectionnées par crtl *, participent au tri et arrivent en tête en cas de tri de AZ sur A1. Le tableau réel fait 1000 lignes environ.
Merci de m'aider car ces cellules vides pleines me perturbent...
 

Pièces jointes

  • Essai suppression ligne.xlsx
    10.3 KB · Affichages: 43

Staple1600

XLDnaute Barbatruc
Re : suppression ligne "vide"

Bonjour à tous

Un exemple avec un filtre élaboré (ici on masque seulement les vides)
Code:
Sub Macro1()
' Macro2 Macro
' Macro enregistrée le 11/11/2012
[V2].FormulaR1C1 = "=COUNTBLANK(RC[-21]:RC[-1])<21"
Range("A1:U18").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("V1:V2"), Unique:=False
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : suppression ligne "vide"

Re

Et ici, on les supprime
Code:
Sub Macro2()
' Macro2 Macro
' Macro enregistrée le 11/11/2012
Dim pf As Range
[V2].FormulaR1C1 = "=COUNTBLANK(RC[-21]:RC[-1])=21"
Range("A1:U18").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("V1:V2"), Unique:=False
Set pf = [_FilterDataBase]
pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12).Delete Shift:=xlUp
[V2] = Empty
ActiveSheet.ShowAllData
End Sub

NB: Pour conserver les macros, enregistrer le classeur en *.xls ou *.xlsm
 

ufernet

XLDnaute Junior
Re : suppression ligne "vide"

Merci,
La macro fonctionne super bien. Merci

Mais j'ai un autre problème car la macro que phlaurent55 m'avait donner pour supprimer les cellules vides à l'intérieur du tableau fonctionne très très lentement (+de 15 mn pour 500 lignes 21 colonnes).

Dim cellule As Range
For i = 5 To 21
For Each cellule In Range("F2:U" & Range("A65535").End(xlUp).Row)
If cellule = "" Then
cellule = Cells(cellule.Row, cellule.Column + 1)
Cells(cellule.Row, cellule.Column + 1) = ""
End If
Next cellule
Next i
Application.ScreenUpdating = True
[A1].Select
MsgBox ("Opération terminée")
End Sub
 

ufernet

XLDnaute Junior
Re : suppression ligne "vide"

Macro 2 marche très bien et elle a supprimé toutes les lignes vides du tableau. Je pensais que de supprimer les lignes vides permettrait d'accélerer la suppression des cellules vides à l'interieur du tableau. Mais cela n'a pas accélerer la macro dont j'ai mis le code dans le message précédent. Je mets le fichier en pièce jointe. Il y a trois macro: CopierTableau qui copie les données dans la feuille Tableau Aprés. La macro Supprimer Ligne que tu as faite et la macro ElimineCelluleVide qui marche male ou pas du tout. Le résultat souhaité étant un tableau ou les données sont sur 11 colonnes donc sans "trou" car cela va servir à un publipostage.

Je suis un peu perdu car je ne comprends pas pourquoi c'est si long car en pas à pas cela semble fonctionner.

Merci
 

Pièces jointes

  • Exemple SIVOS.xlsm
    863.7 KB · Affichages: 88

Staple1600

XLDnaute Barbatruc
Re : suppression ligne "vide"

Re


Si j'ai bien compris
Code:
Sub ElimineCelluleVideBIS()
Dim i&
Application.ScreenUpdating = False
For i = 2 To Range("A65535").End(xlUp).Row
Cells(i, "F").Resize(, 16).Sort Key1:=Cells(i, "F"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next i
End Sub

PS: Code testé avec un PC sous XL2003, si version supérieure adapter le code avec l'enregistreur de macros
(en faisant un tri par ligne : Option de tri: De gauche vers la droite)

EDITION: Salut leti ;)
 
Dernière édition:

Statistiques des forums

Discussions
312 345
Messages
2 087 482
Membres
103 557
dernier inscrit
gerard.messerlin68@orange