VBA - Mettre à jour des tarifs depuis un autre fichier
Bonjour à tous,
Voici ma problématique: j'ai un fichier Excel de cotation comportant des tarifs sur la colonne X de la feuille "Source".
Une fois par an, je dois mettre à jour les tarifs depuis un autre fichier donc le nom et l'architecture change régulièrement (ajout de colonne).
Sur mon outil de cotation, je voudrai depuis un bouton, appeler une macro qui m'ouvre une form pour sélectionner:
- mon fichier tarif
- la colonne ou se trouve les prix
et en validant, que cela mette à jour les prix....
Bien sur dans les deux fichiers, il y a une colonne "référence"
Est-ce faisable facilement?
Bon ce sujet n'attire pas les foules
J'ai un peu avancé pour le choix et l'ouverture du fichier source avec ce code trouvé sur le net:
Dim Chemin_fichier As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Custom Excel Files", "*.xlsx, *.csv, *.xls"
.FilterIndex = 1
.Show
On Error Resume Next
Chemin_fichier = .SelectedItems.Item(1)
On Error GoTo 0
Set fd = Nothing
End WithCela permet bien l'affichage des fichiers selon le filtre, par contre les raccourcis (même si pointant sur des fichiers d'un autre type) sont listés. Du coup cela plante dans ce cas. Si vous avez une astuce pour ne pas afficher les raccourcis ;-)
Maintenant il me reste le Noeux du problème: créer une forme pour pouvoir à partir du fichier source sélectionner au dessus:
* choisir la sheet contenant les data cibles
et en fonction de la sheet sélectionnée
** récupérer la colonne contenant les références
** récupérer la colonne contenant les tarifs
Dois-je passer par un tableau intermediaire ou travailler directement avec les sheets?
Puis lancer ma fonction de mise à jour de mon fichier de destination.
Je me réponds ;-)
J'ai reussi à charger les Sheets et les header dans ma forms avec ces codes:
Public Sub OpenFile(Chemin_fichier As String)
Dim ws As Worksheet
Set wb = Workbooks.Open(Chemin_fichier)
For Each ws In wb.Sheets
USFUpdate.lbxSheets.AddItem ws.Name
Next ws
'appExcel.Visible = True
USFUpdate.Show 0
USFUpdate.Repaint
End Sub
Private Sub lbxHeaderPrice_Change()
VerifSelection
End Sub
Private Sub lbxHeaderRef_Change()
VerifSelection
End Sub
Private Sub lbxSheets_Change()
VerifSelection
End Sub
Private Sub lbxSheets_Click()
Me.lbxHeaderRef.Clear
Me.lbxHeaderPrice.Clear
mysheet = Me.lbxSheets.Value
lastCol = wb.Sheets(mysheet).Cells(1, Columns.Count).End(xlToLeft).Column
For x = 1 To lastCol
Me.lbxHeaderRef.AddItem wb.Sheets(mysheet).Cells(1, x)
Me.lbxHeaderPrice.AddItem wb.Sheets(mysheet).Cells(1, x)
Next x
End Sub
Private Sub UserForm_Initialize()
Me.lbxSheets.Clear
Me.CommandButton1.Enabled = False
End Sub
Private Sub VerifSelection()
If lbxSheets.Value <> "" And lbxHeaderPrice.Value <> "" And lbxHeaderRef.Value <> "" Then
Me.CommandButton1.Enabled = True
Else
Me.CommandButton1.Enabled = False
End If
End SubIl me reste la fontion de mise à jour à créer qui se déclenchera en cliquant sur le bouton CommandButton1
Bonjour Kevlile le forum
bon alors si tu passes un petit dossier.zip avec dedans les deux classeurs celui concerné par la mise à jour, et également l'autre fichier avec les prix que tu souhaites récupérer, je te fais cela sans problème
bonne journée
Papou
Hello Paritec
Désolé pour la réponse tardive, j'étais malade ces derniers jours.
Voici mes deux fichiers épurés. Le fichier test avec le bouton de mise à jour et le fichier "Tarif 2022" qui servira de source.
Je voudrai un système que me permette de choisir les colonnes des références et tarifs dans mon fichier sources (car d'une année sur l'autres l'architecture de celui-ci peut différer). Par contre dans mon fichier Test, les colonnes pour les références et tarifs sont fixes.
Autres points importants je pense:
* le fichier "Tarif 2022" contient normalement plus de 10000 lignes.
*les références du fichier "Tarif 2022" on toutes un préfixe "MG" qui n'est pas présent dans le fichier test.
CI-joint les deux fichiers
Bonjour Kevlille le forum
tu demandes de l'aide Ok mais si tu mets un mot de passe à ta macro dans le fichier test.xlxm, c'est que tu ne veux pas que l'on touche à ton fichier ??
ou bien ??
Pour ma part je ne vois ta réponse que maintenant, alors la demande n'est peut-etre plus d'actualité
à te relire
à+
Papou