Aller au contenu

Automatisez votre travail – divisez facilement de grandes listes de prix !

Lorsque vous travaillez sur des listes de prix ERP, vous vous retrouvez avec des milliers de lignes de combinaisons liste de prix – SKU. Lors de l’envoi de ces fichiers pour révision, vous devez filtrer et enregistrer des dizaines de fichiers. Comment automatiser cela ?

Si votre entreprise n’utilise pas de suite de gestion des prix, la révision annuelle des prix est un sacré travail manuel à faire. Je le sais, je l’ai déjà fait plus de 5 fois. Vous devez faire, corriger et refaire de nombreux rapports des dizaines de fois. Cela vous épuise vraiment.

Je trouve que l’une des tâches les plus chronophages de la révision annuelle des prix consiste à diviser le fichier d’accord de prix long en un seul fichier par réviseur, à les envoyer aux réviseurs et à importer leurs commentaires dans le fichier d’origine.

Par exemple, si vous travaillez sur Oracle et vous avez;

  • 100 SKU actifs dans les listes de prix,
  • 100 clients avec accords tarifaires,
  • 10 responsables régionaux ;

Ensuite, vous devez diviser un fichier Excel de 10 000 lignes en 10 fichiers, ajouter des données pertinentes (comme la marge brute, l’augmentation de prix suggérée, etc.) et l’envoyer à 10 responsables régionaux pour examen.

Si vous faites une seule erreur dans le fichier et que vous le remarquez après l’avoir envoyé, c’est reparti. Filtrer – enregistrer sous – fermer – filtrer – enregistrer sous – fermer – filtrer – enregistrer sous – fermer – filtrer – enregistrer sous – fermer…

Ou, vous pouvez gagner du temps avec ce code VBA :

Étape 1 : Structurez votre fichier Excel

  • Créez une feuille nommée « PA_List » et créez une table comme ci-dessous :

(merci à behindthename.com pour les noms aléatoires)

  • Créez une feuille nommée « PA_Lines » et copiez-y votre grande base de données de listes de prix comme suit :

Appuyez maintenant sur Alt + F11 pour lancer l’éditeur de macros, faites un clic droit sur votre fichier et sélectionnez Insertion -> Module. Copiez ensuite ce code dans votre module :

Sub Split_Files()

' First, define variable that will be used in the macro
Dim PA_No As Double
Dim New_WB, Master_WB As Workbook
Dim PA_List, PA_Details As Worksheet
Dim SaveFileName As String
Dim Managers() As String
Dim Manager As Variant
Dim SearchString As String
Dim SearchArray() As String

'Assign all the managers to an array.
'We will loop through this array to save each file.
Managers = Split("Michael,Christèle,Arnoud,Linus", ",")
Set Master_WB = ActiveWorkbook
Set PA_List = ActiveWorkbook.Sheets("PA_List")
Set PA_Details = ActiveWorkbook.Sheets("PA_Lines")
For Each Manager In Managers
    'Create the new workbook
    Set New_WB = Workbooks.Add
    New_WB.Worksheets.Add
    
    ' Filter the PA_List based on manager, and copy this table
    Master_WB.Activate
    PA_List.Activate
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$E$190").AutoFilter Field:=3, Criteria1:=Manager
    Range("A1:E1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    
    'Paste the copied PA list to the new split file
    New_WB.Activate
    New_WB.Sheets(1).Activate
    Range("A1").Select
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Range("A1").Select
    
    'Rename the sheets of the split file
    New_WB.Sheets(1).Name = "PA_Summary"
    New_WB.Sheets(2).Name = "PA_Details"
    New_WB.Sheets(2).Activate
    
    'Initiate / clear the searchstring before each loop
    SearchString = ""
    
    'Add each PA to be reported in an array, which will be used as a filter in the next step
    For PA_No = 2 To 190
        If PA_List.Cells(PA_No, 5) = "Yes" And PA_List.Cells(PA_No, 3) = Manager Then SearchString = SearchString & "," & PA_List.Cells(PA_No, 1)
    Next PA_No
    
    SearchString = Mid(SearchString, 2, Len(SearchString) - 1)
    Erase SearchArray
    ReDim SearchArray(70)
    SearchArray = Split(SearchString, ",")
   
    'Set the filter on the PA_Lines worksheet, based on the selected PAs at the previous step.
    Master_WB.Activate
    PA_Details.Activate
    ActiveSheet.Range("A1").AutoFilter
    ActiveSheet.Range("$A$1:$BK$18272").AutoFilter Field:=1, Criteria1:=SearchArray, Operator:=xlFilterValues
    
    'Copy the filtered results
    Range("A1:G1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    
    'Paste the filtered results into the new worksheet
    New_WB.Activate
    New_WB.Sheets(2).Activate
    Range("A1").Select
    ActiveSheet.Paste
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                
    'Change the output path after you create a new folder
    SaveFileName = "C:\Users\YourUserNAme\Documents\Review_Files\" & Manager & "_PriceAgreement_Review_2023"
    
    'Save the split workbook as a new file, close, and go to the next reviewer.
    New_WB.SaveAs Filename:=SaveFileName
    New_WB.Close
             
Next Manager

End Sub

Vous pouvez maintenant exécuter ce code, et vous verrez 4 fichiers, contenant toutes les lignes à revoir par chaque responsable. Ils peuvent exécuter l’examen, vous renvoyer le fichier et vous pouvez l’importer.

BONUS: J’ai également un code pour importer en bloc les fichiers révisés dans un seul accord de prix principal et enregistrer les modifications ! Si vous êtes intéressé, écrivez-moi sur le formulaire de contact et je vous enverrai également ce code !

Étiquettes:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *