Dépollution de fichier en VBA

thh

XLDnaute Nouveau
Bonjour à tous

J'ai un fichier mensuel à dépolluer avec de le transmettre aux personnes désirées.
Ce fichier à traiter possè entre 200000 & 400000 lignes.

Le traitement de se fichier est déjà géré par une macro qui fonctionne pas trop mal.
Ceci dit il me reste un petit problème, c'est la dépollution de certaines colonnes par la suppréssion de "0" (zéro) caché

Pour le moment la seule solution que j'ai trouvé, qui fonctionne est: Remplacer par....
Mais cela est très long....
J'ai essayé par la solution: Selection et effacement, mais cela ne fonctionne qu'à moitié.

Avez vous d'autres solutions plus efficace, et surtout pour chronophage?

Ci-joint exemple après dépollution. Il me reste des "0" cachés

Merci de votre aide

Cdt
 

Pièces jointes

  • Exemple Dépollution.xlsx
    186.7 KB · Affichages: 42

thh

XLDnaute Nouveau
Re : Dépollution de fichier en VBA

Bonjour,

Je souhaite remplacer les "0" par une cellule vide. Hormis "remplacer par" que j'ai testé mais qui bouffe un temps fou sur 200 000 lignes testés, j'ai essayè aussi "selectionner les lignes, effacer", mais il reste quand même des "0"

Merci de votre aide
 

thh

XLDnaute Nouveau
Re : Dépollution de fichier en VBA

C'est un exemple car j'ai 4 colonnes de ce type à dépolluer (colonne entre 200 000 lignes & 400 000 lignes)

La fonction "remplacer par" a l'air de fonctionner mais c'est chronophage.

quant à la fonction "effacer" cela ne fonctionne quà moitié
 

vgendron

XLDnaute Barbatruc
Re : Dépollution de fichier en VBA

une proposition

utilises le filtre de la colonne A
afficher uniquement les cellules Vides (celles qui contiennent un 0 caché)
ensuite. tu sélectionnes toutes les cellules filtrées
suppr

et voila..
 

vgendron

XLDnaute Barbatruc
Re : Dépollution de fichier en VBA

une macro qui te le faiT sur la colonne A

Code:
Sub Macro1()
'
' Macro1 Macro
'

'
    nb = [A:A].Count
    fin = Range("A" & nb).End(xlUp).Row
    ActiveSheet.Range("$A$1:$A$" & nb).AutoFilter Field:=1, Criteria1:="="
    
    Range("A2:A" & nb).SpecialCells(xlCellTypeVisible).Select
    Selection.ClearContents
    
    ActiveSheet.Range("$A$1:$A$" & nb).AutoFilter Field:=1
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Dépollution de fichier en VBA

Bonjour thh, vgendron, thebenoit59,

Sélectionnez la ou les colonnes à traiter et exécutez cette macro :

Code:
Sub NettoyageZeros()
Dim r As Range, c As Range, i&
Set r = Intersect(Selection.EntireColumn, ActiveSheet.UsedRange.Rows(1))
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each c In r
  Set r = Intersect(c.EntireColumn, ActiveSheet.UsedRange)
  If r.Count = 1 Then
    If r = 0 Then r = ""
  Else
    t = r.Formula 'matrice, plus rapide
    For i = 1 To UBound(t)
      If t(i, 1) = "0" Then t(i, 1) = ""
    Next
    r.Formula = t
  End If
Next
Set r = ActiveSheet.UsedRange 'actualise la barre de défilement verticale
End Sub
Avec un tableau VBA c'est toujours très rapide.

Nota : j'utilise .Formula au cas où il y aurait des formules...

A+
 

thh

XLDnaute Nouveau
Re : Dépollution de fichier en VBA

Merci pour votre aide.

J'ai trouvé une solution qui fonctionne.

Dans un premier temps je transforme les données "texte" en numérique par une boucle,
puis je fais une selection des cellules vides et "0", et je supprime.

Auparavant cela ne fonctionnait pas car je faisais l'inverse.

Encore merci à vous tous pour votre aide
 

thh

XLDnaute Nouveau
Re : Dépollution de fichier en VBA

Job75.

Je vais essayer tes codes afin de voir si je gagne du temps.

Merci

Sinon voilà ce que j'utilise:

'Conversion en numérique des nombres exprimés en texte
'boucle sur la plage
For Each c In Range(Cells(5, 14), Cells(DernièreLigne + 3, 14))
'évite le bug si la donnée n'est pas numérique
On Error Resume Next
'convertit en nombre
c.Value = CDbl(c.Value)
'prochaine cellule de la plage
Next

'Effacement des zéros en colonne L
Range(Cells(4, 10), Cells(DernièreLigne, 55)).AutoFilter Field:=14, Criteria1:="0", Operator:=xlOr, Criteria2:="="
Range("N5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Range(Cells(2, 16), Cells(DernièreLigne, 55)).AutoFilter Field:=14
 

Discussions similaires

Statistiques des forums

Discussions
312 500
Messages
2 089 013
Membres
104 004
dernier inscrit
mista