TRIM/EPURAGE en chaine?

benlecanard

XLDnaute Junior
Bonjour

Je récupère un fichier (mal fait) que je dois retraiter pour l'utiliser sous forme de base de données
Un des retraitements consiste à supprimer les espaces superflus avec la fonction TRIM, sur presque toutes les colonnes
Je passe par plusieurs opérations (ajouter fonction, copier fonction sur autres colonnes, recopier valeur une fois ok et cela a chaque fois que je récupère des infos)

Y aurait il un moyen de faire un "épurage" general sur tout un onglet/toutes les cellules non vides par exemple?
ou une macro?

Merci!
 

Pierrot93

XLDnaute Barbatruc
Re : TRIM/EPURAGE en chaine?

Bonjour Benlecanard

essaye peut être le code ci dessous :

Code:
Sub test()
Dim c As Range
For Each c In ActiveSheet.UsedRange 
c.Value = Trim(c.Value)
Next c
End Sub

attention, un peu long si beaucoup de cellules...

bon après midi
@+
 

RENAUDER

Nous a quitté
Repose en paix
Re : TRIM/EPURAGE en chaine?

Bonjour,
En utilisant peut-etre la notion de tableau (ça devrait aller plus vite)
Code:
Sub Test()
    Dim Tabl()
    Range("A1").CurrentRegion.Select
    NRow = Selection.Rows.Count
    NCol = Selection.Columns.Count
    ReDim Tabl(1 To NRow, 1 To NCol)
    a = Selection.Value
    For i = 1 To NRow - 1
        For j = 1 To NCol - 1
            Cells(i, j).Value = Trim(a(i, j))
        Next j
    Next i
End Sub
 

benlecanard

XLDnaute Junior
Re : TRIM/EPURAGE en chaine?

Merci
Pour vous répondre
- plantage sur première macro = très très long puis pas de réponse.
- supprimer double espaces via macro : autant faire un remplacer manuel tout bête, c'est plus rapide.

Avec la solution tableau/derniere macro ca marche et c'est assez rapide :)
Merci. Cependant:
- la dernière ligne n'est pas traitée
- mes formats texte sont modifiés ("000005047" est modifié en "5047" lors de l"épurage et ca ne m'arrange pas trop ca!)
 

RENAUDER

Nous a quitté
Repose en paix
Re : TRIM/EPURAGE en chaine?

Bonjour,

Je t'ai donné une méthode mais il faut voir avec le vrai fichier car chaque cas peut-être différent.
J'ai retiré les -1 pour NRow et Ncol
Envoies le fichier ça pourrait m'aider.
Code:
Sub Test()
    Dim Tabl()
    Range("A1").CurrentRegion.Select
    NRow = Selection.Rows.Count
    NCol = Selection.Columns.Count
    ReDim Tabl(1 To NRow, 1 To NCol)
    a = Selection.Value
    For i = 1 To NRow
        For j = 1 To NCol 
            Cells(i, j).Value = Trim(a(i, j))
        Next j
    Next i
End Sub
Si fichier trop grand
erenaud@deutsch.net
 
Dernière édition:

benlecanard

XLDnaute Junior
Re : TRIM/EPURAGE en chaine?

Merci
Ci joint exemple de fichier que je dois retraiter

J'effectue plusieurs opérations, en premier un "trim"
(puis je relie les codes clients/villes avec un Vlookup pour retrouver d'autres infos)
 

Pièces jointes

  • TRIM general.xls
    45 KB · Affichages: 141

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : TRIM/EPURAGE en chaine?

Bonjour Ben le canard, pierrot93, boisgontier, renauder, le forum

voici une version qui devrait être beaucoup plus rapide sur les grandes séries, j'ai testé sur 65536 valeurs, c'est trés rapide. Si tu veux garder tes chiffres en format texte, passe tes cellules en format texte avant de lancer la macro

Cordialement, A+
Code:
Sub Test2()
    Dim Tab_Val, Tab_Cel As Range, I As Long, J As Integer, Mem_Calc As Boolean
    Application.ScreenUpdating = False
    If Application.Calculation = xlAutomatic Then
        Mem_Calc = True
        Application.Calculation = xlManual
    Else
        Mem_Calc = False
    End If
    Set Tab_Cel = Range("A1").CurrentRegion
    Tab_Val = Tab_Cel.Value
    For I = LBound(Tab_Val) To UBound(Tab_Val)
        For J = 1 To Tab_Cel.Columns.Count
             Tab_Val(I, J) = Trim(Tab_Val(I, J))
        Next J
    Next I
    Tab_Cel.Value = Tab_Val
    If Mem_Calc = True Then Application.Calculation = xlAutomatic
    Application.ScreenUpdating = True
End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : TRIM/EPURAGE en chaine?

Re bonjour

c'est une question de format de cellule. Quand tu ouvres un fichier texte sans préciser le type de données par colonne, tu passes en format standard. Une donnée enregistrée " 0005" sera comprise comme une chaine texte lors de l'initialisation à cause du " ". Quand tu passes la macro, en fait tu initialises avec une nouvelle valeur de type chiffre, le format standard de la cellule reconnait un chiffre et agit en conséquence. Essayes de rentrer manuellement une chaine type " 005" et tu comprendras.
les solutions de contournement possibles
1-ajouter ' avant la valeur pour préciser une chaine texte
2-passer les cellules en format texte pour éviter la reconnaissance chiffre
3-passer les colonnes concernées en format texte lors de l'ouverture du fichier texte en précisant ce format.

Cordialement, A+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 757
dernier inscrit
mikha