XL 2019 Extraire données d'un classeur vers un autre en réorganisant et renommant les colonnes

XLSM75

XLDnaute Nouveau
Bonjour la Team,

Je suis nouveau, première fois que je crée un topic (mais souvent appris grâce au forum).
Je fais appel appel à vous dans le cadre d'une Macro VBA que j'essaie de créer.

L'expression de ma problématique (au mieux 😬 )

1. J'ouvre un fichier Excel lambda, sur lequel je vais coller des valeurs (un tableau) : pour le moment, je veux le faire à la Mano
2. Je colle mes données dans cette feuille (à la Mano)

3. Je lance une macro dont le but est de :
a. Récupérer les colonnes qui m'intéressent et les ordonner autrement (en gros je veux m'adapter à mon client qui veut des colonnes bien définies).​
La "Norme" à respecter est le fichier "SP_Template" dans lequel nous avons des intitulés de colonnes
Par conséquent dans mes données collées (FICHIER SP_KDR) on retrouve en colonne X la valeur "Symbol" avec des données. Cette dernière se trouve en colonne A dans la norme du client
b. Créer un classeur nommé SP_FINAL et horodaté(Fichier final envoyé au client ) dans lequel je vais instruire mes données en respectant la norme du client​
Problème 1 : Je ne peux pas chercher des valeurs car certains intitulés de colonnes divergent entre mon tableau fraichement collé (cf Step 1) et le template client. Sachant que le client est Roi et que mon fournisseur de données l'est également.....RRRRRRRR​
Soluce = Etant donné que le template client est toujours le même et le tableau collé en step1 aussi je me suis dis de récupérer des Ranges et après je n'aurai qu'à modifier/surcharger les range("1, i").value dans la feuil de mon nouveau classeur.​
c. Envoyer par un mail automatique le fichier à mon client. Sachant que le top serait de ne pas à avoir à toucher le SP_FINAL (je justifie juste l'usage de "SWAP_FINAL.Close SaveChanges:=True"dans mon code).​
Je n'en suis pas encore à l'envoi auto donc je chercherai de mon côté avant de vous solliciter. Pour les autres étapes j'ai essayé beaucoup de choses. En ce sens, le dernier essai en date est joint via mon fichier perso (SP_KDR dans lequel le module "A_NewFolder" est la version la plus avancée.

Pour résumer la hiérarchie :

TEMPLATE (Donne la norme juste)

SP_KDR -----(Collage de données depuis mon fournisseur perso)------> VBA (Automatisation step 3) ----(Mail)---->SP_Final

Je fais ce vulgaire schéma car ça m'aide également. Je suis totalement profane et je veux apprendre.

Aujourd'hui je bloc vraiment car lorsque je sélectionne la range de la colonne "side" et que je l'ajoute à l'union, la colonne "symbol" disparait.
De plus je ne sais plus si c'est vraiment l'optimum cette méthode, on dirait un bourrin.
Je n'apprécie pas le fait de devoir justifier "plage.copy Destination:=wsw.Range("A1:AZ1000")" car ce n'est pas une bonne soluce (j'aurais aimé définir juste que c'est l'unique feuille de mon fichier qui sera la destination et on commence à la cellule "A1"...mais je n'ai pas réussi.
Si vous pouvez m'aider...je perds espoir. 🙄

Merci infiniment 🙏


PS(1) : Toutes les datas sont fictives
PS(2): Pour les plus courageux qui arrivent à finir ce long message...je n'ai pas utiliser tous les intitulés du Template client dans le code car je ne sais pas si cette méthode est bonne...je doute...
PS(3): Pour les plus courageux qui arrivent à finir ce long message....merci infiniment
..
..
PS(4): Ne tenez pas compte des commentaires du code, c'est surtout des aides pour moi

CODE VBA :

VB:
Public Sub copy()
'##############CREATION NOUVEAU CLASSEUR###############

'###DECLARATION DES VAR###

Dim Symbol As Range, Account As Range
Dim Side As Range, Qty As Range
Dim NetPrice As Range, Crrency As Range

Dim wsw As Worksheet

Dim plage As Range
Dim SWAP_FINAL As Workbook

'##############DEFINITION DATA PLAGE & Copy/Paste###############

Set Symbol = Range("X:X")
Set Account = Range("AG:AG") 'A renommer Account
Set Side = Range("C:C")
Set Qty = Range("D:D") 'A renommer Quantity
Set NetPrice = Range("AA:AA")
Set Crrency = Range("P:P") 'A renommer Currency

'###CHEMIN Nouveau Classeur###
Set SWAP_FINAL = Workbooks.Add
SWAP_FINAL.SaveAs ("C:\Users\"CHEMIN"\SP_FINAL" & Format(Now(), "DD-MMM-YYYY hh mm AMPM") & ".xlsx")

'desactiver alerte excel
Application.DisplayAlerts = False

'###COPY&PASTE###
Set wsw = Workbooks("SWAP_FINAL" & Format(Now(), "DD-MMM-YYYY hh mm AMPM")).Worksheets(1)
Set plage = Union(Symbol, Account, Side, Qty, NetPrice, Crrency)

plage.copy Destination:=wsw.Range("A1:AZ1000")

'###MODIF NOM COLONNE###

wsw.Select
Range("B1") = "Account"
Range("C1") = "Currency"
Range("D1") = "Quantity"
Range("F1") = "Account"

SWAP_FINAL.Close SaveChanges:=True

End Sub
 

Pièces jointes

  • SP_Template.xlsx
    9.8 KB · Affichages: 2
  • SP_KDR.xlsm
    16.9 KB · Affichages: 3

XLSM75

XLDnaute Nouveau
Existe-il une méthode pour classer les colonnes d'un classeur (avant ou après la copie). Je pensais que la méthode .sort pouvait m'aider mais je crois que c'est pour des cellules au sein d'une colonne et non le cas plus "grand" à savoir des colonnes dans un classeur


Merci
 

XLSM75

XLDnaute Nouveau
Bonjour Chris,

Pardonnez mon absence de réponse j'ai fait au plus vite.

Vous trouverez ci-joint en feuille 1 :
Colonne A : Template du client
Colonne C : Data fournisseur
Colonne B : Matching des 2 colonnes.

Certaines données dans la colonne B sont absentes.
Parfois elles sont présentes parfois non

Mais pour votre démo on peut se limiter aux valeurs présentent

Merci infiniment,
 

Pièces jointes

  • vbaEquiv.xlsx
    11.8 KB · Affichages: 2

chris

XLDnaute Barbatruc
RE

Une première approche

On indique dans une cellule nommée le nom du ficher KDR (peut être fait par VBA)
La requête Sheet1 récupère son contenu et renomme certaines colonnes
Le tableau Concordance est chargé dans PowerQuery, transposé puis ajouté à la première requête dont les colonnes en trop sont supprimées.
Reste à compléter une l'étape de typage des données de la requête : j'ai typé une partie et notamment nombres et dates initialement au format anglo-saxon

Si on modifie le nom du fichier il suffit d'Actualiser Tout : automatisable au Worksheet.Change si besoin
 

Pièces jointes

  • SP_Template2.xlsx
    24.2 KB · Affichages: 12

Discussions similaires

Réponses
3
Affichages
346

Membres actuellement en ligne

Statistiques des forums

Discussions
314 708
Messages
2 112 097
Membres
111 416
dernier inscrit
philipperoy83