VBA chaines de caractères Replace Respectant la casse

misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009 - 19 nov. 2009 à 18:09
cs_jcq Messages postés 211 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 janvier 2010 - 20 nov. 2009 à 12:07
Bonjour,

Je m'excuse de créer le sujet deux fois mais j'ai cherché et je n'ai pas trouvé comment modifier le sujet d'un topic! Ayant validé trop vite.

si quelqu'un peut me montrer comment supprimer un sujet je suis preneuse!!

Bon voici ma question:


J'ai une fonction en VBA qui prend une liste de chaines de caractères et qui la transforme en une autre liste en remplaçant des chaines de caractères au sein de la première liste.

Est-il possible d'avoir une fonction qui fait le remplacement en respectant la casse de la chaine à remplacer?

J'ai utilisé la fonction replace mais celle-ci ne respecte pas la casse...

12 réponses

cs_jcq Messages postés 211 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 janvier 2010
19 nov. 2009 à 18:29
Simplement:
MsgBox Replace("AaBcDd", "a", "TropFort", , , vbBinaryCompare)


Bart-Rennes
La vie est courte, profitez-en !
Contrôles de bouton et frame en ActiveX et WinForm .NET sur http://www.namtuk.com/FR/DotNet_bouton_my_command_button.aspx
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
19 nov. 2009 à 18:56
Bonjour,
Si tu veux respecter vraiment la casse, mais aux mêmes rang de ta chaîne (et à condition que la chaîne de remplacement soit bien évidemment de même longueur que celle à remplacer, tu le peux ===>>> utilisation intensive de Mid !!!
0
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
19 nov. 2009 à 19:02
Bonjour jcq j'utilise déjà la fonction replace de cette façon ça ne fonctionne pas.

Bonjour Jmf0!

malheureusement la chaine de remplacement n'est pas de la même longueur que celle à remplacer.

Par ailleurs, la chaine de caractère peut être de longueur variable du coup la fonction Mid ne peut pas vraiment m'aider, à moins que je me trompe.


En fait je vous donne un exemple

Replace("REF Prefecture", "REF", "", , , vbBinaryCompare)

Donne : Pecture au lieu de Prefecture
0
cs_jcq Messages postés 211 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 janvier 2010
19 nov. 2009 à 19:05
Ah désolé, j'ai essayé en VB6 et ça fonctionne normalement. VBA de mer.e

Bart-Rennes
La vie est courte, profitez-en !
Contrôles de bouton et frame en ActiveX et WinForm .NET sur http://www.namtuk.com/FR/DotNet_bouton_my_command_button.aspx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
19 nov. 2009 à 19:07
Je suis bien d'accord sur VBA
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
19 nov. 2009 à 19:47
salut,

le code proposé semble pourtant bien fonctionner sous le VBA d'excel 2007...


Private Sub UserForm_Click()
    Dim s As String
    s = Replace("REF Prefecture", "REF", "", , , vbBinaryCompare)
    MsgBox "_" & s & "_"
End Sub



sinon voici une alternative qui devrait fonctionner :
http://www.codyx.org/snippet_replace-masse-remplacer-chaines-autres-seule-operation_296.aspx#966

copie le code sans l'exemple, à utiliser comme ceci

Private Sub UserForm_Click()
    Dim s As String, a(0) As String, b(0) As String
    a(0) = "REF"
    b(0) = vbNullString
    s = MultiReplace("REF Prefecture", a, b)
    MsgBox "_" & s & "_"
End Sub


++
[hr]
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
19 nov. 2009 à 19:52
Re...

Qu'est encore cette histoire ?
Elle m'"a conduit à mettre en route mon poprtable (qui a Excel, lui...) pour tester ce "machin" ...
MsgBox Replace("REF Prefecture", "REF", "", , , vbBinaryCompare)

me retourne bien "Prefecture" ...
Excel 2007.

mais je suis certain (ne m'oblige pas à mettre une autre machine en route pour rien... hein...) que toute version d'Excel admettant VBA me retournera la même chose !
C'est probablement ailleurs que t'as fait une co....ie (ou alors tu as utilisé une syntaxe différente de celle que tu montres !)
0
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
19 nov. 2009 à 23:51
Attends si je n'avais pas rencontré le pb je ne serais pas venue poser la question ici!

Je ne travaille pas sous Excel mais sous access. J'utilise un tableau de chaine de caractères dynamique et ensuite j'appelle la fonction Replace sur chaque élément du tableau.

En mettant un point d'arrêt dans mon code je me rends compte que dans un mot où le mot ref apparait (en minuscules) il est aussi remplacé par une chaine vide.

Il est vrai que quand j'ai utilisé la fonction avec l'exemple que j'ai donné ça me retourne bien prefecture !

mais dans le tableau dynamique il me remplace le mot ref!!!!!! c'est à se taper la tête contre le mur!
0
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
20 nov. 2009 à 11:12
ça marche maintenant

Merci!!
0
cs_jcq Messages postés 211 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 janvier 2010
20 nov. 2009 à 11:24
Une explication du pourquoi ça fonctionne aidera certainement d'autre personnes ???

Bart-Rennes
La vie est courte, profitez-en !
Contrôles de bouton et frame en ActiveX et WinForm .NET sur http://www.namtuk.com/FR/DotNet_bouton_my_command_button.aspx
0
misstickrii Messages postés 12 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
20 nov. 2009 à 11:32
J'ai honte

J'avais lu dans le msdn que la valeur par défaut de vbCompare de la fonction replace était vbBinaryCompare. Du coup, même si je ne l'avais pas précisée dans ma fonction j'ai pensé qu'on avait la même syntaxe.

Aprés avoir précisé vbBinaryCompare je n'ai plus eu le pb.

Voilà!

Mercii
0
cs_jcq Messages postés 211 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 janvier 2010
20 nov. 2009 à 12:07
Ah oui c'est la loose


Bart-Rennes
La vie est courte, profitez-en !
Contrôles de bouton et frame en ActiveX et WinForm .NET sur http://www.namtuk.com/FR/DotNet_bouton_my_command_button.aspx
0