Microsoft 365 Faire correspondre une cellule à une autre

robinherold

XLDnaute Nouveau
Bonjour,

Je possède un fichier 1 "test extraction" qui correspond à une extraction que réalise mon TMS pour chaque commande d'un de mes clients.
Le fichier 2 "Exemple_livraisons" correspond à ce que le client doit recevoir de son côté pour pouvoir traiter la commande correctement.
J'aimerais que chaque champ du fichier "test extraction" se "transforme" en son champ correspondant dans le fichier "Exemple_livraisons".
Les 2 fichiers sont joints à ce message

Par exemple : "Récepissé" dans la colonne D du fichier 1 se transforme en "Réference de commande client" dans le colonne B du fichier 2.
Ou encore, "Poids" de la colonne R du fichier 1 se transforme en "Kilogramme" dans la colonne N du fichier 2.

Plusieurs précisions :
- Les colonnes E & F du fichier 1 doivent correspondre à la colonne C du fichier 2 (dans une seule cellule)
- Les colonnes G & H du fichier 1 doivent correspondre à la colonne D du fichier 2 (dans une seule cellule)
- Il faudrait aussi concaténer les colonnes L & M du fichier 1 afin qu'elles correspondent à la colonne I du fichier 2.
- "Code produit vendu" de la colonne Q du fichier 1 peut comprendre différents codes produits : CU1 & CU2 doivent correspondre à "VRAI" dans la colonne M du fichier 2, tout autre code produit, hors ces 2, là doivent correspondre à "FAUX".
- Les colonnes A & B du fichier 1 ne correspondent à rien dans le fichier 2, pas besoin d'en prendre compte.

J'espère avoir été assez clair et précis, n'hésitez pas à me poser vos questions pour vous épingler si besoin!
 

Pièces jointes

  • Exemple_livraisons.xlsx
    9.9 KB · Affichages: 6
  • test extraction.xlsx
    11.2 KB · Affichages: 5

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Vos exemples ne correspondent pas. Les données du fichier "test extraction.xlsx" ne correspondent pas à la ligne exemple de l'autre fichier. Vous ne dites pas s'il y aura plusieurs lignes à traiter.
"Nombre d'UM" = "Nombre de colis" ?
 

robinherold

XLDnaute Nouveau
Bonjour,

Vos exemples ne correspondent pas. Les données du fichier "test extraction.xlsx" ne correspondent pas à la ligne exemple de l'autre fichier. Vous ne dites pas s'il y aura plusieurs lignes à traiter.
"Nombre d'UM" = "Nombre de colis" ?
Bonjour,

Les données des 2 fichiers ne correspondent pas car il s'agit de 2 commandes tests différentes.
Il y aura effectivement plusieurs lignes à traiter, dans l'optique où il y aura plusieurs commandes à traiter.

Et oui, "Nombre d'UM" = "Nombre de colis" !

Merci pour votre réponse!
 

robinherold

XLDnaute Nouveau
Bonjour,

Merci beaucoup pour votre aide!

Il me suffit donc de copier les données des futures commandes dans la première feuille "extract_185_284_230426_0937", puis cliquer sur "Bouton 1" afin que les données se transforment pour apparaître dans la feuille "Resultat" ?
Excusez-moi, il semble que j'ai oublié de préciser que "Nombre d'UM" = "Nombre de colis", comment puis-je le rajouter dans la macro ?
 

robinherold

XLDnaute Nouveau
Bonjour,

Les données des 2 fichiers ne correspondent pas car il s'agit de 2 commandes tests différentes.
Il y aura effectivement plusieurs lignes à traiter, dans l'optique où il y aura plusieurs commandes à traiter.

Et oui, "Nombre d'UM" = "Nombre de colis" !

Merci pour votre réponse!
"Nombre d'UM" du fichier 1 correspond à la première colonne du fichier 2 "Commentaires"*
 

vgendron

XLDnaute Barbatruc
Re
voici le code modifié avec des commentaires
VB:
Sub Livraison()

Dim TabData() As Variant
Dim TabFinal() As Variant

With ActiveSheet
    LastLine = .UsedRange.Rows.Count 'dernière ligne
    TabData = .Range("A1:S" & LastLine).Value 'on place les colonnes A à S dans le tablo VBA
End With

ReDim TabFinal(1 To UBound(TabData, 1), 1 To 14) 'on dimensionne le tableau final avec le meme nombre de lignes et 14 colonnes

With Sheets("Resultat") 'dans la feuille résultat
    .UsedRange.Offset(1, 0).Clear 'on efface tout SAUF la ligne d'entête
    TabFinal = .Range("A1").Resize(UBound(TabFinal, 1), UBound(TabFinal, 2)).Value 'on récupère la ligne d'entete dans la première ligne du tabloeau VBA
End With

For i = LBound(TabFinal, 1) + 1 To UBound(TabFinal, 1) 'pour chaque ligne, on déplace la donnée de TabData vers TabFinal à la bonne colonne
        TabFinal(i, 1) = TabData(i, 3)
        TabFinal(i, 2) = TabData(i, 4)
        TabFinal(i, 3) = TabData(i, 5) + TabData(i, 6)
        TabFinal(i, 4) = TabData(i, 7) + TabData(i, 8)
        TabFinal(i, 5) = TabData(i, 9)
        TabFinal(i, 6) = ""
        TabFinal(i, 7) = TabData(i, 10)
        TabFinal(i, 8) = TabData(i, 11)
        TabFinal(i, 9) = TabData(i, 12) & Chr(10) & TabData(i, 13)
        TabFinal(i, 10) = TabData(i, 14)
        TabFinal(i, 11) = TabData(i, 15)
        TabFinal(i, 12) = TabData(i, 16)
        If TabData(i, 17) = "CU1" Or TabData(i, 17) = "CU2" Then
            TabFinal(i, 13) = "VRAI"
        Else
            TabFinal(i, 13) = "FAUX"
        End If
        TabFinal(i, 14) = TabData(i, 18)
