VBA chaines de caractères Replace Respectant la casse

Signaler
Messages postés
12
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
20 novembre 2009
-
Messages postés
211
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 janvier 2010
-
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

Messages postés
211
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 janvier 2010

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
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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 !!!
Messages postés
12
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
20 novembre 2009

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
Messages postés
211
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 janvier 2010

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
Messages postés
12
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
20 novembre 2009

Je suis bien d'accord sur VBA
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
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]
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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 !)
Messages postés
12
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
20 novembre 2009

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!
Messages postés
12
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
20 novembre 2009

ça marche maintenant

Merci!!
Messages postés
211
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 janvier 2010

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
Messages postés
12
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
20 novembre 2009

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
Messages postés
211
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 janvier 2010

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