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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    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 confirmé 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 : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    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 expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    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 confirmé 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 : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    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 expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    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
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    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
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    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, 13h28
  2. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  3. [MySQL] Simplication de code
    Par Spanish_ dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/12/2008, 08h12
  4. Explorateur de code C
    Par Zero dans le forum C
    Réponses: 14
    Dernier message: 06/06/2002, 09h41
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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