Remplace texte par autre VBA

Bonjour à tous,

Je voudrais réaliser une macro qui remplace un texte si une correspondance est trouvé par rapport à une BDD

- Dans la Feuil1 j'ai une liste que je voudrais comparer à une liste de la feuil2 si une correspondance est trouvée je souhaiterais qu'il remplace la valeur de la feuil1 par l'offset de 1 vers la droite de la feuil2.

Et si aucune correspondance on passe à la ligne suivante.

J'ai réalisé ce code, mais je n'arrive pas lui demander qu'il cherche dans tout le" tableau" sans lui spécifier par exemple "Tableau(i,1)".

Sub RechercheDansTableau()
Dim i As Integer

Derlign = Worksheets("Feuil1").Range("C" & Application.Rows.Count).End(xlUp).Row
Tableau = Worksheets("Feuil2").Range("D1:E53")

For i = 1 To Derlign
    If Worksheets("Feuil1").Cells(i, 5).Value = Tableau(1) Then
        Worksheets("Feuil1").Cells(i, 5).Value = Tableau(2)
    End If
Next

Merci à vous.

Sub RechercheDansTableau()

Dim i As Integer

Derlign = Worksheets("Feuil1").Range("C" & Application.Rows.Count).End(xlUp).Row

Tableau = Worksheets("Feuil2").Range("D1:E53")

For i = 1 To Derlign

If Worksheets("Feuil1").Cells(i, 3).Value = Worksheets("Feuil2").Cells(i, 4).Value Then

Worksheets("Feuil1").Cells(i, 3).Value = Worksheets("Feuil2").Cells(i, 5).Value

End If

Next

End Sub

Merci benibeno,

Ce code fonctionnera à la condition que les 2 bases soit dans le même ordre croissant ou décroissant, je ne peux toucher a cet ordre donc c'est pourquoi je suis obligé de rechercher dans tout le tableau pour chaque ligne recherchée.

Bonjour Florian,

Je propose :

Sub RechercheDansTableau()
Dim i As Integer
Dim oRange As Excel.Range
Dim sValue As Variant
Derlign = Worksheets("Feuil1").Range("C" & Application.Rows.Count).End(xlUp).Row
tableau = Worksheets("Feuil2").Range("D1:E53")

For i = 1 To Derlign
    Set oRange = Worksheets("Feuil1").Cells(i, 3)
    sValue = WorksheetFunction.VLookup(oRange.Value, tableau, 2)
    oRange.Value = sValue
Next
End Sub

Je pense avoir trouvé ce code à l'air de fonctionner :

Sub Cherche()
'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

'********* à adapter ***********
'affectation de valeurs aux variables :
Derlign = Worksheets("Feuil1").Range("C" & Application.Rows.Count).End(xlUp).Row
For i = 1 To Derlign
    Valeur_Cherchee = Worksheets("Feuil1").Cells(i, 3).Value
    'dans la  colonne de la feuille active
        Set PlageDeRecherche = Worksheets("Feuil2").Columns(4)
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
    Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
    If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
Else
    'ici, traitement pour le cas où la valeur est trouvée
    AdresseTrouvee = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole).Offset(rowOffset:=0, columnOffset:=1).Value
    Worksheets("Feuil1").Cells(i, 3).Value = AdresseTrouvee
End If
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
Next
End Sub

Merci GVIALLES,

Je viens de voir ton message, sa fonctionne sauf dans le cas ou admettons j'ai la valeur "ZZZZZ" il mais "Zorro" parce que la première lettre est la même, je souhaiterais que si il n'y a pas une correspondance exacte rien ne se passe :

Bonjour Florian,

Je propose :

Sub RechercheDansTableau()
Dim i As Integer
Dim oRange As Excel.Range
Dim sValue As Variant
Derlign = Worksheets("Feuil1").Range("C" & Application.Rows.Count).End(xlUp).Row
tableau = Worksheets("Feuil2").Range("D1:E53")

For i = 1 To Derlign
    Set oRange = Worksheets("Feuil1").Cells(i, 3)
    sValue = WorksheetFunction.VLookup(oRange.Value, tableau, 2)
    oRange.Value = sValue
Next
End Sub

à modifier

sValue = WorksheetFunction.VLookup(oRange.Value, tableau, 2, 0)

Florian,

Dans ce cas le code devient :

Sub RechercheDansTableau()
Dim i As Integer
Dim oRange As Excel.Range
Dim sValue As Variant
Derlign = Worksheets("Feuil1").Range("C" & Application.Rows.Count).End(xlUp).Row
tableau = Worksheets("Feuil2").Range("D1:E53")

For i = 1 To Derlign
    Set oRange = Worksheets("Feuil1").Cells(i, 3)
    sValue = ""
    On Error Resume Next
    sValue = WorksheetFunction.VLookup(oRange.Value, tableau, 2, False)
    On Error GoTo 0
    If Len(sValue) > 0 Then
        oRange.Value = sValue
    End If
Next
End Sub

Nickel, merci ça fonctionne et beaucoup plus rapide que ma macro en plus.

Encore merci et bonne soirée

Rechercher des sujets similaires à "remplace texte vba"