accélérer un code vba

  • Initiateur de la discussion Initiateur de la discussion pascal21
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pascal21

XLDnaute Barbatruc
bonjour le forum
j'ai trouvé un bout de code sur le net qui fonctionne pour supprimer les lignes vides dont la colonne A n'est pas renseignée
mais il est dejà très long pour 1000 lignes lors de mon test (+ de 20 sec.)
alors qu'il faudrait que çà concerne 5000 lignes
Code:
Private Sub Worksheet_Activate()
Dim i%
    For i = 1000 To 1 Step -1
        If Cells(i, 1) = "" Then Rows(i).Delete
    Next i
End Sub
est-ce que vous auriez une solution plus rapide?
merci
 
Dernière édition:
Bonjour pascal21
Bises a DoubleZero

A tester:
Sub efface()
Dim zone As Range
For n = 1 To 1210
If Range("A" & n) = "" Then
If Not zone Is Nothing Then
Set zone = Application.Union(zone, Range(Cells(n, 1).Address & ":" & Cells(n, Columns.Count).Address))
Else
Set zone = Range(Cells(n, 1).Address & ":" & Cells(n, Columns.Count).Address)
End If
End If
Next
zone.Delete
End Sub
 
bonjour toutes🙂 & tous🙂
bisous a mes ami(e)s DoubleZero 🙂🙂 & Pierrejean🙂🙂
le code de DoubleZero devrait marcher?? en modifiant un peu

VB:
ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

ou
VB:
On Error Resume Next
    [A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
 
Bonjour à tous,

Si le code de DoubleZero ne va pas c'est que vraisemblablement il y a en colonne A des formules renvoyant le texte vide "".

Ceci est très rapide :
Code:
Sub SupprimerLignesVides()
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
  .Columns(1).EntireColumn.Insert 'colonne auxiliaire
  .Columns(0) = "=1/(RC[1]<>"""")"
  .Columns(0) = .Columns(0).Value
  .Columns(0).Resize(, .Columns.Count + 1).Sort .Columns(0) 'tri pour accélérer
  On Error Resume Next
  .Columns(0).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
  .Columns(0).EntireColumn.Delete
End With
With ActiveSheet.UsedRange: End With 'actualise les barres de défilement
End Sub
A+
 
Re,

Sans insérer de colonne c'est un tout petit peu plus rapide :
Code:
Sub SupprimerLignesVides()
Dim cc%
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
  cc = .Columns.Count
  .Columns(cc + 1) = "=1/(RC[" & -cc & "]<>"""")"
  .Columns(cc + 1) = .Columns(cc + 1).Value
  .Resize(, cc + 1).Sort .Columns(cc + 1) 'tri pour accélérer
  On Error Resume Next
  .Columns(cc + 1).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
  .Columns(cc + 1) = ""
End With
With ActiveSheet.UsedRange: End With 'actualise les barres de défilement
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
830
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
873
Réponses
3
Affichages
404
Réponses
7
Affichages
958
Réponses
4
Affichages
686
Retour