IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Simplication de code [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut Simplication de code


    J'ai fait la macro suivante qui a l'air de bien marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Sub Remplace()
    For X = 1 To 5000
        If Range("G" & X).Value = "1" Then
        Range("G" & X).Value = "RV1601"
        Else
        If Range("G" & X).Value = "2" Then
        Range("G" & X).Value = "RV1901"
        Else
        If Range("G" & X).Value = "3" Then
        Range("G" & X).Value = "RV2160"
        Else
        If Range("G" & X).Value = "4" Then
        Range("G" & X).Value = "RV2190"
        Else
        If Range("G" & X).Value = "5" Then
        Range("G" & X).Value = "RF112"
        Else
        If Range("G" & X).Value = "6" Then
        Range("G" & X).Value = "RF119"
        Else
        If Range("G" & X).Value = "7" Then
        Range("G" & X).Value = "RF120"
        Else
        If Range("G" & X).Value = "8" Then
        Range("G" & X).Value = "RF121"
        Else
        If Range("G" & X).Value = "9" Then
        Range("G" & X).Value = "RF122"
        Else
        If Range("G" & X).Value = "10" Then
        Range("G" & X).Value = "RF124"
        Else
        If Range("G" & X).Value = "11" Then
        Range("G" & X).Value = "RF125"
        Else
        If Range("G" & X).Value = "12" Then
        Range("G" & X).Value = "RF130"
        Else
        If Range("G" & X).Value = "13" Then
        Range("G" & X).Value = "RF135"
        Else
        If Range("G" & X).Value = "14" Then
        Range("G" & X).Value = "RF150"
        Else
        If Range("G" & X).Value = "15" Then
        Range("G" & X).Value = "RF155"
        Else
        If Range("G" & X).Value = "16" Then
        Range("G" & X).Value = "RF225"
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
        End If
    Next X
    End Sub
    Toutefois, je voudrais savoir si il y avait moyen de la simplifier car il me faut en faire environ 60 et c'est un peu long et je pense qu'il doit y avoir plus simple

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    Utilise plutôt un select case a la place de if imbriqués

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Remplace()
    For X = 1 To 5000
        select case Range("G" & X).Value 
            case "1" 
               Range("G" & X).Value = "RV1601"
            case "2"
                Range("G" & X).Value = "RV1901"
     
            ...
     
         end select

  3. #3
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Sinon tu peux utiliser replace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub remplacerCaracteres()
     
        Dim C As Range
     
    fin = Range("A65536").End(xlUp).Row 'trouve la dernière ligne de la colonne A,évite d'aller jusque la ligne 5000
    Set plage = Range("A1", "A" & fin)
        For Each C In plage
            C.Value = Replace(C.Value, "1", "RV1601")
            C.Value = Replace(C.Value, "2", "RV1901")
            '...
        Next C
    End Sub

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    diude54, il me semble que dans le cas ou C.Value=12 ca va faire

    RV1601 sur le remplacement du 1 puis passer la valeur a RV1901 sur le remplacement du 2 alors que la valeur souhaitée est RF130

  5. #5
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Je viens de tester et effectivement c'est le resulmtat que ça donne, désolé pour ma solution qui ne marche pas.
    J'avais testé mais je me suis arreté à 3 et je n'avais pas pensé à ça.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    l'utilisation d'un array me paraîtrait ici conseillée, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Remplace()
      toto = Array("RV1601", "RV1901", "RV2160", "RV2190", "RF112", "RF119", "RF120", "RF121", "RF121", "RF124", "RF125", "RF130", "RF135", "RF150", "RF155", "RF225")
      For X = 1 To 5000
         titi = Val(Range("G" & X).Value)
         If isnumeric(titi) and titi > 0 And titi < 17 Then
           Range("G" & X).Value = toto(titi-1)
         End If
      Next
    End Sub
    EDIT :

    Il est également possible d'utiliser la fonction Switch (elle marchera, sans même calculer par Val ... et donc pour "switcher" deux strings) mais elle me parait plus lourde

    J'ai mis une condition (valeur entre 1 et 16 et de "forme" numerique) juste par prudence (ne sachant pas quelles sont les autres valeurs présentes possibles).

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 664
    Points : 34 371
    Points
    34 371
    Par défaut
    salut,
    je propose ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For X = 1 To 5000
        Range("G" & X).Value = Choose(CDbl(Range("G" & X).Value),"RV1601","RV1901","RV2160","RV2190","RF112","RF119","RF120","RF121","RF122","RF124","RF125","RF130","RF135","RF150","RF155","RF225")
    Next X

  8. #8
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Je me suis servi du code de ucfoutu car il a l'avantage d'être plus cour et moins laborieux a taper que les autres mis a part celui de jpcheck qui malheureusement est arrivé un peu trop tard (on peu pas être partout en même temps).

    En tout cas meci a tous car sa a l'air de marcher nikel .

    Mais je garde vos solutions sous la main car sa pourrait me servir pour autre chose.



+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. simplication du code
    Par omelhor dans le forum Langage
    Réponses: 1
    Dernier message: 18/09/2012, 14h28
  2. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 03h17
  3. [MySQL] Simplication de code
    Par Spanish_ dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/12/2008, 09h12
  4. Explorateur de code C
    Par Zero dans le forum C
    Réponses: 14
    Dernier message: 06/06/2002, 10h41
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo