Rechercher et remplacer en masse dans une cellule

Bonjour à tous,

Je souhaite remplacer en masse des listes de données dans des cellules, par des données présentes dans un autre tableau.

Par exemple, des cellules contenant des listes :

A1 : 1,2,4

A2 : 1,5

A3 : 2,3,4,5

et le tableau comporte les données :

1 | Chien

2 | Chat

3 | Souris

4 | Poisson

5 | Oiseau

Je souhaite que les listes dans les cellules deviennes :

A1 : Chien,Chat,Poisson

A2 : Chien,Oiseau

A3 : Chat,Souris,Poisson,Oiseau

J'ai testé la macro fournie par Banzai64 dans le topic https://forum.excel-pratique.com/viewtopic.php?t=47811, qui semblait correspondre à mon besoin, mais les résultats que j'obtiens ne sont pas cohérents (Est-ce possiblement car le nombre de cellules à traiter et la liste des valeurs de remplacement ne sont pas de la même longueur ?)

Vous trouverez en pièce jointe un exemple de mon fichier.

Merci d'avance pour votre aide sur ce sujet,

bonjour,

une proposition

Sub aargh()
    Set ws1 = Sheets("Listes à remplacer")
    Set ws2 = Sheets("Valeurs remplacement") 'trié en ordre croissant sur numéro
    For i = 31 To 2 Step -1
        ws1.Range("A1:A100").Replace ws2.Cells(i, 1).Value & "", ws2.Cells(i, 2).Value, lookat:=xlPart
    Next i
End Sub

Merci h2so4 pour ton retour,

J'ai exécuté la macro sur le fichier exemple et les résultats semblent cohérents.

Cependant, les remplacements sont également fait dans l'onglet "Valeurs remplacement".

En regardant le code qui tu m'a fourni, je n'arrive pas à comprendre pourquoi.

En complément, peux-tu s'il te plaît me confirmer que si je souhaite adapter ce code à mon fichier global :

  • Je dois agrandir le range ws1.Range("A1:A100") si j'ai plus de 100 cellules à traiter
  • Je dois agrandir le imax si mon nombre de valeurs de remplacement est supérieur à 30 (je devrais alors prendre imax = nb valeur +1)

Merci pour tes retours,

re-bonjour,

voici le code adapté pour s'ajuster aux nombres de données présentes en feuil1 et feuil2

Sub aargh()
    Set ws1 = Sheets("Listes à remplacer")
    dlws1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    Set ws2 = Sheets("Valeurs remplacement")
    dlws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
    sav = ws2.Range("A1").Resize(dlws2, 2)
    ws2.Range("A1").Resize(dlws2, 2).Sort key1:=ws2.Range("A1"), order1:=xlDescending, Header:=xlYes 'trie en ordre décroissant sur le numéro
    For i = 2 To dlws2
        ws1.Range("A1").Resize(dlws1, 1).Replace ws2.Cells(i, 1).Value & "", ws2.Cells(i, 2).Value, lookat:=xlPart
    Next i
    ws2.Range("A1").Resize(dlws2, 2) = sav
End Sub

le tri descendant est nécessaire pour éviter que le texte correspondant aux petits nombres ne vienne remplacer les nombres contenant ces petites nombres (exemple 1 coucou remplacerait 11 par coucoucoucou), donc on remplace d'abord les grandes valeurs.

Pour le problème du remplacement dans valeurs remplacement, je ne l'ai pas constaté.

15fichier-sample.xlsm (14.37 Ko)

Merci beaucoup pour ton aide, ça fonctionne parfaitement !

Rechercher des sujets similaires à "rechercher remplacer masse"