Comparaison de chaines de caractères en VBA

phirexian

XLDnaute Nouveau
Bien le bonjour à tous en cette belle journée qui commence :D!
Mon problème est relativement simple mais j'arrive pas à répondre à mon besoin même en cherchant bien sur la toile (peut être que je ne cherche pas encore assez bien ^^!!)
Je commence par vous présenter mon code ca sera plus simple pour m'expliquer ou être compris :p!
Code:
Dim LibelléOpération1 as String
Dim LibelléOpération2 as String

    LibelléOpération1 = "prelevemen"
    LibelléOpération2 = "Prélevement"
    
    '1er cas renvoie Faux alors que j'aimerai que ca renvoie Vrai
    MsgBox UCase(LibelléOpération2) Like UCase(LibelléOpération1)
    
    '2nd cas renvoie 1 alors que j'aimerai que ca renvoie 0
    MsgBox StrComp(UCase(LibelléOpération2), UCase( LibelléOpération1), vbTextCompare)
    
    '3eme cas renvoie 0 alors que j'aimerai un résultat différent de 0    
    Msgbox instr (1,UCase(LibelléOpération2), UCase( LibelléOpération1),vbTextCompare)

Les différents cas me permettent de comparer mes deux chaînes de caractères LibelléOpération1 et 2 mais aucune des fonctions me permet de revoyer Vrai ou 1 par exemple pour me dire que LibelléOpération1 correspond à LibelléOpération2 même si il manque une lettre ou un espace dans LibelléOpération2.
Existe t-il une telle fonction?
Merci infiniment pour votre aide.
Si je ne suis pas clair hésiter pas à me poser des question ;-)
Cordialement
 

david84

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères en VBA

Bonjour,
Les différents cas me permettent de comparer mes deux chaînes de caractères LibelléOpération1 et 2 mais aucune des fonctions me permet de revoyer Vrai ou 1 par exemple pour me dire que LibelléOpération1 correspond à LibelléOpération2 même si il manque une lettre ou un espace dans LibelléOpération2.
Existe t-il une telle fonction?
Merci infiniment pour votre aide.
As-tu bien compris ce que font les fonctions utilisées ? As-tu regardé la manière dont l'opérateur Like doit être utilisé, notamment l'utilisation des caractères "*" et "?" ?
Au-delà de ces points, il te faut également te préoccuper de traiter les caractères accentués car pour Excel le e est différent du é.
'1er cas renvoie Faux alors que j'aimerai que ca renvoie Vrai
Le résultat ne peut pas être vrai, même si tu traites du "t" qui manque puisque la chaîne 2 comporte un caractère accentué.
'2nd cas renvoie 1 alors que j'aimerai que ca renvoie 0
pas possible en l'état même après traitement des caractères accentués puisqu'il manque le t.
A+

Edit : bonjour Pierrot !
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères en VBA

Bonjour phirexian
Ton problème viens de l'accent il existe le caractère É qui est différent de E
Renvoi 1 :
VB:
    MsgBox InStr(1, UCase(Replace(LibelléOpération2, "é", "e")), UCase(LibelléOpération1))

cordialement

EDIt
J'avions poins vu tout l'monde :D
Bonjour David, Bonjour Pierrot
 
Dernière édition:

phirexian

XLDnaute Nouveau
Re : Comparaison de chaines de caractères en VBA

Déjà je tiens à remercier:
Efgé
David84
Pierrot93
pour vos réponses :D!

Pierrot, en effet ton code ne fonctionne pas à cause de l'accent, dommage j'y croyais jusqu'au moment où je l'ai testé ^^!

David, je suis en aucun cas un pro en VBA, je débute même pour certaines fonctions et opérateurs notamment le "LIKE". Tes remarques sont percutantes, je n'ai pas bien compris comment utiliser cet opérateur. Si tu pouvais m'éclairer, cela serait parfait ou me renvoyer vers un site internet pédagogique.

Efgé, petite question, est-il possible avec une fonctionne VBA de détecter ou calculer le nombre de caractères présentant un accent dans une chaîne de caractères? Sinon existe t-il une fonction permettant de supprimer tous les espaces présents dans une chaîne de caractères?

Merci à tous de contribuer à la résolution de mon problème :D

Amicalement
 

Efgé

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères en VBA

Re
Pour la détetection des accent, fait une recherche sur le forum, ou/et ouvre une nouvelle discution.

Pour supprimer les espaces(tous les espaces):
VB:
Sub test()
Dim X$
X = "   12   12   12     "
X = Join(Split(Trim(X)), "")
End Sub

Cordialement
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères en VBA

Pour l'utilisation de l'opérateur Like le plus simple est que tu commences par lire l'aide d'Excel à ce sujet (touche F1) et si tu as des questions ou des précisions à demander n'hésite pas.
Concernant la suppression des accents tu peux notamment regarder cette discussion.
A+
 

