IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Replace() buguée ? [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut Replace() buguée ?
    Bonjour à tous,

    Sur 2010 avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        Dim tmp As String, debut As Long
        tmp = "CUMUL : 135 022,05 4 000,00 123 456,78"
        debut = 8
        tmp = Replace(tmp, " ", "|", debut, 1, vbTextCompare)
    End Sub
    je m'attend à obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "CUMUL :|135 022,05 4 000,00 123 456,78"
    or j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "|135 022,05 4 000,00 123 456,78"
    Pour Start l'aide dit bien : Position dans l'argument expression où la recherche de sous-chaîne doit commencer.,
    pas qu'il va tout dégager... C'est moi qui interprète mal ?
    Qu'en pensez-vous ?
    Sinon je ferais autrement mais ça m'intrigue n'ayant rien vu là-dessus. Et puis 1 ligne c'est mieux que 5...
    Le but, vous l'aurez deviné, est de placer des séparateurs entre des décimaux avec séparateurs de millier gênants
    eric

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour eriic
    Fais comme moi : à mon âge, j'ai le temps de lire la rubrique jusqu'à la fin.
    Tu y verras ceci :
    Remarques
    La valeur renvoyée par la fonction Replace est une chaîne, une fois les substitutions effectuées, qui commence à la position spécifiée par l'argument start et se termine à la fin de la chaîne expression. Il ne s'agit pas d'une copie de la chaîne d'origine du début à la fin.
    Il te faut donc concaténer pour parvenir à tes fins.
    Ou, pour un seul caractère, y aller ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     tmp = "CUMUL : 135 022,05 4 000,00 123 456,78"
        Mid(tmp, 8, 1) = "|"
        MsgBox tmp
    Amitiés

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 244
    Par défaut
    hello,

    Effectivement, j'ai vu un exemple où l'on voit bien que le paramètre start conditionne aussi le début de la chaîne de sortie :
    Replace ("alligator", "a", "z", 2 ) – This statement will result into “lligztor” as here the Replace statement starts searching for character ‘a’ after the second position in the source string and then replaces it with ‘z’ character.
    Question bête : pourquoi ne fais-tu pas un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp = Replace(tmp, ": ", ":|")
    ?

    Ami calmant J.P

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    On voit tout simplement là la différence existant entre le regard et intérêts anglo-saxons et latins.
    L'anglo-saxon a bâti une fonction qui extrait une chaîne A d'une chaîne B en la modifiant comme il l'entend. Il n'a pas cherché (moins intéressé) à modifier une chaîne A.
    La fonction Replace est donc avant tout une fonction d'extraction.
    Le Latin, lui, y verrait d'autres opportunités, que l'anglo-saxon n'est pas intéressé à saisir.

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par unparia Voir le message
    On voit tout simplement là la différence existant entre le regard et intérêts anglo-saxons et latins.
    L'anglo-saxon a bâti une fonction qui extrait une chaîne A d'une chaîne B en la modifiant comme il l'entend. Il n'a pas cherché (moins intéressé) à modifier une chaîne A.
    La fonction Replace est donc avant tout une fonction d'extraction.
    Le Latin, lui, y verrait d'autres opportunités, que l'anglo-saxon n'est pas intéressé à saisir.
    Pas vraiment non. C'est plutôt la normalité des opérations sur des chaînes dans VB. Encore que dans VB.net, il y ait moyen de le faire autrement. Dans VB, les opérations sur les chaînes se font presque systématiquement sur une ou des copies de la chaîne d'origine.

    Sauf horreur de ma part, si les paramètres de début et de fin ve sont pas renseignés, replace ramène toute la chaîne

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour cmarcotte
    Sauf horreur de ma part, si les paramètres de début et de fin ve sont pas renseignés, replace ramène toute la chaîne
    bien évidemment, mais il s'agit alors d'une extraction avec modification à compter du 1er caractère et non d'un remplacement dans la chaîne
    Amitiés

    EDIT : pour aider à comprendre cet esprit, j'invite à s'interroger (par analogie) sur le distinguo fait entre les fonctions worksheetfunction.replace et worksheetfunction.substitute.
    Si les deux ont été créées (alors que l'une aurait suffi si la chaine de départ devait toujours être extraite intégralement), c'est qu'il y a une raison et une logique différentes

    La fonction Replace, telle que conçue, permet par exemple dans certains cas de figure, conjuguée à split, d'obtenir un array plus "agile" (contenant l'éclatement d'une seule partie de la chaîne de départ).

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il ne faut pas perdre de vu qu'un microprocesseur n'est rien d'autre qu'un grain de sable doper à l'arsenic (silicium).

    Il n'est capable que de générer des tableaux!

    Ainsi la substitution dans un tableau ne peut ce faire que par réécrire d'une partie du tableau par un valeur de tableau de taille identique.

    Un mid par définition est une extraction d'une partie du tableau.

    Si via mon mid je veux remplacer 1 caractères par 2 c'est impossible.

    Il n'existe pas de méthode pour replace un valeur par une autre dans un même variable

    Le replace n'est rien d'autre que la concaténation d'un split dans un autre tableau de taille différente!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ODBC] Fonction Replace en ODBC
    Par Alexandre T dans le forum Access
    Réponses: 4
    Dernier message: 10/01/2007, 11h02
  2. problème avec "replace"
    Par lilipuce83 dans le forum ASP
    Réponses: 3
    Dernier message: 26/05/2004, 16h42
  3. [C#] Methode Replace
    Par pc152 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/05/2004, 17h17
  4. Prob d'execution de REPLACE *** INTO
    Par Mystman dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/04/2004, 16h41
  5. Cherche Fonction du style replace...
    Par sdchamplas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/03/2003, 13h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo