Comparaison de chaîne de caractère

Comparaison de chaîne de caractère - VB/VBA/VBS - Programmation

Marsh Posté le 20-06-2006 à 14:55:17    

Bonjour,  
J'ai une macro qui offre la possibilité à l'utilisateur d'entrer des mots dans un fichier excel, si le mot est déjà présent on ne le rentre pas à nouveau.
Le problème c'est que par exemple:"réactif" et "Réactif" sont considérés comme différents!
Voilà ma comparaison :  
 
If LCase(Trim(Selection.Text)) = LCase(Trim(objexcel.ActiveCell.Offset(cpt, 0).Value)) Then
  MsgBox "Identiques"
Else  
  MsgBox"Différents"
EndIf
 
Quand je fais afficher les 2 mots ils sont pourtant bien identiques, tous les 2 en minuscules...
 
Si vous avez la solution...


Message édité par acorsa le 20-06-2006 à 14:58:02
Reply

Marsh Posté le 20-06-2006 à 14:55:17   

Reply

Marsh Posté le 20-06-2006 à 15:58:19    

Si je fais :
? lcase$("réactif" ) = lcase$("Réactif" )
en fenêtre de debug, j'obtiens bien Vrai
 
Donc tes valeurs ne sont pas ce qu'elles paraissent.
Comment as-tu vu que les valeurs sont « bonnes », en minuscules ?

Reply

Marsh Posté le 20-06-2006 à 16:16:46    

Tres sommaire ... mais qui marche


Private Sub Recherche(ByVal Cible As Range)
    If Application.CountIf(Range("A:B" ), Cible.Value) > 1 Then
       ' message pour signaler que l'entrée existe déjà
    Else
       ' procedure pour insérer le mot
    End If
End Sub
 
Sub test()
    Cells(1, 3) = "réactif"
    Recherche (Cells(1, 3))
End Sub


Message édité par kiki29 le 20-06-2006 à 17:30:06
Reply

Marsh Posté le 20-06-2006 à 16:22:36    

Tegu: ben j'ai fais :
MsgBox LCase(Trim(Selection.Text)) et  
MsgBox LCase(Trim(objexcel.ActiveCell.Offset(cpt, 0).Value))
et je vois que les mots sont identiques...

Reply

Marsh Posté le 20-06-2006 à 16:36:14    

Et si tu fais :
? LCase(Trim(Selection.Text)) = LCase(Trim(objexcel.ActiveCell.Offset(cpt, 0).Value))  
 
ça te donne quoi ?
Utilise les fonctions avec le $ à la fin sinon tu récupères des variants et pas des String dans ta comparaison. Ça peut jouer.

Reply

Marsh Posté le 20-06-2006 à 16:54:21    

ça me renvoie Faux!Et j'ai ajouté $.Est-ce-que tu penses que la police ou le style peut jouer? ça serait dingue ms bon...

Reply

Marsh Posté le 20-06-2006 à 17:20:07    

A mettre dans Module d'une feuille


Private Sub Worksheet_Change(ByVal Cible As Range)
    ' pour la colonne 1 =>  Range("A:A" )
    If Cible.Column = 1 Then
        Cible.Value = Trim(Cible.Value)
        If Len(Cible.Value) > 0 Then
            If Application.CountIf(Range("A:A" ), Cible) > 1 Then
                Cible.Value = ""
                Cible.Select
            End If
        End If
    End If
End Sub


Message édité par kiki29 le 23-06-2006 à 18:00:06
Reply

Marsh Posté le 20-06-2006 à 17:34:34    

Merci kiki ms je dois faire tourner cette macro sur pleins de poste et je me sert de cette comparaison ds mon code dc c peut-être pas la solution la plus simple non??

Reply

Marsh Posté le 20-06-2006 à 17:54:33    

A priori oui, mais il faudrait tester pour l'évaluer
par contre elle marche ...


Message édité par kiki29 le 20-06-2006 à 22:54:15
Reply

Marsh Posté le 23-06-2006 à 15:28:09    

As tu penser a utiliser "Like" ??
 
if chainetest like référence-de-test then
    msgbox("Bingo c'est gagné" )
else
    msgbox(" Ululu tu l'as dans le c**" )
endif
 
J'ai pas trop compris les autres réponses mais il me semble que dans ton premier post c'est bien ce genre de réponse que tu veux obtenir

Reply

Marsh Posté le 23-06-2006 à 15:28:09   

Reply

Marsh Posté le 23-06-2006 à 16:08:18    

lol voilà t'as tout compris..je crois que j'avais déjà essayé. Mais je vais quand même tester et je te dirai...
Merci!

Reply

Marsh Posté le 23-06-2006 à 16:22:10    

Utilise la fonction:
strcomp avec l'option vbTextCompare. Elle ignore les majuscules/minuscules.

Reply

Marsh Posté le 23-06-2006 à 17:49:57    

ya Ucase qui transforme tout en Maj et même les é en

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed