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 :

[VBA-A] Comparer une valeur à nimporte quel caractère


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut [VBA-A] Comparer une valeur à nimporte quel caractère
    Bonjour,

    j'aimerais faire en sorte qu'une case à cocher prenne la valeur "true" si un contenu de listbox contient au moins 1 caractère aléatoire (le contenu est bien souvent une phrase) et reste à "false" s'il n'y a rien. J'ai donc défini la valeur "false" par défaut et j'ai tapé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If Form_FICHE.lstCon.Value = "%" Then
            Form_FICHE.cochPre.Value = True
        End If
    Je pensais que "%" aurait pu équivaloir à "au moins 1 caractère " (comme en C++ je crois) mais non..

    Comment dois je faire?

    Merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    len(Form_FICHE.lstCon.Value)<>0

  3. #3
    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
    Ou ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Lettre = Chr(255)
    MsgBox Lettre Like "[" & Chr(0) & "-" & Chr(255) & "]"
    C'est toi qui vois l'intérêt de l'une ou l'autre méthode

    A+

  4. #4
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Regarde aussi l'aide de la fonction Instr( ), et oublie le "%"
    Ça pourrait te convenir.


  5. #5
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    je me suis mis a vba depuis très peu mais moi j'avais eu un souci similaire et j'avais utilisé * à la place de % ca devrait donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Form_FICHE.lstCon.Value like "*" Then
            Form_FICHE.cochPre.Value = True
        End If
    si jamais ca peut aider...

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    J'ai tenté les méthodes de bandit boy et de random, sans succès..

    Je ne comprend pas très bien ta méthode ouskel'n'or...

    Quand à l'instruction Instr(), je vais faire des recherches tout de suite sur cette méthode.

    Si quelqu'un a une autre idée... :-D

    Merci

  7. #7
    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 526
    Points
    14 526
    Par défaut
    slt,

    c'est pas plutôt FICHE tout court le nom du formulaire? Form_ c'est le préfixe ajouté par access pour les événements (à moins que tu ne nommes tous tes formulaires Form_*)

    Sinon si tu exécutes le code dans le formulaire il n'est pas nécessaire de le nommer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cochPre.Value = (len(lstCon.Value)<>0)
    :

  8. #8
    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
    Je ne comprend pas très bien ta méthode ouskel'n'or...
    Ma méthode consiste à effectuer une comparaison booléenne de tous les caractères ascii, de ctrl+a [code 0] à ÿ [chr(255)] avec le caractère saisi. C'est à dire qu'il contrôle même les caractères accentués et les caractères de contrôle.
    Si l'utilisateur fait ë, il est identifié, de même que l'espace, le #, @, ~, etc.

    L'as-tu essayée ?

    A+

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    ouskel'n'or >> beh en fait, je n'arrive pas à comprendre comment je pourrais joindre ca au code que j'ai mis ci dessus...

  10. #10
    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
    Ok,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Lettre = Form_FICHE.lstCon.Value 
    Form_FICHE.cochPre.Value = Lettre Like "[" & Chr(0) & "-" & Chr(255) & "]"
    Tu peux déjà essayer ça. Tu devrais avoir True ou false / ou -1 et 0 dans
    cochPre.value

    Tu essaies et tu dis

    A+

    Edit
    Jète un oeil à like dans l'aide... pour ta culture

  11. #11
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bon...
    je risque de passer pour un endormi mais j'ai vraiment envie de la poser, cette question...
    cuicui08 a écrit celà :
    si un contenu de listbox contient au moins 1 caractère aléatoire (le contenu est bien souvent une phrase
    et son % dans son code m'a troublé...
    Le reste aussi...
    Alors : ma question toute bête à cucui08 :
    qu'entends-tu par caractère aléatoire (car je fais la différence entre "n'importe quel" et "aléatoire") ?
    s'agit-il de n'importe quel caractère (donc toujours vrai si le texte est différent de "") ?
    ou
    s'agit-il d'un texte contenant (pour que la condition soit VRAIE) un caractère choisi aléatoirement ?
    Car tout change alors, bien évidemment !
    si la 1ère hypothèse est la bonne, la meilleure façon de tester est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    b = le_texte & Chr(0)
    If Asc(Left(Trim(b), 1)) > 0 Then
      MsgBox "oui"
    Else
    MsgBox "non"
    End If
    car elle permet de recenser à coup sur tous les caractères (y compris inviisibles) autres que chr(0) et les espaces, sans générer une erreur si la chaine est vide ou remplie de seuls espaces

    si c'est par contre la 2ème hypothèse est la bonne (on connait alors le caractère à rechercher), tout est beaucoup plus simple et le test se fait sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If instr(le_texte, le_caractère) > 0

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    jmfmarques >> Il s'agit en fait qu'il ya ai nimporte quel caractère dans la listbox. J'ai remarqué quelque chose d'assez curieux : je continuais à tester différentes méthodes quand je me suis dis que je devait tester en remplaçant par une valeur "certaine". J'ai donc mis ce code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Form_FICHE.lstNumPre.Value = 2 Then
            MsgBox ("Entre dans le if")
            Form_FICHE.cochPre.Value = True
        End If
    Le contenu de la listbox est pourtant "2" dans les test que je fais et il n'est pas rentré dans la boucle (message non affiché) ... curieux, non ? Voila Merci :-D

  13. #13
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    ta valeur est peut-être de type string et contient peut-être des espaces.
    Un test avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If val(trim(Form_FICHE.lstNumPre.Value)= 2 Then 
            MsgBox ("Entre dans le if") 
            Form_FICHE.cochPre.Value = True 
        End If
    :
    et si tu affichais, "pour voir", une par une, les valeurs de tous les caractères contenus ?
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = 1 to len(le_texte_contenu)
      msgbox asc(mid(le_texte_contenu,I,1))
    Next I
    :
    Tu saurais ce qu'il y a dans son ventre...

  14. #14
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    Euh.. elle est effectivement de type String (c'est une requête SQL que je met dans une variable String). Je teste tout de suite ta méthode et je reviens dire quoi. Encore merci à tout le monde

  15. #15
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    Alors, apparement il ne connait pas Trim() et si je met Val(Form_Fiche.lstNumPre.value) = 2, il me génère l'erreur suivante : "Erreur d'utilisation de Null".

    Je précise le code du contenu de la listbox (si ca peut vous aider un peu plus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strNum = " Select MAINTENANCE_PREVENTIVE.[id_mainpre] from MAINTENANCE_PREVENTIVE, OBJET " & _
    " Where MAINTENANCE_PREVENTIVE.[id_mainpre] = OBJET.[id_prev] " & _
    " and OBJET.[designation] = '" & Form_LIST_Objet.List_Objet.Value & "'"
    lstNumPre.RowSource = strNum
    Voilà

  16. #16
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Alors, apparement il ne connait pas Trim() et si je met Val(Form_Fiche.lstNumPre.value) = 2, il me génère l'erreur suivante : "Erreur d'utilisation de Null".
    1) si, comme tu l'a affirmé plus haut, le type string est bien là : le Trim n'a aucune raison d'être "refusé" !
    2) ta 2ème erreur dénonce la présence d'un NULL
    Tu peux toutefois faire précéder l'expression de la condition par un
    If not isnull (...) then...
    .
    .
    .
    .else .... = 0
    3) J'en suis pour l'instant (et toi aussi) à l'évaluation de :
    Form_FICHE.lstNumPre.Value
    avant d'aller voir plus loin ou plus en avant...

  17. #17
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    En fait, quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        If Val(Trim(Form_FICHE.lstNumPre.Value) = 2) Then
            MsgBox ("Entre dans le if")
            Form_FICHE.cochPre.Value = True
        End If
    , il me dit que le projet ou la bibliothèque est introuvable. Je dois surement ouvrir quelque chose dans Reference, mais quoi ??

  18. #18
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    J'ai trouvé pourquoi Trim ne fonctionne pas. Il me manquait la reference Microsoft CDO for N.T.S 1.2. Maintenant, il me trouve l'erreur d'avant avec le Trim (erreur d'excution '94' : Utilisation incorrecte du Null)

  19. #19
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Points : 14
    Points
    14
    Par défaut
    Bon beh ca y est, j'ai trouvé la source de l'erreur. C'est tout simplement que ma listbox ne sert qu'à l'affichage (pas à la selectionner) d'une donnée. Vu que je met .value, il attend à ce que je selectionne une donnée (mais ce n'est pas le cas). De plus, le code se lance au chargement du formulaire, vu que la listebox n'a pas de valuer selectionné, il me créer l'erreur du "Null". J'ai honte de pas avoir touvé une erreur aussi bete avant...

    Maintenant je me demande comment je peux faire pour qu'il compare mon 2 au contenu non selectonné de ma listbox.. Quelqu'un sait si c'est possible et si oui comment ? (en gros, il faudrait qu'il compare mon 2 à tous les éléments non selectionnée de ma listbox; même s'il n'y en a qu'un seul)

  20. #20
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Je crois (celà nous évitera de travailler dans tous les sens une fois de plus) que tu devrais d'abord exprimer clairement :

    - s'il doit comparer 2 au contenu de chaque élément de ta listbox et , dans ce cas : si 2 est un numérique ou une chaine de caractères "2", d'une part, et si le contenu de ta listbox est fait de numériques ou de chaînes de caractères, d'autre part...

    - si, au contraire, il doit rechercher si 2 ou "2", selon le cas, est présent quelquepart à l'intérieur des articles (un par un) de ta listbox (et dans ce cas, ce ne pourra être que sous forme de caractères)

Discussions similaires

  1. [VBA] Comparer une valeur à un masque de saisie
    Par spaiku dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/08/2008, 12h46
  2. [VBA-E] Comparer les valeurs entre classeur
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/03/2006, 12h32
  3. [VBA] Recherche d'une valeur dans un autre fichiers puis
    Par Nicos77 dans le forum Général VBA
    Réponses: 11
    Dernier message: 24/03/2006, 11h24
  4. [VBA]Affectation d'une valeur à une cellule par une fonction
    Par lallougri dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/02/2006, 14h24
  5. Comparer une valeur à plus ou moins quelque chose...?
    Par Thierry8 dans le forum Langage
    Réponses: 4
    Dernier message: 11/10/2005, 13h17

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