VBA remplace plusieurs chaînes à partir d'une liste distincte
Question
Je dois remplacer STRINGS mais jusqu'à présent, j'ai réussi à remplacer uniquement les mots.Le code passe par la colonne Description et est censé remplacer chaque séquence de la liste.L'idée est d'utiliser des abréviations (de nouvelles valeurs) plutôt que des mots complets (anciennes valeurs).
Chaque fois qu'il y a un mot, un caractère, etc. voisin (sans espace), le code échoue.Ce qui est faux?Merci!!!
Sub ReplaceWords_BUT_Need_ToReplaceStrings()
Application.ScreenUpdating = False
'This macro works with separated words only. Eliminate hyphens etc before applying this macro.
Dim r As Range, A As Range
Dim s1 As Worksheet, s2 As Worksheet, LastRow As Integer, v As String, j As Integer,
oldv As String, newv As String
LastRow = Cells(Rows.count, "A").End(xlUp).row
Set s1 = Sheets("JE_data")
Set s2 = Sheets("ListToReplace")
Set A = s1.Range("J:J").Cells.SpecialCells(xlCellTypeConstants)
For Each r In A
v = r.Value
For j = 2 To LastRow
oldv = s2.Cells(j, 1).text
newv = s2.Cells(j, 2).text
'Remplacer la fonction telle que vous l'avez utilisée est sensible à la casse.« Êtes-vous sûr que tous les mots de votre facture commencent par une majuscule ?'Si ce n'est pas le cas, utilisez plutôt la fonction v = Replace(v, oldv, newv, 1, -1, vbTextCompare).D'ACCORD.
v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
'v = Replace(v, oldv, newv)
Next j
r.Value = Trim(v)
Next r
Application.ScreenUpdating = True
End Sub
Exemple:
ListeÀRemplacer
Left column (old) Right column (new)
----------------------------------------
Invoice inv
Salary sy
Credit cr
JE_données
cr Note
cr note
INV/2712/14RF/0229/14
Invoice 1078 10
TECHNOQ01SI 2014 03288
(Note de l'éditeur : Je ne sais pas si l'exemple est correct puisqu'il a été écrit dans les commentaires)
Credit
a été remplacé par cr
et Invoice
devait être remplacé par inv
mais ce n'était pas le cas
La solution
La fonction Remplacer telle que vous l'avez utilisée est sensible à la casse.Êtes-vous sûr que tous les mots de votre facture commencent par une majuscule ?Sinon, utilisez
v = Replace(v, oldv, newv, 1, -1, vbTextCompare)
fonction à la place.