Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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;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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…