Monsieur Excel
Pour tout savoir faire sur Excel !

14 septembre 2012

Un bug de substitue()

La fonction substitue() est censée remplacer toutes les occurrences d’une chaîne donnée de caractères par une autre chaîne donnée.

En fait, les choses ne sont pas si simples que cela…

Dans les trois exemples ci-dessous, nous avons la même formule entrée en B1, puis recopiée vers le bas, dont le texte est reproduit en colonne C.



Pour la ligne 1, aucun problème : les trois occurrences de « 0110 » sont bien remplacées par « 0a0 »…

En ligne 2, on constate que seules la première et la troisième occurrence sont modifiées.

En ligne 3, seules la première et la seconde occurrence sont modifiées.

Cela est dû à une sorte de bug de conception (ou de programmation ?) qui fait que la partie du texte qui a été modifiée ne peut plus concourir à une seconde modification. Dans le cas de la cellule A2, puisque le « 0110 » des quatre premiers caractères a été remplacé par « 0a0 », c’est uniquement à partir du cinquième caractère de A2 que les tentatives de remplacement de chaîne reprennent, ce qui fait que la seconde occurrence de « 0110 » n’est plus reconnue comme telle et modifiée, puisqu’elle démarre avec le « 0  » en quatrième position qui n’est plus considéré comme candidat…

Et c’est pour cette raison que, pour la chaîne en A3, les deux premiers remplacements attendus ont bien lieu, mais que le troisième est loupé…

En conclusion, faites bien attention quand vous utilisez la fonction substitue() : il faut bien la connaître pour l’utiliser sans tomber dans ses pièges…

1 Commentaire(s):

  • Bonjour,

    Je ne vois pour ma part aucun bug. Il n'y a aucune raison que cette formule soit récursive.

    Il se passera exactement la même chose si vous utilisez la fonction "rechercher et remplacer" (Ctrl+H) d'Excel.

    Il en va de même pour n'importe quel éditeur de texte.

    Exemple, quand j'effectue un remplacement de " " par " ". je sais très bien qu'il pourra y avoir plus d'un "espace" dans mon texte final.

    Benjamin.

    By Blogger Benji, sur 11:37 AM  

Enregistrer un commentaire

<< Accueil