Bonsoir Nonno , LouReeD ,
Une autre macro qui utilise le fait que les tableaux sont des tableaux structurés. On ne cherche que dans la colonne de titre "Références" dans chacun des trois tableaux. Cliquez sur le bouton Hop !.
Le code est dans module1. Il est un tout petit peu commenté.
Sub Remplacer()
Dim Quoi$, Par$, ligne&, colonne&, n&, x
' Vérification des deux termes (terme à remplacer et terme de remplacement). Aucun ne doit ni vide
' ni composé exclusivement d'espaces.
Quoi = Sheets("Stock").[d2]: Par = Sheets("Stock").[e2]
If Trim(Quoi) = "" Or Trim(Par) = "" Then
MsgBox "Soit le code à emplacer est vide soit le code de remplacement est vide !" & vbLf & _
"Aucun remplacement ne sera tenté => Echec.", vbCritical
Exit Sub
End If
' On ne remplace que si les deux termes sont différents
If LCase(Quoi) = LCase(Par) Then
MsgBox "Les deux références sont les mêmes" & vbLf & "Aucun remplacement ne sera donc fait.", vbCritical
Exit Sub
End If
' Boucles de remplacement
For Each x In Split("Stock;Source;Catalogue", ";") ' pour chaque feuile concernée
' Numéro de colonne du tableau structuré dont le titre est "Références"
colonne = Sheets(x).ListObjects(1).ListColumns("Références").Index
' Ligne de cette colonne ayant pour valeur Quoi (si la valeur qQuoi est absente alors on renvoie zéro)
ligne = Application.IfError(Application.Match(Quoi, Sheets(x).ListObjects(1).ListColumns(colonne).DataBodyRange, 0), 0)
Do While ligne > 0 ' Tant qu'il y a encore une valeur égale à Quoi (ligne >0)
' On incrémente le nombre n de remplacement et on remplace la valeur
If ligne > 0 Then n = n + 1: Sheets(x).ListObjects(1).ListColumns(colonne).DataBodyRange(ligne) = Par
' On recherche la valeur Quoi suivante
ligne = Application.IfError(Application.Match(Quoi, Sheets(x).ListObjects(1).ListColumns(colonne).DataBodyRange, 0), 0)
Loop
Next x
MsgBox Format(n, "#,##0") & " remplacement(s) effectué(s)", vbInformation
End Sub
...