Microsoft 365 Substitue multiples

Clem42

XLDnaute Nouveau
Bonjour

J'ai une formule imbriquant de multiples substitue qui fonctionne mais celle-ci devient illisible. J'aurais voulu savoir si il était possible de remplacer cela par une autre formule qui utiliserais une liste de correspondance permettant d'indiquer les chaines à remplacer par les autres. Ce serait une sortie de substitue "matriciel" : SUBSTITUE(A1,C:C,D:D;1). La colonne C contenant les chaines à remplacer et la colonne D les nouvelles.

Merci d'avance
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Clem42,

Avec une petite fonction personnalisée :
Remplace(cellule As Range, quoi As Range, par As Range, Optional Casse)
  • cellule est la cellule contenant le texte à modifier
  • quoi est la plage en colonne des textes à remplacer
  • par est la plage en colonne des textes de remplacement
  • Casse : si présent (égal à n'importe quoi) alors on tient compte de la casse (majuscule/minuscule)
  • Casse : si absent, on ne tient pas compte des majuscules et minuscules
Voir formule en D4 et D9.

Le code de la fonction est dans module1 :
VB:
Function Remplace(cellule As Range, quoi As Range, par As Range, Optional Casse) As String
Dim typecomp As Long, x As String, tq, tp, s, i&
   If IsMissing(Casse) Then typecomp = vbTextCompare Else typecomp = vbBinaryCompare
   s = cellule.Cells(1, 1)
   tq = quoi.Columns(1): tp = par.Columns(1)
   If Not IsArray(tq) Then ReDim tq(1 To 1, 1 To 1): tq(1, 1) = quoi.Value
   If Not IsArray(tp) Then ReDim tp(1 To 1, 1 To 1): tp(1, 1) = par.Value
   For i = 1 To UBound(tq)
      s = Replace(s, tq(i, 1), tp(i, 1), , , typecomp)
   Next i
   Remplace = s
End Function

edit : v1a
 

Pièces jointes

  • Clem42- Substituer à la suite- v1a.xlsm
    18.3 KB · Affichages: 16
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour MaPomme, Clem,
Ce serait dommage de ne pas exploiter les fonctions perso, c'est aussi puissant qu'utile.
un tuto à ce sujet :
 

Clem42

XLDnaute Nouveau
Re MaPomme

J'ai essayé de refaire ça à ma "manière", cela fonctionne mais pas dans le cas ou je l'utilise de manière imbriquée alors que la tienne fonctionne. Pourrais-tu m'indiquer l'erreur que j'ai fait.

Function SUBSTITUE_MULTIPLES(texte As Range, plage_ancien_texte As Range, plage_nouveau_texte As Range)
Dim i As Long, nouveau_texte As String

nouveau_texte = texte(1, 1)
If (plage_ancien_texte.Rows.Count = plage_nouveau_texte.Rows.Count _
And plage_ancien_texte.Columns.Count = plage_nouveau_texte.Columns.Count _
And (plage_ancien_texte.Columns.Count = 1 Or plage_ancien_texte.Rows.Count = 1)) Then
If (plage_ancien_texte.Columns.Count = 1) Then
For i = 1 To plage_ancien_texte.Rows.Count
nouveau_texte = Replace(nouveau_texte, plage_ancien_texte(i, 1), plage_nouveau_texte(i, 1), , , vbTextCompare)
Next
ElseIf (plage_ancien_texte.Rows.Count = 1) Then
For i = 1 To plage_ancien_texte.Columns.Count
nouveau_texte = Replace(nouveau_texte, plage_ancien_texte(1, i), plage_nouveau_texte(1, i), , , vbTextCompare)
Next
End If
SUBSTITUE_MULTIPLES = nouveau_texte
End If
End Function
 

zebanx

XLDnaute Accro
Bonsoir à tous

@mapomme ;)
Merci déjà pour cette super fonction, utile et bien agréable à utiliser.
Etant souvent embêté lors d'extraction avec des chiffres comprenant des espaces (*), je suis reparti de cette fonction pour essayer de traiter ce point.
Pour être plus précis, quand on extrait 1 022.12 qui n'est pas reconnu comme chiffre, j'utilise habituellement une formule de type substitue() avec chr(160) à remplacer par chr(32).
D'où une tentative pour reprendre cette configuration.
Tu me diras ce que tu en penses, à simplifier ou à modifier peut-être.

Bonne soirée
zebanx

(*) souvent rencontré lors d'extractions de données banc***
 

Pièces jointes

  • Pour mapomme_udf.xlsm
    20.6 KB · Affichages: 5
Dernière édition:

Clem42

XLDnaute Nouveau
Voici le fichier.

Petite correction, dans les 2 cas cela ne marche pas.... Le résultat attendu est en colonne F. J'ai réussi à à avoir un résultat en découpant ma formule en 2 en passant par la colonne intermédiaire C. Par contre, lorsque j'essaie de faire la même chose dans une seule cellule, j'obtiens le message #VALEUR...
 

Pièces jointes

  • SUBSTITUE_MULTIPLES_IMBRIQUES.xlsm
    23.3 KB · Affichages: 10

Discussions similaires

Statistiques des forums

Discussions
314 499
Messages
2 110 247
Membres
110 711
dernier inscrit
chmessi