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 :

Procédure select case and like conjuguées [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Procédure select case and like conjuguées
    Bonjour à tous,

    J'essaye de créer une base de données qui sera utilisée sous access et renouvellée tous les mois, et mon but est de re-traiter les données en colonne B que je reçois chaque mois (pouvant aller jusqu'a 5-6000 lignes), de manière à pouvoir les utiliser sous access.
    Le but est d'afficher une valeur dans la cellule de colonne c en fonction d'une partie du contenu de la cellule de même ligne de colonne b, et comme mes conditions sont nombreuses, j'ai décidé d'écarter les conditions If imbriqués. D'où mon idée d'utiliser Select Case, mais comme ma condition est basée sur une partie de la valeur de la cellule, je dois l'associé à une fonction like.
    Voici mon code pour l'instant qui ne marche pas car je sais (désormais) qu'on ne peut pas associer les 2 fonctions.

    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
    Dim sj As Range
    Dim stdsj As String
    For Each sj In Range("b2:b20")
     
       Select Case sj
       Case Is = "*CRED MUT*"
        stdsj = "CREDIT MUTUEL"
       Case Is = "*CDN*"
        stsdj = "CREDIT DU NORD"
        Case Is = "*ALU*"
        stdsj = "ALCATEL"
        Case Is = "*BMW*"
        stdsj = "BMW"
        Case Is = "*BPCE*"
        stdsj = "BPCE"
        Case Is = "*TCH*"
        stdsj = "TECHNICOLOR"
        Case Is = "*PEUGEOT*"
        stdsj = "PEUGEOT"
        Case Is = "*FRANCE TELECOM*"
        stdsj = "FRANCE TELECOM"
        Case Is = "*HSBC*"
        stdsj = "HSBC"
        Case Is = "*ING*"
        stdsj = "ING"
        Case Is = "*CA*"
        stdsj = "CREDIT AGRICOLE"
        Case Is = "*SOCIETE GENERALE*"
        stdsj = "SOCIETE GENERALE"
        Case Is = "*GIF*"
        stdsj = "UBS"
        Case Is = "*VAG*"
        stdsj = "VOLKSWAGEN"
        End Select
       sj.Offset(0, 1).Value = stdsj
    Next sj
    Je sais que c'est pas possible d'utiliser les 2 procédures en même temps, mais je sèche complétement sur comment faire la procédure autrement, donc si vous avez une idée je suis totalement preneur.


    Merci en avance

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub Test()
    Dim StDsj As String
    Dim Sj As Range
     
    For Each Sj In Worksheets("Sheet1").Range("B2:B20")
        Select Case True
            Case Sj Like "*CRED MUT*"
                StDsj = "CREDIT MUTUEL"
            Case Sj Like "*CDN*"
                StDsj = "CREDIT DU NORD"
            Case Sj Like "*ALU*"
                StDsj = "ALCATEL"
            Case Sj Like "*BMW*"
                StDsj = "BMW"
            Case Sj Like "*BPCE*"
                StDsj = "BPCE"
            Case Sj Like "*TCH*"
                StDsj = "TECHNICOLOR"
            Case Sj Like "*PEUGEOT*"
                StDsj = "PEUGEOT"
            Case Sj Like "*FRANCE TELECOM*"
                StDsj = "FRANCE TELECOM"
            Case Sj Like "*HSBC*"
                StDsj = "HSBC"
            Case Sj Like "*ING*"
                StDsj = "ING"
            Case Sj Like "*CA*"
                StDsj = "CREDIT AGRICOLE"
            Case Sj Like "*SOCIETE GENERALE*"
                StDsj = "SOCIETE GENERALE"
            Case Sj Like "*GIF*"
                StDsj = "UBS"
            Case Sj Like "*VAG*"
                StDsj = "VOLKSWAGEN"
        End Select
        Sj.Offset(0, 1).Value = StDsj
        StDsj = ""
    Next Sj
    End Sub

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, je comprends pas trop pourquoi, j'arrivais pas à passer cette syntaxe.
    Enfin encore merci tu m'as débloqué.

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    En fait cette écriture est une manière détournée d'utiliser Select Case.

  5. #5
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 807
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 807
    Points : 32 105
    Points
    32 105
    Par défaut
    Citation Envoyé par mercatog, mon maitre à moi Voir le message
    En fait cette écriture est une manière détournée d'utiliser Select Case.
    C'est, en plus, un moyen élégant de ne pas imbriquer les if...else if...else if.... C'est quasiment ma syntaxe préférée en VBA, et elle n'a pas d'équivalent dans bien des langages plus "modernes", genre JAVA ou C# (par contre, en cobol, on a.....).

    Quand j'ai une spécification(et ça arrive souvent) qui fait une liste de décisions avec ordre(si on a un client particulier, alors ceci, sinon si on a un client pro sans regroupement, alors celà, sinon si.......), cette liste de décision est souvent présentée sous forme de tableau. Un select case true permet de coder simplement toutes ces conditions successives, et surtout, de le faire en collant à la spec. Ligne à ligne. Quand la spec change, adapter le code devient bien plus facile. Y'a juste à lire la spec. Et la moindre différence saute aux yeux.

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

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 08h41
  2. SELECT CASE et LIKE
    Par xian21 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/11/2008, 01h52
  3. [RUP] Use case and use case realisation
    Par Yveke dans le forum Cas d'utilisation
    Réponses: 11
    Dernier message: 18/11/2004, 12h24
  4. vérification de passage dans un select case
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 11h05
  5. SQL :select et AND
    Par Shabata dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/05/2003, 14h39

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