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

TOT127 Messages postés 1045 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    1. TOT127 Messages postés 1045 Statut Membre 96
       
      merci ! je vais voir ça, puis je te demander ce que signifie " li = 1" ici ?
      0
    2. Utilisateur anonyme > TOT127 Messages postés 1045 Statut Membre
       
      li est le n° de ligne, initialisé à 1.  😉
      0
    3. TOT127 Messages postés 1045 Statut Membre 96
       
      bonjour ! ça fonctionne bien, mais ya un prb: ça ne fait pas le travail sur les 600.000 lignes. Combien de temps environ dois je attendre ? Car je mets la macro en route, et après 30 secondes je vais voir le résultat. Peut-être je dois attendre ? VBA ne dit jamais quand il a fini :(
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      il s’arrête peut-être trop tôt, sur la première ligne sans rien en colonne C?
      ce code prévient quand il a fini chaque feuille :
      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) <> ""
          MsgBox "fini " + f.Name + ", dernière ligne =" + CStr(li)
      Next
      
      
      End Sub
      
      0
    5. TOT127 Messages postés 1045 Statut Membre 96
       
      Bonjour, j'ai bien une msgbox qui me dit que c'est fini, mais seulement après 50.000 lignes. Or chaque feuille a environ 600.000 lignes.... Une idée ?
      0
  2. Utilisateur anonyme
     
    900 000 lignes ??? !!! Ah ben je suis sûr que tu as une version
    d'Excel ultérieure à la version 2003, alors !!! Cordialement.  😉
    -2
    1. TOT127 Messages postés 1045 Statut Membre 96
       
      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
      0
      1. Utilisateur anonyme > TOT127 Messages postés 1045 Statut Membre
         
        3 millions de lignes ??? !!! N'en jetez plus !!! Ou Excel va exploser !!!  😉
        0
    2. TOT127 Messages postés 1045 Statut Membre 96
       
      je rajoute plus rien :p je nettoye c'est tout (et je remplace par des abréviations)
      0