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 :

Select Case ne renvoie pas la valeur attendue


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Points : 76
    Points
    76
    Par défaut Select Case ne renvoie pas la valeur attendue
    Aloha

    Dans ma macro VBA j'ai ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TZ = InStr(1, ch_attribut, "T = Z de l'objet")
    Select Case TZ
        Case Is = 0
          GoTo finTZ
        Case Is > 0
          ch_attribut = Left(ch_attribut, TZ - 1) & "T" & Mid(ch_attribut, TZ + 1)
    End Select
    Oui mais voilà, ch_attribut reste égal à ch_attribut même dans le cas ou TZ = 2.
    Pourquoi ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Exemple dans le cas :
    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
    ch_attribut = "@T = Z de l'objet@"
     
    TZ = InStr(1, ch_attribut, "T = Z de l'objet")
    'tu as : TZ = 2
     
    Select Case TZ
        Case Is = 0
          GoTo finTZ
        Case Is > 0
          ch_attribut = Left(ch_attribut, TZ - 1) & "T" & Mid(ch_attribut, TZ + 1)
    'Left(ch_attribut, TZ - 1) = "@"
    'Mid(ch_attribut, TZ + 1) = " = Z de l'objet@",
    '    car tu ne spécifies pas la longueur du texte à extraire dans le Mid
    '    donc il va jusqu'au dernier caractère
    End Select
    ' Bref tu enlèves le "T" pour le remettre

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    2 petites remarques.

    1) Essaie d'éviter les Goto.
    2) Si tu es certain (debug) que TZ = 2, alors cela ne semble pas être un probleme de Select case mais c'est plutot l'instruction suivante qui ne fait rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ch_attribut = Left(ch_attribut, TZ - 1) & "T" & Mid(ch_attribut, TZ + 1)
    Si TZ = 2, ton code ne fait rien car il remet T en pos 2.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour ma part, je n'ai pas de pb avec ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ch_attribut = "2T = Z de l'objet"
    TZ = InStr(1, ch_attribut, "T = Z de l'objet")
    Select Case TZ
        Case Is = 0
          MsgBox TZ
        Case Is > 0
          MsgBox TZ
    End Select
    Bref, il semblerait que tu ne nous dises pas tout

  5. #5
    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,

    Il est clair que si tu prends tout ce qu'il y a à gauche jusqu'à la position TZ -1 et que tu le concatènes avec "T" et tout ce qui suit la position TZ + 1, ta chaine résultante sera rigoureusement égale à la chaîne traitée !

    Réfléchis déjà à la logique d'aller jusqu'au caractère, à gauche, de position TZ-1, puis de lui rajouter le caractère de rang TZ (lme caractère "T") !!!
    Cela équivaut à prendre à gauche tout ce qui va jusqu'au caractère TZ, donc "T" inclus !!!

    Que manque-t-il dans cette affaire ? du code ? non... de la logique ? oui...

    Et si tu nous disais plutôt (avec un exemple de chaîne traitée et de chaîne résultante) ce que tu attends comme chaîne résultante ? (car on ne le sait pas !)

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut dadavyvy et le forum
    Pas sur, mais pour moi InStr(1, ch_attribut, "T = Z de l'objet") renvoi du texte et l'instruction Select case peut traiter des chiffres ou des lettres. il faudrait changer TZ en nombre (CInt par exemple) ou faire que Select Case teste des chiffres ("0", "1", etc)
    A+

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Non, Instr renvoie un variant, j'ai vérifié ça car j'avais aussi cette idée. Or un variant prend le premier type utilisé.

    Tu me copieras cent fois
    Citation Envoyé par F1
    Instr : Renvoie une valeur de type Variant (Long) indiquant la position de la première occurrence d'une chaîne à l'intérieur d'une autre chaîne

Discussions similaires

  1. Count ne renvoie pas de valeur
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/01/2008, 15h49
  2. [Prototype] [1.5.1] $() ne retourne pas la valeur attendue
    Par WebTotoche dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 29/08/2007, 20h19
  3. [MySQL] mysql_fetch_array : print_r ne renvoie pas le resultat attendu.
    Par méphistopheles dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/12/2006, 19h52
  4. [POO] Variable ne contenant pas la valeur attendue
    Par norby042 dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2006, 11h06
  5. Réponses: 3
    Dernier message: 09/11/2006, 00h04

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