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

VBA Access Discussion :

Résultat étrange d'un test d'égalité sur une chaîne de caractère


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Résultat étrange d'un test d'égalité sur une chaîne de caractère
    Bonjour,

    Sous VBA Access 2016, j'ai une chaîne (dim Caract As String) de caractères. Selon la fenêtre de variables locales, elle vaut "r", dans la fenêtre d'exécution ? Caract renvoie "r", ? Asc(Caract) renvoie 114 et ? Len(Caract) renvoie 1. Jusque là, tout est normal.

    Cependant le test ? Caract="r" renvoie Faux.

    Je programme régulièrement sous VBA mais j'ai du passer à côté de quelque chose.

    Avez vous une explication ?

    Cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    À tout hasard, vérifie que tu as bien Option Compare Database en haut de module.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Et vérifie aussi qu'au moment où tu fais le test Caract vaut bien ce que tu crois qu'elle vaut.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oui l'option Compare Database est bien activée en entête du module.

    Je lis les valeurs et effectue le test en mode debogage, la valeur apparait ainsi dans la fenêtre des variables globales.

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    peut-on voir le code complet histoire de voir ce qu'il doit faire ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    En réalité, c'est à la suite d'un Case Select qui ne fonctionnait pas correctement, que j'en suis arrivé à simplifier le problème. A l'intérieur du programme, le test se déroule ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                   Dim Caract As String
                   Caract = Surnoms.Surnom
                   Caract = Mid(Caract, 10, 1)
                   Debug.Print Caract, Asc(Caract), Len(Caract), Caract = "r"
                   Stop
    Et la fenêtre d'exécution affiche:
                   r              114           1            Faux
    Et c'est le dernier Faux qui me gêne. Il m'empêche de tester une chaîne entière plus grande contenant ce caractère. Les autres caractères de la chaîne Mid(Caract, 9, 1) par exemple renvoie un test correct sur le =.

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    que vaut Caract après Caract = Surnoms.Surnom ?

    quel est le type de Surnoms.Surnom ?

    et que renvoie le test Asc(Caract) = 114 ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Surnoms est de type Prop_Surnom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Type Prop_Surnom
       Surnom As String           ' Surnom d'origine
       Surnom_Sspar As String     ' Surnom sans les parenthèses
       Surnom_Born As String      ' Surnom avec le nom de naissance
       Nom As String              ' Nom de famille usuel
       Nom_Born As String         ' Nom de famille de naissance
    End Type
    asc(caract)=114 renvoie Vrai

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Cstr(Caract) = "r" et Mid(Surnoms.Surnom, 10, 1) = "r"
    renvoient quoi ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    ? Cstr(Caract) = "r" renvoie Faux

    et

    ? Mid(Surnoms.Surnom, 10, 1) = "r" renvoie Faux

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    pas sympa on dirait un vrai bug

    c'est possible d'avoir la base allégée en pièce jointe ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    bonjour,

    et ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print StrComp(Caract, "r", vbTextCompare)
    sinon essayer de décompiler, recompiler et compacter la base via le .bat de fabulous loufab
    Dernière modification par Invité ; 05/01/2019 à 15h20. Motif: Ajout des balises [CODE] mon code [/CODE] (bouton #)

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    StrComp(Caract, "r", vbDatabaseCompare) renvoie 1

    et donc Caract>"r" envoie Vrai.

    Je sais compiler et compacter la base. Je ne sais pas décompiler et je n'ai pas trouvé le .bat sur la page de Fabulous Loufab.

  14. #14
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Désolé, StrComp(Caract, "r", vbTextCompare) renvoie 1 aussi

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Peut-être une piste. Asc(Caract) renvoie 114, AscB(Caract) renvoie 89 tandis que AscW(Caract) renvoie 345.

    En général on a Asc(x)=AscB(x)=AscW(x)

  16. #16
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    La chaine de caractères est en unicode (un caractère sur 2 octects) et tu testes une valeur ANSI (1 caractère sur 1 octet).

    Regarde du cote de strconv pour convertir la chaine de caractères avant traitement.

  17. #17
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    Effectivement 345 cest un ř (avec un petit chapeau).
    Sans doute que vba ne sait pas l'afficher dans l'éditeur, mais ce n'est pas un simple r.

Discussions similaires

  1. [Débutant] Test partiel sur une chaîne de caractère en XAML
    Par bobybob06 dans le forum C#
    Réponses: 0
    Dernier message: 25/07/2012, 16h55
  2. [XL-2007] Tests sur une chaîne de caractères
    Par Lucky062 dans le forum Excel
    Réponses: 11
    Dernier message: 01/03/2012, 15h37
  3. Test sur une chaîne de caractères
    Par ThunderBolt_ dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/06/2007, 06h37
  4. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52
  5. Requête sur une chaîne de caractères
    Par Hakunamatata dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/04/2006, 18h27

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