Problème macro effacer données (fichier taille importante)

Bonjour,

J'ai un gros fichier excel dans lequel j'aimerais effacer les lignes des cellules vides de la deuxième colonne ! Le fichier est tellement volumineux (j'ai réussi à le réduire à environ 80 000 lignes) que la boucle met énormément de temps à le faire ! Je suis passé par la méthode d'Excel pour supprimer les doublons (les lignes vides étant les doublons) mais logiquement il m'en reste encore plusieurs !

J'ai essayé de supprimer en passant par le parcours normal et aussi de manière dynamique, j'ai aussi utilisé le filtre en sélectionnant les vides mais toutes ces solutions durent 30 min au moins et sans avoir fini !

Auriez vous une solution ?

En vous remerciant de votre aide

Et Hop un petit UP !

Bonsoir

biggi1992 a écrit :

toutes ces solutions durent 30 min au moins et sans avoir fini !

Tu n'aurais pas beaucoup de formules ?

Comment fait tu tes suppressions ?

Peux tu joindre un fichier représentatif et indiquer ce que tu veux faire

biggi1992 a écrit :

effacer les lignes des cellules vides de la deuxième colonne

Supprimer une ligne enlève toutes les informations de la ligne (dans toutes les colonnes)

Ou alors supprimer les cellules vides d'une seule colonne

biggi1992 a écrit :

Bonjour,

J'ai un gros fichier excel dans lequel j'aimerais effacer les lignes des cellules vides de la deuxième colonne !

Fais un tri sur cette colonne et efface en bloc, puis remet l'ordre initial. C'est hyper-rapide !

Steelson a écrit :
biggi1992 a écrit :

Bonjour,

J'ai un gros fichier excel dans lequel j'aimerais effacer les lignes des cellules vides de la deuxième colonne !

Fais un tri sur cette colonne et efface en bloc, puis remet l'ordre initial. C'est hyper-rapide !

Pour une raison que j'ignore j'ai essayé ça et ça ne passe pas ! Bizarre ! Pourtant j'ai l'habitude de séparer des données à l'aide de filtres comme ça ! Je l'ai expliqué dans le poste au début, toute action par filtre n'efface pas que le bloc sélectionné mais efface toutes les plages entre la première et la dernière ligne du bloc

Banzai64 a écrit :

Comment fait tu tes suppressions ?

Peux tu joindre un fichier représentatif et indiquer ce que tu veux faire

En fait, je fais mes suppressions en utilisant trois méthodes différentes,

J'ai une macro avec laquelle je parcours toutes les cellules vides de la deuxième colonne et supprime la ligne entière si elle est vide ! Cette méthode met beaucoup trop de temps, c'est normal vu que le fichier a près de 80 000 lignes !

La deuxième méthode : je fais un filtre en sélectionnant que les vides sur la deuxième colonne ensuite je sélectionne le bloc, clic droit et je fais supprimer la ligne ! Après deux heures, ma macro vient de finir de tourner !

La troisième méthode : je fais un filtre dynamique par macro sur les cellules différentes du vide dans la deuxième colonne et je copie le résultat du filtre dans un autre onglet !

En gros, j'ai l'habitude d'utiliser toutes ces méthodes et elles fonctionnent toujours en moins de 5 secondes, je me dis que VBA n'est pas fait pour gérer plus de 100 000 données vu qu'il n'est pas un SGBD mais là quand même !

Banzai64 a écrit :

Supprimer une ligne enlève toutes les informations de la ligne (dans toutes les colonnes)

Ou alors supprimer les cellules vides d'une seule colonne

Supprimer une ligne enlève toutes les informations de la ligne (dans toutes les colonnes)

Je fais appel à votre aide parce que je me dis qu'il devrait probablement exister un moyen de supprimer même une grande plage de données excel sans devoir attendre 2h !

Mon fichier est beaucoup trop volumineux, je ne peux pas le mettre sans réduire les informations, ce qui ne vous servirait probablement à rien parce que plus le nombre de lignes est réduit toute macro que j'utilise pour supprimer fonctionne rapidement !

Merci de votre aide

Bonjour

Sans fichier pour faire des tests, ce n'est pas évident

Dans la continuité de ma première idée

Teste ces instructions, à placer dan le code de ta macro

Sub test()
Dim ModeCalcul As Integer

  With Application
    .ScreenUpdating = False
    ModeCalcul = .Calculation
    .Calculation = xlCalculationManual

    ' A utiliser si dans la page concernée il y a des macros événementielles
    .EnableEvents = False

  End With

  '
  ' Le code pour supprimer les lignes
  '

  With Application
    ' Tu peux le replacer à True (sans danger)
    .EnableEvents = True
    .Calculation = ModeCalcul
  End With

End Sub

Si pas d'amélioration, il faut ton fichier

Essaye de passer par cjoint http://cjoint.com/index.php

biggi1992 a écrit :
Steelson a écrit :
biggi1992 a écrit :

Bonjour,

J'ai un gros fichier excel dans lequel j'aimerais effacer les lignes des cellules vides de la deuxième colonne !

Fais un tri sur cette colonne et efface en bloc, puis remet l'ordre initial. C'est hyper-rapide !

Pour une raison que j'ignore j'ai essayé ça et ça ne passe pas ! Bizarre ! Pourtant j'ai l'habitude de séparer des données à l'aide de filtres comme ça ! Je l'ai expliqué dans le poste au début, toute action par filtre n'efface pas que le bloc sélectionné mais efface toutes les plages entre la première et la dernière ligne du bloc

Non, pas par filtre, je suggère de trier la colonne, puis par macro de déterminer la première et la dernière ligne concernée et d'effacer le bloc continu complet.

Exemple, à adapter (ici le tri initial est en colonne A et je suppose qu'elle ne contient pas de case vide)

La suppression se fait en considérant la colonne B

Les données sont en colonnes A à H

Petite correction du code :

Sub SUPP()

    derA = Range("A" & Application.Rows.Count).End(xlUp).Row

    Columns("A:H").Select
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range( _
        "B2:B" & derA), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A1:H" & derA)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    derB = Range("B" & Application.Rows.Count).End(xlUp).Row + 1
    If derB < derA Then
    Rows(derB & ":" & derA).Select
    Selection.Delete Shift:=xlUp
    End If

    Columns("A:H").Select
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range( _
        "A2:A" & derA), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A1:H" & derA)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Donne-moi :

  • la lettre de la dernière colonne du tableau
  • la lettre de la colonne qui doit être prise en compte pour la suppression des lignes
et je te l'adaptes
Steelson a écrit :

Petite correction du code :

Sub SUPP()

    derA = Range("A" & Application.Rows.Count).End(xlUp).Row

    Columns("A:H").Select
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range( _
        "B2:B" & derA), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A1:H" & derA)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    derB = Range("B" & Application.Rows.Count).End(xlUp).Row + 1
    If derB < derA Then
    Rows(derB & ":" & derA).Select
    Selection.Delete Shift:=xlUp
    End If

    Columns("A:H").Select
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range( _
        "A2:A" & derA), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A1:H" & derA)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Donne-moi :

  • la lettre de la dernière colonne du tableau
  • la lettre de la colonne qui doit être prise en compte pour la suppression des lignes
et je te l'adaptes

Bonjour,

Désolé de ne répondre que maintenant, j'ai une connexion merdique quand je ne suis pas au bureau !

J'ai pu l'adapter !

Merci pour votre aide

Cela fait combien en temps ? moins d'une minute ?

Steelson a écrit :

Cela fait combien en temps ? moins d'une minute ?

Moins d'une minute effectivement, c'est très optimal à ma grande surprise !

Merci

Rechercher des sujets similaires à "probleme macro effacer donnees fichier taille importante"