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

Microsoft 365 Substitue multiples

  • Initiateur de la discussion Initiateur de la discussion Clem42
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
Bonjour MaPomme, Clem,
Ce serait dommage de ne pas exploiter les fonctions perso, c'est aussi puissant qu'utile.
un tuto à ce sujet :
 
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
 
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

Dernière édition:
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
800
Réponses
5
Affichages
377
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…