Macro remplacer une série de mots par des sigles (plage donnée) [Fermé]

Signaler
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
-
Messages postés
15161
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 avril 2021
-
Bonjour,

un fichier: http://www.cjoint.com/c/FKlmuc5AAjX
J'ai un fichier de 2 feuilles, dans chacune la dernière colonne comporte des États d'un pays (New York Arkansas, etc). je dois remplacer ça par les abréviations, pour alléger mon fichier (qui est énorme, 120Mo). Puis quand j'aurai access je le mettrai dedans, semaine prochaine.
J'ai excel 2007 et un PC.

Je veux, à chaque fois, dans la colonne C:C de F1 et F2 remplacer les états par les abréviations (j'ai une liste). Je suis débutant en VBA,et pour l'instant je ne réussis qu'à faire de petits exercices, et je n'ai pas réussi à faire une macro, même en regardant des macros à modifier sur google.
Je dois limiter le remplacement aux plages, car je veux pas que "New York Restaurant" devienne "NY Restaurant" (ça serait un prb pour le matching avec une autre base de données.....), et le nombre d'items à remplacer est de 30 (donc faudrait tous les écrire dans la macro).

Je précise - vous allez hurler - que chaque feuille fait 900.000 lignes.


Merci bcp!

2 réponses

Messages postés
15161
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 avril 2021
831
Suggestion :
Option Explicit
Sub states()
Dim f As Worksheet
Dim li As Long
Dim etat As String
Dim abbrev As String

For Each f In ThisWorkbook.Worksheets
    li = 1
    Do
        etat = Cells(li, 3)
        abbrev = ""
        Select Case etat
            Case "CALIFORNIE":
                abbrev = "CA"
            Case "TEXAS":
                abbrev = "TX"
        End Select
        If abbrev <> "" Then
            Cells(li, 3) = abbrev
        End If
        li = li + 1
    Loop While Cells(li, 3) <> ""
Next
End Sub

Cela va faire le boulot (pour CA & TX) sur la troisième colonne de toutes tes feuilles, jusqu'à rencontrer une cellule vide.
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
89
je vais le faire. Ca te choque donc pas que ça dure genre 1H30 ou 2H ? pour 800.000 lignes sur 2 feuilles. En fait si un truc marche pas après 5 ou 20minutes j'ai tendance à penser à tort que ça marchera pas après 3H
Messages postés
15161
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 avril 2021
831
combien de temps cela avait pris pour changer tous les états?
tu devrais pouvoir interrompre la macro (avec ctlr-break), regarder dans les feuilles comment elle progresse, puis la laisser continuer.
si tu n'es pas habitué, je pense mieux de la laisser continuer.
possible de modifier la macro pour qu'elle fasse un msgbox tous les 100000 cellules...
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
89 >
Messages postés
15161
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 avril 2021

Pour remplacer, moins de 3 minutes dirais je. Même si je l'ai fait en plusieurs fois car il y avait des cellules vides et j'ai du les combler.
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
89
:( la macro pour remplacer les celules vides par des . n'a pas fonctionné, je crois que c'est en raison du trop grand nombres de celules...
Messages postés
15161
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 avril 2021
831
et ceci ?
Option Explicit
Sub suppress_spaces()

Dim f As Worksheet
Dim cell As Range
Dim i As Long



For Each f In ThisWorkbook.Worksheets 'pour chaque feuille
    i = 1
    For Each cell In f.UsedRange 'pour chaque cellule utilisée
            cell = trimm(Trim(cell))
            If i = 100000 Then
            MsgBox ("atteint ligne " + CStr(cell.Row) + ", colonne " + CStr(cell.Column) + " dans " + f.Name)
            i = 1
        Else
            i = i + 1
        End If
    Next
    MsgBox "fini " + f.Name
Next

End Sub

Function trimm(inp As String) As String
    Dim out As String
    out = Replace(inp, "  ", " ")
    If InStr(out, "  ") > 0 Then
        out = trimm(out)
    End If
    trimm = out
End Function

Cela va faire un msgbox toutes les 100 mille cellules...

900 000 lignes ??? !!! Ah ben je suis sûr que tu as une version
d'Excel ultérieure à la version 2003, alors !!! Cordialement.  😉
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
89
mdr oui, je dois juste finir de traiter mon fichier (remplacer nettoyer) pius ça part dans un logiciel de stats (Stata) qui prend jusqu'à 3 millions de lignes
Utilisateur anonyme >
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018

3 millions de lignes ??? !!! N'en jetez plus !!! Ou Excel va exploser !!!  😉
Messages postés
898
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
7 août 2018
89
je rajoute plus rien :p je nettoye c'est tout (et je remplace par des abréviations)