Supprimer des cellules vides

13GIBE59

XLDnaute Accro
Bonjour le forum,

Dans mon fichier exemple, il se trouve quinze colonnes contenant chacune une liste de mots.
Ces mots sont espacés entre eux dans chaque colonne par des vides (voir onglet 'partiel'), et je souhaite supprimer
ces cellules vides pour grouper les mots à la suite dans chaque colonne (voir onglet 'classés').

Je précise que mon classeur originel (trop lourd !)comporte 386265 mots répartis sur autant de lignes, pour un tableau à 386265 x 15 = 5 793 975 cellules et que l'on doit supprimer 5 407 710 cellules vides...

Ma macro simpliste ne fonctionne pas (erreur 400 :confused:):
Code:
Sub efface()
Range("C2:P386265").Select
Selection.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
Range("A1").Select
End Sub

Quelqu'un a-t'il une idée pour m'éviter de faire ça à la main :) (je ne suis pas Onan...) ?

Merci d'avance.

JB

 

Pièces jointes

  • Exemple.xlsx
    14.2 KB · Affichages: 104
  • Exemple.xlsx
    14.2 KB · Affichages: 116
  • Exemple.xlsx
    14.2 KB · Affichages: 113

job75

XLDnaute Barbatruc
Re : Supprimer des cellules vides

Bonsoir cher dauphin (je ne te croise pas souvent), Tentative, Yaloo,

Avec des tris c'est très rapide mais il faut d'abord éliminer les textes vides "" :

Code:
Sub Nettoyage()
Dim col As Range, dercel As Range
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
  .Replace "", "#N/A", xlWhole 'pour éliminer les textes vides ""
  .Replace "#N/A", ""
  For Each col In .Columns
    col.Resize(col.Rows.Count + 1).Sort col, xlAscending, Header:=xlYes 'tri avec en-têtes
  Next
  Set dercel = .Find("*", , xlValues, , xlByRows, xlPrevious)
End With
If Not dercel Is Nothing Then _
  Rows(dercel.Row + 1 & ":" & Rows.Count).Delete 'pour supprimer les bordures
End Sub
Edit : ajouté .Resize(col.Rows.Count + 1) pour le cas où la feuille est vide...

Bonne nuit.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Supprimer des cellules vides

Bonjour 13GIBE59, le fil, le forum,

Sur Win 8 - Excel 2013 j'ai testé la macro précédente sur 100 000 lignes (duplication du tableau).

Elle s'exécute en 46 secondes, je pensais que ce serait plus rapide.

Edit : en fait ce qui prend du temps (42 s) ce sont les 2 lignes pour l'élimination des textes vides.

Alors maintenant une solution par tableaux VBA :

Code:
Sub NettoyageRapide()
Dim nlig&, t, rest(), j%, n&, i&, dercel As Range
With ActiveSheet.UsedRange
  nlig = .Rows.Count
  t = .Resize(nlig + 1) 'matrice, plus rapide
  ReDim rest(1 To nlig, 1 To UBound(t, 2))
  For j = 1 To UBound(t, 2)
    n = 0
    For i = 1 To nlig
      If t(i, j) <> "" Then n = n + 1: rest(n, j) = t(i, j)
    Next
  Next
  .Value = rest
  Set dercel = .Find("*", , xlValues, , xlByRows, xlPrevious)
End With
If Not dercel Is Nothing Then _
  Rows(dercel.Row + 1 & ":" & Rows.Count).Delete 'pour supprimer les bordures
With ActiveSheet.UsedRange: End With 'repositionne la barre de défilement verticale
End Sub
Elle s'exécute en 4,6 secondes, c'est donc 10 fois plus rapide.

A+
 
Dernière édition:

13GIBE59

XLDnaute Accro
Re : Supprimer des cellules vides

Bonjour le forum,
bonjour Tentative, Yahoo, Job,

désolé pour ma réponse tardive, mais les tests de vos solutions m'ont pris un peu de temps...

@ Tentative : ta solution appliquée à mon fichier ne fait...rien ! Elle tourne, puis s'arrête, et rien n'a changé ! Tant pis, merci quand même :)

@ Yahoo : ta solution appliquée à mon fichier tourne indéfiniment. Est-ce lié à ma config ? (Double coeur Athlon 2,6 GHz, 3 Go mémoire), j'ai un doute. Merci quand même :)

@ Job ; j'ai testé ta deuxième solution uniquement : en 45 s environ, bingo ! Ca marche ! Good job, comme d'hab.:):)

Nota : si le fichier complet des 386264 mots vous intéresse, contactez moi par message privé. Il s'agit de l'ensemble des mots de la langue française de 2 à 15 lettres jouables au scrabble.

Merci à vous tous.
 

Discussions similaires

Statistiques des forums

Discussions
312 342
Messages
2 087 432
Membres
103 543
dernier inscrit
YannBernard