Mettre à jour un classeur "Alpha" à partir d'autres classeurs
Bonjour à tous
Voilà une bonne semaine que je me balade dans différents forums à la recherche de LA solution pour mon problème mais jusque là je ne l'ai pas trouvé c'est pourquoi je m'adresse à vous.
Voici mon problème :
J'ai un classeur Excel qui sert de base de données et qui doit être mis à jour chaque mois à partir d'autres classeurs Excel.
Dans mon classeur "Base" chaque produit à un code de référence et c'est grâce à ce code que je peux aller dans les autres classeurs pour récupérer le prix du produit. J'aimerai automatiser la mise à jour en créant une macro.
Voici ce que j'aimerai que la Macro fasse dans l'idéal :
- Dire à l'utilisateur de sélectionner la colonne dite de "référence"
- Demander à l'utilisateur de choisir le dossier qui contient les autres classeurs dans lesquels il faut chercher les prix
- Lorsqu'une référence est trouvée, importer le prix correspondant dans le classeur "Base". Puis dans la colonne "MàJ" mettre la date à laquelle le prix a été mis à jour,
- Une fois terminé, afficher un message pour indiquer le nombre de produit qui a été mis à jour.
J'avoue être débutante en VBA et peut-être est-ce trop ambitieux ce que je demande ?
En farfouillant un peu, voici le code que j'ai trouvé et qui est dans l'idée de ce que je souhaite faire :
Sub Trouve()
End Sub[/quote][/quote]
Le problème ici c'est qu'il ne cherche qu'une référence à la fois et qu'il ne met pas à jour le prix. Ce code se "contente" d'introduire une nouvelle fenêtre avec les informations du classeur dans lequel il a trouvé la référence.
J'ai essayé de bidouiller pour l'adapter à ma situation mais sans succès.
En pièce jointe, j'ai essayé de donner des fichiers Excel qui se rapproche le plus de la réalité.
Si quelqu'un à la solution se serait vraiment mais vraiment mais vraiment le TOP !
Merci à ceux qui essaieront
Bonjour,
quand une référence est présente dans 2 fichiers, que fait-on ?
quel est la valeur à prendre en compte ? la dernière colonne ?
Bonjour,
quand une référence est présente dans 2 fichiers, que fait-on ?
Effectivement je ne l'ai pas précisé, une référence peut être présente dans 2 classeurs différents mais peu importe le classeur vu que les prix seront les mêmes dans les deux
quel est la valeur à prendre en compte ? la dernière colonne ?
Du coup effectivement c'est la dernière colonne qui à prendre en compte
J'ai mis les données trouvées en H, I et J (fichier) pour voir la progression ... si ok, modifie les lignes concernées et supprime celle pour J
Option Explicit
Dim destinataire As Workbook
Sub Trouve()
Dim MonRepertoire As String
Dim Repertoire As FileDialog
Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
Repertoire.Show
If Repertoire.SelectedItems.Count = 0 Then Exit Sub
MonRepertoire = Repertoire.SelectedItems(1)
Set destinataire = ActiveWorkbook
ListeFichiers MonRepertoire
End Sub
Sub ListeFichiers(Repertoire As String)
Dim Fso, SourceFolder, SubFolder, fichier As Object, cel As Range, ligne As Long
Set Fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = Fso.GetFolder(Repertoire)
' boucle sur tous les fichiers du répertoire
For Each fichier In SourceFolder.Files
If Right(fichier.Name, 5) = ".xlsx" Then
If Left(fichier.Name, 2) <> "~$" Then
Workbooks.Open Filename:=Repertoire & "\" & fichier.Name
Sheets("Nomenclature").Select
With destinataire.Sheets("Achat")
For ligne = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
Set cel = Columns("B").Find(.Cells(ligne, 1))
If Not cel Is Nothing Then
.Cells(ligne, "H") = cel.Offset(0, 11)
.Cells(ligne, "I") = Date
.Cells(ligne, "J") = fichier.Name
End If
Next
End With
ActiveWindow.Close
End If
End If
Next fichier
' appel récursif pour les sous-répertoires si besoin
' For Each SubFolder In SourceFolder.subfolders
' ListeFichiers SubFolder.Path
' Next SubFolder
End Sub
WAW !
Que dire à part MERCI !!!!!!!
C'est EXACTEMENT ce que je voulais !
Je suis subjuguée par autant de talent ! MERCI MERCI MERCI !
Et surtout bon après-midi à toi
Merci ... mais bon, j'avais déjà une routine que j'ai juste adaptée !