Problème de lenteur .

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 !

murainesouspatate

XLDnaute Occasionnel
Bonjour,
je me trouve bien ennuyé dans mon travail,
J'effectue des extractions de fichier brut à retravailler pour faire une base de donnée sous Access.
Pour retravailler mon fichier brut , je fais une mise en forme qui dure presque 1h15, la plus longue (suppression des lignes vides).
Celui-ci comprend 38015 lignes et presque une sur deux de vide.
Pourriez vous me donner une astuce pour diminuer ce temps ?

voici ma macro :

Sub DétruireLigne()
derniereLigne = ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False
For r = derniereLigne To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
End Sub
 
Re : Problème de lenteur .

Bonsoir

Si il y a des calculs sur la feuille, il est impératif de mettre le mode de calcul sur manuel
essaie cela :
Code:
Sub SuppLigneVides()
ModeRecalcul = Application.Calculation
' Réglage du recalcul sur mode manuel
Application.Calculation = xlCalculationManual
    With ActiveSheet.UsedRange
    derLi = .Row + .Rows.Count - 1
    End With
    Application.ScreenUpdating = False
    For R = derLi To 1 Step -1
    If Application.CountA(Rows(R)) = 0 Then Rows(R).Delete
    Next R
Application.Calculation = ModeRecalcul
End Sub
 
Re : Problème de lenteur .

Bonjour

sinon, si tes lignes vides ont systématiquement une cellule d'une même colonne vide sans que ce soit le cas des lignes non vides, tu peux utiliser ce code qui fera la même chose d'un seul coup sans boucle.

Cordialement

Code:
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete xlUp
 
Dernière édition:
Re : Problème de lenteur .

Bonsoir à tous

Yeahou
muraine veut supprimer uniquement les lignes entièrement vides
d'où l'utilisation de Application.CountA(Rows(r))

Ta solution est ok mais comme tu le dis pour traiter uniquement une colonne (A dans ton exemple)

Les deux codes ne font donc pas tout a fait la même chose. 😉

A ce sujet, je me demande si un simple tri ne pourrait pas faire l'affaire
(mais il semble que peut-être il y ait trop de lignes pour ce tri fonctionne)
 
Re : Problème de lenteur .

Bonsoir,

Si tu peux le faire sans contrainte, tu peux aussi effectuer un tri sur la zone.
Les lignes vides seront supprimées.

Edit : Pas rafraichi, meme idée que Staple1600

Edit2 : Testé sur 38000 lignes et 50 colonnes, ça semble fontionner...
 
Dernière édition:
Re : Problème de lenteur .

Re bonjour

à stapple1600
muraine a déclaré qu'il retravaillait des données brutes pour faire une base access, auquel cas il y a certainement un champ clef toujours rempli et toujours le même pour les lignes de données, numéro de dossier , date, etc, les lignes vides à supprimer n'étant que des séparations dans son fichier d'extraction. Si mon analyse est correcte, ce code lui fera gagner du temps. L'important n'est pas ce que le code original fait mais son but.

Cordialement
 
Re : Problème de lenteur .

Re


Yeahou:
Non l'important c'est la rose 😉
J'ai simplement dit que le résultat des deux macros n'étaient pas tout à fait identiques.
Jamais dis que ton analyse était incorrecte 😉

Gareth: Reste à savoir si le tri est ce que veut la muraine, et si le tri est plus rapide que le del.
 
Re : Problème de lenteur .

Bonjour

si la mise en forme des cellules ne te sert pas, voila un code passant par des tableaux VB et utilisant ta méthode de test

Cordialement

Code:
Sub Supprimer_Lignes_Vides()
    
    'définition des variables
    Dim Compteur As Long, Compteur2 As Long, Compteur3 As Integer
    Dim Tab_Donnees As Variant, Tab_Donnees2 As Variant
    
    'désactivation de l'affichage écran pour gagner en rapidité
    Application.ScreenUpdating = False
    
    'désactivation du calcul automatique pour gagner en rapidité
    Application.Calculation = xlCalculationManual
    
    ReDim Tab_Donnees(1 To 65536, 1 To 256)
    Tab_Donnees2 = ActiveSheet.Cells.Value
    Compteur2 = 0
    
    For Compteur = 1 To ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row
        If Not Application.CountA(ActiveSheet.Rows(Compteur)) = 0 Then
            Compteur2 = Compteur2 + 1
            For Compteur3 = 1 To 256
                Tab_Donnees(Compteur2, Compteur3) = Tab_Donnees2(Compteur, Compteur3)
            Next Compteur3
        End If
    Next Compteur
    ActiveSheet.Cells.Value = Tab_Donnees
    
    'réactivation de l'affichage écran
    Application.ScreenUpdating = True
    
    'réactivation du calcul automatique
    Application.Calculation = xlCalculationAutomatic
    
End Sub
 
Dernière édition:
- 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
909
S
  • Résolu(e)
Réponses
6
Affichages
2 K
Serge6926
S
L
Réponses
9
Affichages
1 K
O
  • Question Question
Microsoft 365 Problème Exit sub
Réponses
9
Affichages
1 K
omario1995
O
N
Réponses
5
Affichages
3 K
Nicocotte125
N
L
Réponses
6
Affichages
2 K
lukes67
L
A
Réponses
3
Affichages
2 K
Alex6942
A
Réponses
6
Affichages
1 K
G
Réponses
9
Affichages
1 K
Réponses
6
Affichages
1 K
Retour