XL 2016 Remplacement d'une valeur de cellule par une autre

Fabrice0501

XLDnaute Nouveau
Bonjour,

j'aurais besoin d'un peu d'aide.

Je travail dans une charcuterie et nous faisons de la vente en ligne via un site de vente.

Celui ci nous permet de télécharger un fichier récapitulatif des commandes à traiter. (feuille 1 "Orders")


Donc je souhaiterais que lorsque je place ce fichier dans un fichier excel que j'ai fait pour trier mes commandes,
la colonne L "SKU producteur" soit remplacer par les valeurs correspondante en feuille 2 "référence".

Exemple:
1ère ligne Colonne L : Boeuf600-1

Remplacé par la valeur Colonne B correspondante du fichier Feuille 2 "Référence" correspondante

Donc pour la valeur Boeuf600-1 : Viande

Jusqu’à présent je le fait en formule, mais ce serai plus simple en vba pour éviter de coller les formules à chaque fois que j'importe ce fichier (plusieurs fois par jour), mais je coince un peu.

En espérant être claire dans mes explication

Merci d'avance
 

Pièces jointes

  • Orders.xlsx
    270.2 KB · Affichages: 7
Solution
Bonjour @Fabrice0501 :), @laurent950 ;),
Je l'ai fait, je le joins.
VB:
Option Explicit

Sub remplacer()
   Dim dl As Long, cel As Range, Valeur As String, dl1 As Long, i As Long, Rng As Range, Rgf As Range
   dl1 = Sheets("Référence").Range("A" & Rows.Count).End(xlUp).Row
   Set Rng = Sheets("Référence").Range("A1:B" & dl1)
   With Sheets("orders")
      dl = .Range("L" & Rows.Count).End(xlUp).Row
      For i = 2 To dl
         Valeur = .Range("L" & i).Value
         For Each cel In Rng
            Set Rgf = Rng.Find(Valeur, , xlValues, xlPart)
            If Not Rgf Is Nothing Then
               .Range("L" & i).Value = Sheets("Référence").Range("B" & Rgf.Row)
               Exit For
            End If
         Next...

Fabrice0501

XLDnaute Nouveau
Bonjour Fabrice0501,

Récapitulatif des commandes à traiter. (feuille 1 "Orders")
placer (feuille 1 "Orders dans excel pour trier mes commandes,
la colonne L "SKU producteur" ---->> Remplacer par les "Référence" correspondante feuille 2
Exemple:
1ère ligne Col L : Boeuf600-1 ---->> Remplacer par les "Viande" corresp Col B feuille 2
Solution :
Insérer une colonne M (Correspondance) dans feuille 1 "Orders") Puis copier cette formulle
Exemple:
1ère ligne Col L : Boeuf600-1 ---->> Remplacer par les "Viande" corresp Col B feuille 2
=RECHERCHEV(L2;Référence!$A$2:$B$214;2;FAUX)


Bonjour,
merci pour ta réponse.

C'est justement ce que je fais pour le moment.

Mais vu que je télécharge mon fichier orders du site de commande plusieurs fois par jour,
je cherche justement a le faire via vba pour éviter de coller ces formules a chaque fois.
 

laurent950

XLDnaute Accro
Bonjour Fabrice0501,

Récapitulatif des commandes à traiter. (feuille 1 "Orders")
placer (feuille 1 "Orders dans excel pour trier mes commandes,
la colonne L "SKU producteur" ---->> Remplacer par les "Référence" correspondante feuille 2
Exemple:
1ère ligne Col L : Boeuf600-1 ---->> Remplacer par les "Viande" corresp Col B feuille 2
Solution :
Colonne L (SKU Producteur) dans feuille 1 "Orders") Puis copier cette formulle
Exemple:
1ère ligne Col L : Boeuf600-1 ---->> Remplacer par les "Viande" corresp Col B feuille 2
=RECHERCHEV(N2;Référence!$A$2:$B$214;2;FAUX)

Ou passer par une procédure VBA.

VB:
Sub Correspondance()
For i = 2 To Cells(65536, 12).End(xlUp).Row
    For J = 2 To Sheets("Référence").Cells(65536, 1).End(xlUp).Row
        If Cells(i, 12) = Sheets("Référence").Cells(J, 1) Then
            Cells(i, 12) = Sheets("Référence").Cells(J, 2)
        End If
    Next J
Next i
End Sub
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour @Fabrice0501 :), @laurent950 ;),
Je l'ai fait, je le joins.
VB:
Option Explicit