Next i

With Sheets("Resultat") 'on colle le résultat final dans la feuille Résultat
    .Range("A1").Resize(UBound(TabFinal, 1), UBound(TabFinal, 2)) = TabFinal
End With

End Sub
 

robinherold

XLDnaute Nouveau
Re
voici le code modifié avec des commentaires
VB:
Sub Livraison()

Dim TabData() As Variant
Dim TabFinal() As Variant

With ActiveSheet
    LastLine = .UsedRange.Rows.Count 'dernière ligne
    TabData = .Range("A1:S" & LastLine).Value 'on place les colonnes A à S dans le tablo VBA
End With

ReDim TabFinal(1 To UBound(TabData, 1), 1 To 14) 'on dimensionne le tableau final avec le meme nombre de lignes et 14 colonnes

With Sheets("Resultat") 'dans la feuille résultat
    .UsedRange.Offset(1, 0).Clear 'on efface tout SAUF la ligne d'entête
    TabFinal = .Range("A1").Resize(UBound(TabFinal, 1), UBound(TabFinal, 2)).Value 'on récupère la ligne d'entete dans la première ligne du tabloeau VBA
End With

For i = LBound(TabFinal, 1) + 1 To UBound(TabFinal, 1) 'pour chaque ligne, on déplace la donnée de TabData vers TabFinal à la bonne colonne
        TabFinal(i, 1) = TabData(i, 3)
        TabFinal(i, 2) = TabData(i, 4)
        TabFinal(i, 3) = TabData(i, 5) + TabData(i, 6)
        TabFinal(i, 4) = TabData(i, 7) + TabData(i, 8)
        TabFinal(i, 5) = TabData(i, 9)
        TabFinal(i, 6) = ""
        TabFinal(i, 7) = TabData(i, 10)
        TabFinal(i, 8) = TabData(i, 11)
        TabFinal(i, 9) = TabData(i, 12) & Chr(10) & TabData(i, 13)
        TabFinal(i, 10) = TabData(i, 14)
        TabFinal(i, 11) = TabData(i, 15)
        TabFinal(i, 12) = TabData(i, 16)
        If TabData(i, 17) = "CU1" Or TabData(i, 17) = "CU2" Then
            TabFinal(i, 13) = "VRAI"
        Else
            TabFinal(i, 13) = "FAUX"
        End If
        TabFinal(i, 14) = TabData(i, 18)
Next i

With Sheets("Resultat") 'on colle le résultat final dans la feuille Résultat
    .Range("A1").Resize(UBound(TabFinal, 1), UBound(TabFinal, 2)) = TabFinal
End With

End Sub
Merci infiniment, c'est exactement ce dont j'avais besoin!
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Avec un peu de retard mais je vous propose une requête power query à mettre dans le fichier "Exemple livraison.xlsx"
PowerQuery:
let
    Source = Excel.Workbook(File.Contents("Adapter le chemin vers le fichier\test extraction.xlsx"), null, true),
    extract_185_284_230426_0937_Sheet = Source{[Item="extract_185_284_230426_0937",Kind="Sheet"]}[Data],
    #"En-têtes promus" = Table.PromoteHeaders(extract_185_284_230426_0937_Sheet, [PromoteAllScalars=true]),
    #"Livré avant ajouté" = Table.AddColumn(#"En-têtes promus", "Livré avant", each [Date début de livraison] &Time.From([Heure de début de livraison]), type datetime),
    #"Livré après ajouté" = Table.AddColumn(#"Livré avant ajouté", "Livré après", each [Date fin de livraison] & Time.From([Heure de fin de livraison]), type datetime),
    #"Nom société ajouté" = Table.AddColumn(#"Livré après ajouté", "Nom de la société", each null),
    #"Sur rue ?" = Table.TransformColumns(#"Nom société ajouté",{{"Code produit vendu", each Logical.From(_="CU1" or _="CU2"),Logical.Type}}),
    #"Colonnes fusionnées" = Table.CombineColumns(Table.TransformColumnTypes(#"Sur rue ?", {{"Adresse 2 du destinataire", type text}}, "fr-FR"),{"Adresse 1 du destinataire", "Adresse 2 du destinataire"},Combiner.CombineTextByDelimiter("#(lf)", QuoteStyle.None),"Adresse"),
    #"Colonnes renommées" = Table.RenameColumns(#"Colonnes fusionnées",{{"Nombre d'UM", "Commentaires"}, {"Récépissé", "Référence de commande"}, {"Téléphone destinataire", "Numéro du destinataire"}, {"Code postal du destinataire", "Code postal"}, {"Ville du destinataire", "Ville"}, {"Instructions de livraison", "Instructions d'accès"}, {"Code produit vendu", "Commerce ou restaurant sur rue"}, {"Poids", "Kilogramme"}}),
    #"Colonnes sélectionnées" = Table.SelectColumns(#"Colonnes renommées",{"Commentaires", "Référence de commande", "Livré avant", "Livré après", "Nom du destinataire","Nom de la société", "Email destinataire", "Numéro du destinataire", "Adresse", "Code postal", "Ville", "Instructions d'accès", "Commerce ou restaurant sur rue", "Kilogramme"})
in
    #"Colonnes sélectionnées"

Adapter le chemin vers le fichier à l'étape "Source" et éventuellement le nom de la feuille à l'étape "Navigation"

Cordialement
 

Discussions similaires

Réponses
5
Affichages
284

Statistiques des forums

Discussions
315 094
Messages
2 116 154
Membres
112 670
dernier inscrit
Flow87