phirexian

XLDnaute Nouveau
Re : Comparaison de chaines de caractères en VBA

Bon j'ai regardé les solutions à droites à gauche et je suis même aller voir certain forum.

Bon voilà avec quel code je travail. D'après ce que j'ai vu cela devrait fonctionner mais ce n'est pas le cas, il y a un problème avec la fonction "REPLACE". J'aimerai bien savoir pourquoi ^^! voilà mon code:

Code:
Private Sub ValiderCreerOperation_Click()

Dim ListeCaractèresAccents As String
Dim ListecaractèresSansAccent As String
Dim NewTexte, LibelléOpération As String
Dim RefOperationsSources_Ligne, RefOperationsSources_Colonne, NumeroLigneDernOpérations_FeuilleSources, NbOperationSource As String

ListeCaractèresAccents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
ListecaractèresSansAccent = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"

'Définition des références utiles à la macro
    'La cellule "Opérations" de la feuille "Sources"
     RefOperationsSources_Ligne = Worksheets("Sources").Cells.Find("Opérations").Row
     RefOperationsSources_Colonne = Worksheets("Sources").Cells.Find("Opérations").Column
     
    'Le n° de ligne de la dernière valeur de la liste d'opérations disponible
     NumeroLigneDernOpérations_FeuilleSources = Worksheets("Sources").Cells.Find("Opérations").End(xlDown).Row
    
    'Le nb d'opérations disponibles dans la liste concernée de la feuille "Sources"
     NbOperationSource = Worksheets("Sources").Cells.Find("Opérations").End(xlDown).Row - RefOperationsSources_Ligne
    
'Développement du tableau de conversion de caractères
    Dim TableauConversion() As String
    ReDim TableauConversion(Len(ListeCaractèresAccents), 2)
    For i = 1 To Len(ListeCaractèresAccents)
        TableauConversion(i, 1) = Mid(ListeCaractèresAccents, i, 1)
        TableauConversion(i, 2) = Mid(ListecaractèresSansAccent, i, 1)
    Next i

 'Modification des caractères présentant un accent dans "paiment pâr carte"
  For j = 1 To Len(ListeCaractèresAccents)
     If InStr(1,"paiement pâr carte", TableauConversion(j, 1), vbTextCompare) <> 0 Then
         NewTexte = UCase(Replace("paiement pâr carte", TableauConversion(j, 1), TableauConversion(j, 2)))
         MsgBox NewTexte
         Exit For
     End If
  Next j
      
'Création de la nouvelle Opération
 For k = 1 To NbOperationSource
    LibelléOpération = Worksheets("Sources").Cells(RefOperationsSources_Ligne + k, RefOperationsSources_Colonne).Value
    MsgBox LibelléOpération
    MsgBox NewTexte
    MsgBox UCase(LibelléOpération)
    MsgBox NewTexte Like UCase(LibelléOpération)
    'If NewTexte Like UCase(LibelléOpération) = True Then
      ' MsgBox "Cette opération existe déjà"
      ' CreaOperation.NomOperation.Value = ""
     '  Exit Sub
    'End If
 Next k

Si vous avez des idées ca serait juste magnifique quoi et vous pourriez hériter du titre de "DIEU" à mon égard :D!!

En fait la fonction "REPLACE" ne transforme pas le "â" en "a", je sais pas pourquoi :S!

Amicalement
 

Efgé

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères en VBA

Re

Dernière participation ^pour ma part

Essai ainsi:
VB:
  NewTexte = "paiement pâr carte"
  For j = 1 To Len(ListeCaractèresAccents)
     If InStr(1, NewTexte, TableauConversion(j, 1)) < > 0 Then
         NewTexte = Replace(NewTexte, TableauConversion(j, 1), TableauConversion(j, 2))
         Exit For
     End If
  Next j
     MsgBox UCase(NewTexte)
Cordialement
 

phirexian

XLDnaute Nouveau
Re : Comparaison de chaines de caractères en VBA

Whouaaahhhh!! Ca marche merci :D!! Mais juste une question pourquoi le code suivant fonctionne:
Code:
If InStr(1, NewTexte, TableauConversion(j, 1)) < > 0 Then

et pas celui-ci?:
Code:
If InStr(1, NewTexte, TableauConversion(j, 1), vbTextCompare) < > 0 Then

Je suis juste curieux :D!

J'ai une dernière question:

Par exemple si:

New Texte = "Paiement par carte" et que je compare cette chaîne de caractère à une autre variable ayant pour valeur "paiment par carte"; est-il possible par une quelconque autre fonction de renvoyer vrai. Autrement dit je cherche à dire que ces deux chaînes de caractères sont presque pareilles.

Vous voyez ce que je veux dire?

Mais sinon un grand merci :D
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 685
Messages
2 090 938
Membres
104 703
dernier inscrit
romla937