Sub remplacer()
   Dim dl As Long, cel As Range, Valeur As String, dl1 As Long, i As Long, Rng As Range, Rgf As Range
   dl1 = Sheets("Référence").Range("A" & Rows.Count).End(xlUp).Row
   Set Rng = Sheets("Référence").Range("A1:B" & dl1)
   With Sheets("orders")
      dl = .Range("L" & Rows.Count).End(xlUp).Row
      For i = 2 To dl
         Valeur = .Range("L" & i).Value
         For Each cel In Rng
            Set Rgf = Rng.Find(Valeur, , xlValues, xlPart)
            If Not Rgf Is Nothing Then
               .Range("L" & i).Value = Sheets("Référence").Range("B" & Rgf.Row)
               Exit For
            End If
         Next
      Next i
   End With
   MsgBox "Traitement terminé!", vbInformation, "TRAITEMENT"
End Sub
Bonne journée.
 

Fabrice0501

XLDnaute Nouveau
Bonjour Fabrice0501,

Récapitulatif des commandes à traiter. (feuille 1 "Orders")
placer (feuille 1 "Orders dans excel pour trier mes commandes,
la colonne L "SKU producteur" ---->> Remplacer par les "Référence" correspondante feuille 2
Exemple:
1ère ligne Col L : Boeuf600-1 ---->> Remplacer par les "Viande" corresp Col B feuille 2
Solution :
Colonne L (SKU Producteur) dans feuille 1 "Orders") Puis copier cette formulle
Exemple:
1ère ligne Col L : Boeuf600-1 ---->> Remplacer par les "Viande" corresp Col B feuille 2
=RECHERCHEV(N2;Référence!$A$2:$B$214;2;FAUX)

Ou passer par une procédure VBA.

VB:
Sub Correspondance()
For i = 2 To Cells(65536, 12).End(xlUp).Row
    For J = 2 To Sheets("Référence").Cells(65536, 1).End(xlUp).Row
        If Cells(i, 12) = Sheets("Référence").Cells(J, 1) Then
            Cells(i, 12) = Sheets("Référence").Cells(J, 2)
        End If
    Next J
Next i
End Sub


Encore merci de m'aider

Ca correspond exactement a ce que je cherche.

J'ai cependant une petite coquille,
comment faire pour le mettre a la suite de ce code pour tout effectuer en même temps
(il s'agit d'un code qui me trie une autre colonne)


VB:
Dim c As Range, datas, lig As Long, i As Long

    With Sheets("Pour de bon")

        Set c = .Rows(1).Find("SKU Offre", , xlValues, xlWhole)

        If c Is Nothing Then

            MsgBox "Champ SKU Offre non trouvé": Exit Sub

        Else

            datas = c.Offset(1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row)

            For lig = 1 To UBound(datas) - 1

                i = 0

                Do

                    i = i + 1

                Loop Until Mid(datas(lig, 1), i, 1) Like "#" Or i = Len(datas(lig, 1))

                If i < Len(datas(lig, 1)) Then datas(lig, 1) = Left(datas(lig, 1), i - 1)

            Next lig

        End If

        c.Offset(1).Resize(UBound(datas)) = datas

      

        Set c = .Rows(1).Find("Details", , xlValues, xlWhole)

        If c Is Nothing Then

            MsgBox "Champ Details non trouvé": Exit Sub

        Else

            datas = c.Offset(1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row)

            For lig = 1 To UBound(datas) - 1

                i = InStr(datas(lig, 1), " (")

                If i > 0 Then datas(lig, 1) = Left(datas(lig, 1), i - 1)

            Next lig

        End If

        c.Offset(1).Resize(UBound(datas)) = datas
 

Patrice33740

XLDnaute Impliqué
Multipost !

Je t'ai donné une solution hier ici : Remplacement d'une valeur de cellule par une autre - Forum
Et j'y ai répondu ce matin à ton problème de référence !

La perversité de cette démarche, c'est que tu ne nous informes pas que tu as posté sur d'autres forums !
C'est un manque de respect envers tous les bénévoles qui te consacrent de leur temps pour résoudre ton problème.
Tu les laisses se décarcasser dans leur coin, sans leur donner la possibilité de consulter les réponses, souvent très intéressantes, des autres forums.
Cela aboutit généralement à leur faire perdre du temps qu'ils pourraient consacrer à d'autres personnes qui eux aussi ont besoin d'aide.

La Macro :
VB:
' Etablir une référence à Microsoft Scripting Runtime
Option Explicit
Sub RemplacerSKU()
Dim d As New Dictionary
Dim r As Range
Dim t As Variant
Dim i As Long
   t = Worksheets("Référence").Range("A1").CurrentRegion.Offset(1).Value
   For i = LBound(t) To UBound(t) - 1: d(t(i, 1)) = t(i, 2): Next i
   Set r = Worksheets("Orders").Range("A1").CurrentRegion.Columns("L").Offset(1)
   t = r.Value
   For i = LBound(t) To UBound(t) - 1
    If d.Exists(t(i, 1)) Then t(i, 1) = d(t(i, 1))
   Next i
   r.Value = t
End Sub
 

Discussions similaires

Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 720
Messages
2 081 902
Membres
101 834
dernier inscrit
Jeremy06510