none
Comparer 2 chaines de caractères VBA RRS feed

  • Question

  • Bonjour,

    Je suis actuellement en train de faire du VBA et je rencontre un problème lorsque je souhaite comparer deux chaines de caractère.

    Après quelques recherches, j'ai testé String1 like String2 sans succès et également la fonction StrComp.

    Voici une partie de mon code :

    Dim typ As String
    Dim compare As Integer
    test = "Demande de Travaux "
    typ = Cells(Ligne, 6).Value
    MsgBox typ
    compare = StrComp(typ, test, vbTextCompare)
        If compare = 0 Then
        
        nb= 1 + nb

    [...]

    Ce que je ne comprends pas c'est que typ et test sont égaux et StrComp est tout de même égale à 1 alors que je voudrais qu'il soit à 0.

    Avez-vous une solution ? Peut être que j'utilise pas bien la fonction ?

    Merci d'avance.

    mercredi 6 juillet 2016 20:07

Toutes les réponses

  • Bonjour,

    Il est difficile de répondre sans connaître la valeur de typ. A tout hasard, il y a un espace à la fin de test. Est-ce voulu ?

    Cordialement.

    Daniel

    jeudi 7 juillet 2016 10:39
  • Bonjour,

    le typ vaut : "Demande de Travaux ", donc oui l'espace est fait exprès afin que les valeurs soient égales. Avez-vous une solution?

    Merci d'avance,

    jeudi 7 juillet 2016 19:25
  • Bonjour,

    "test" génère une erreur ici. Je l'ai remplacé par "testo". J'ai ajouté des msgboxes pour comparer la ongueur des strings et le code su caractère espace :

    Dim typ As String
    Dim compare As Integer
    Dim testo As String
    testo = "Demande de Travaux "
    typ = Cells(Ligne, 6).Value
    MsgBox Len(typ) = Len(testo)
    MsgBox Asc(typ) = Asc(testo)
    MsgBox typ
    compare = StrComp(typ, testo, vbTextCompare)
    

    Cordialement.

    Daniel

    vendredi 8 juillet 2016 08:24
  • Bonjour,

    J'ai testé avec les MsgBox, elles me donnent bien deux fois Vrai.

    Cependant mon "compare" ne vaut pas 0, il me donne 1. Or d'après ce que j'ai compris de la fonction StrComp si les deux valeurs sont égales  "compare" devrait me donenr zéro, n'est ce pas ?

    Je ne comprends pas pourquoi cela ne fonctionne pas

    Cordialement,

    vendredi 8 juillet 2016 18:39
  • Bonjour,

    Essaie :

    Dim typ As String
    Dim compare As Integer
    Dim testo As String
    testo = "Demande de Travaux "
    Cells(ligne, 6).Value = testo
    typ = Cells(ligne, 6).Value
    compare = StrComp(typ, testo, vbTextCompare)
    

    Cordialement.

    Daniel

    samedi 9 juillet 2016 10:21
  • Bonjour,


    Oui comme ça cela fonctionne, "compare" me donne 0. Alors pourquoi cela ne fonctionne pas dans mon code ?

    Car je souhaite faire une boucle IF qui prendrait en compte uniquement les cas où la cellule Cells(ligne,6) vaut "Demande de Travaux " et donc que compare soit égale à 0.

    Cordialement

    lundi 11 juillet 2016 07:49
  • Bonjour,

    Parce que les deux chaines ne sont pas égales. Peux-tu mettre ton classeur (juste la cellule concernée) sur OneDrive ou un autre site de partage ?

    Cordialement.

    Daniel

    lundi 11 juillet 2016 08:10
  • Bonjour, pourquoi ne pas appliquer de trim sur vos 2 chaines à comparer?

    lundi 11 juillet 2016 08:11
  • Je ne connais pas trim, qu'est ce que c'est ?
    lundi 11 juillet 2016 18:25
  • Je ne connais pas trim, qu'est ce que c'est ?

    Permet de supprimer les espaces à gauche et à droite dans une chaine de caractères, Trim est aussi disponible en tant que propriété sur une variable de type String
    lundi 11 juillet 2016 18:46
  • Bonjour,

    Qui saisie la valeur dans la cellule Cells(Ligne, 6).Value ?

    Un procédé de copié/collé ou bien une personne ?

    Si c'est un procédé de copié/collé, ce qui me paraît être le plus probable puisque vous ajoutez vous-même un espace pour que la comparaison puisse se faire, il faut savoir qu'il existe deux espaces dans la table ASCII :

    • le visible (si je puis dire) : Chr(32)
    • et l'invisible : Chr(160)

    Ainsi, la comparaison renverra 1 car visuellement, il y a bien un espace mais d'un point de vue code, ce n'est pas le même...

    Vous pouvez réaliser cette expérience directement dans Excel (entre A14 et C15):

    A B C
    14  =NBCAR(SUPPRESPACE(C14&CAR(32)))   =NBCAR(C14)   Demande de Travaux 
    15  =NBCAR(SUPPRESPACE(C15&CAR(160)))   =NBCAR(C15)   Demande de Travaux 


    Le résultat est le suivant :

    A B C
    14  18   18   Demande de Travaux 
    15  18   19   Demande de Travaux 

    Voyez si cela vient de ce constat...


    Argy

    jeudi 4 août 2016 12:33
    Modérateur