Mapping de mots dans des cellules

Bonjour,

Je souhaite remplacer du texte dans une cellule à partir d'un tableau contenant un mapping, le problème c'est que la cellule contient plusieurs mots à remplacer, voir exemple ci dessous

remplacer mot1, 2, 3 par text1, 2, 3 à partir du tableau de mapping G1:H3 -> le résultat sera dans B1 et B2 respectivement

ABCDEFGH
1mot1

mot2

mot3

texte1

texte2

texet3

mot1texte1
2mot3

mot2

texte3

texte2

mot2texte2
3mot3texte3
4
5

Bonjour,

Vous sous entendez quoi avec mapping ?

=JOIN(CAR(10);;H1:H3)

Bonne Journée

mapping c'est le tableau qui affiche l'équivalent du mot a remplacer, dans cet exemple

Mot1 = texte1

Mot2 = texte2

Mot3 = texte3

il y a cette équation

=SUBSTITUE(SUBSTITUE(SUBSTITUE(A2;"Mot 1";"Texte 1");"Mot 2";"Text 2");"Mot 3";"Text 3")

mais elle n'est dynamique, et elle est limité à 3 mots, à la base, mon tableau de mapping se compose de 500 mots voir plus

Bonjour,

J'ai fait un test avec Google sheets

la fonction substitue() n'est pas limitée à 3, mais la recherche est par contre sensible à la casse.

Et avec ArrayFormula une seule sur fonction fait le job

voir le fichier

@Gilbert_RGI

je viens de tester ArrayFormula mais j'ai un message d'erreur,

Dans le googlesheets envoyé la fonction est multipass (en FR) mais qui devrait etre compatible (en EN) !

https://docs.google.com/spreadsheets/d/12iZqrWda_o0oTn0rC8f4cBcyl13brrDWKgwLnuBhNzg/edit#gid=0

capture d ecran 2021 10 14 210831

voir le partage car l'accès n'est pas autorisé

Partage ton document comme suit https://www.sheets-pratique.com/fr/cours/partage

La function multipass est une fonction personnalisée (voir le code dans l'éditeur de script)

voilà ce que ça donne sur l'image suivante.

ArrayFormula est utilisé avec substitue() ou avec REGEXREPLACE()

20211015 091610 001

Bonjour Gilbert

éventuellement

=multipassarray(A2:A6;$G$101:$G$121;$H$101:$H$121)

en enlevant les virgules du texte initial

function multipassarray(text, ChangeFrom, ChangeTo) {
  ChangeFrom = ChangeFrom.map (String);
  var re = new RegExp(ChangeFrom.join('|'), 'g');
  var result=[]
  var textes = text.join().split(',')
  textes.forEach(function (texte){
    result.push(texte.replace(re, function (match) {return ChangeTo[ChangeFrom.indexOf(match)];}))
  })
  return result
}

@ Mike

Cette méthode fait que chaque changement , fait changer aussi de cellule

Ce n'est peut-être pas le résultat attendu

Rechercher des sujets similaires à "mapping mots"