Microsoft 365 Automatisation avec création de fichier et d'onglets en fonction des valeurs

pene

XLDnaute Nouveau
Bonsoir,

Je me permets de vous soumettre mon problème si quelqu'un aurait une idée ou solution cela serait super ;-)

J'ai un fichier "Forms" que j'extrait plusieurs fois par an avec le recensement des besoins en nouveaux vêtements de travail.
J'ai un bon de commande type imposé par mon prestataire et des "configurations" à respecter pour qu'il puisse traiter ma commande et gérer la bonne livraison etc..
J'ai mis dans un même fichier les 2 (le Forms (qui en réalité comporte 250 lignes et plus de 30 colonnes) et le bon de commande).

Je voudrais automatiser le process, à savoir:
- incrémenter automatiquement mon bon de commande, sachant qu'il m'en faut 1 par salarié et que tous les bons des salariés d'une même agence soient dans un fichier par agence avec 1 onglet par bon.

j'ai tenté des macros (trouvées sur les réseaux, et oui je suis complètement novice en VBA) qui incrémentent au automatique le bon mais cela me génère un fichier pour chaque bon.
j'ai essayé une macro qui à chaque changement de valeur dans une colonne me génère un nouvel onglet portant le nom de la valeur.
mais en fait il me faut un mix.. et je ne sais pas dans quel sens il faut que je commence...

je mets mon fichier exemple ...

Merci d'avance pour votre aide.
 

Pièces jointes

  • BP auto.xlsx
    21.4 KB · Affichages: 12

fanch55

XLDnaute Barbatruc
Ok, comment sait-on à partir de la feuille "Forms" ce qui doit être commandé dans la feuille "Vêtement" ?
Ce que j'ai compris : Q=Quantité T=Taille ( pas de quantité pour les chaussures ....? )

On doit donc produire un fichier par agence avec n feuilles pour chaque personne sans s'occuper pour l'instant de ce qui est dans la feuille ....
 

pene

XLDnaute Nouveau
Dans chaque onglets j’ai besoin du bon de commande rempli par personne.
J’ai fait un exemple simple pour pouvoir adapter après et comprendre les macros pour pouvoir l’adapter.
Le Forms n’est pas encore créé car je voudrais savoir si cela est possible pour pouvoir le construire de la manière la plus optimum.
 

fanch55

XLDnaute Barbatruc
Code à mettre dans un module :
VB:
Option Explicit
Sub Prepare()
Dim Agence          As Variant
Dim Agence_Initiale As String
Dim Agence_Trouvée  As Range
Dim Data            As Range
Dim File            As String
Dim Dossier         As String
Dim Modele          As Worksheet
Dim DerRow          As Long
Dim DerCol          As Long

Application.ScreenUpdating = False
    Set Modele = Worksheets("Vêtements de Travail")
    Dossier = ThisWorkbook.Path & "\"
    
    ' Détermination de la plage de données de "Forms"
    With Worksheets("Forms")
        DerRow = .Cells(.Rows.Count, "C").End(xlUp).Row
        DerCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        Set Data = .Range("A1", .Cells(DerRow, DerCol))
    End With
    
    For Each Agence In Get_Agences(Data.Columns("C"))
      ' détermination du fichier à créer et destruction de celui-ci s'il existe
        File = Agence & " Commande " & Format(Date, "dd_mm_yyyy") & ".xlsx"
        If Dir(Dossier & File) <> "" Then Kill Dossier & File
      
      ' On va chercher chaque ligne de l'agence en cours
        Set Agence_Trouvée = Data.Columns("C").Find(Agence, , xlValues, xlWhole)
        Agence_Initiale = ""
        Do While Not Agence_Trouvée Is Nothing
            If Agence_Initiale = "" Then
               ' première ligne trouvée
                Agence_Initiale = Agence_Trouvée
                Modele.Copy ' On duplique la feuille dans un nouveau classeur
                ActiveWorkbook.SaveAs Filename:=Dossier & File
            Else
               Modele.Copy ActiveSheet ' On duplique la feuille avant la feuille active
            End If
            With ActiveSheet ' On renseigne les champs de la commande
                .[Service] = Agence
                .[DateCommande] = Format(Date, "dd/mm/yyyy")
                .[Nom] = Data.Cells(Agence_Trouvée.Row, "A")
                .[PréNom] = Data.Cells(Agence_Trouvée.Row, "B")
                .Name = .[Nom] & " " & .[PréNom] ' Nom de la feuille
               ' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
               ' ce sera là où les vêtements commandés
               ' devront être renseignés
               ' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
            End With
            Set Agence_Trouvée = Data.Columns("C").FindNext(Agence_Trouvée)
            If Agence_Trouvée = Agence_Initiale Then
                Set Agence_Trouvée = Nothing
                ActiveWorkbook.Close SaveChanges:=True
            End If
        Loop
    Next
End Sub
Function Get_Agences(Data As Range)
' Table des agences sans doublons
Dim Arl As Object
Dim Cel As Range
    Set Arl = CreateObject("System.Collections.ArrayList")
        For Each Cel In Data.Offset(1).Cells.Resize(Data.Rows.Count - 1)
            Select Case True
                Case Cel = ""
                Case Arl.Contains(Cel.Value)
                Case Else: Arl.Add Cel.Value
            End Select
        Next
        Arl.Sort
        Get_Agences = Arl.ToArray
    Set Arl = Nothing
End Function
 

pene

XLDnaute Nouveau
Merci beaucoup pour ce retour. J'ai créé et copié la macro envoyée telle que.
Cela m'a créé un nouveau fichier "bordeaux" avec uniquement 1 bon de commande vide et non 2 car il y a 2 salariés.
Ca ne m'a pas créés d'autres fichiers pour les autres agences.
il y a surement des choses que je dois faire mais je ne sais pas lesquelles...
je suis vraiment désolée et merci encore
 

fanch55

XLDnaute Barbatruc
La petite sub à exécuter une fois pour définir les noms :
VB:
Sub Def_Names()
    With ActiveWorkbook.Worksheets("Vêtements de Travail").Names
        .Add Name:="SERVICE", RefersTo:="='Vêtements de Travail'!$E$3"
        .Add Name:="Nom", RefersTo:="='Vêtements de Travail'!$E$5"
        .Add Name:="Prénom", RefersTo:="='Vêtements de Travail'!$E$6"
        .Add Name:="DateCommande", RefersTo:="='Vêtements de Travail'!$C$4"
    End With
End Sub
 

pene

XLDnaute Nouveau
Bonjour. Désolée je n'ai pas eu le temps de m'y pencher ces derniers jours. je regarde tout ca ce soir et vous fait un retour. Merci beaucoup en tout cas ;-)
Bonjour, j'ai fait le test. Cela me créer que 2 fichiers (Bordeaux et Lyon). il me faudrait un fichier par agence.
Et dans les fichiers je n'ai qu'un seul onglet avec le 1er nom. Il me faudrait autant d'onglets que de noms de la même agence.
 

fanch55

XLDnaute Barbatruc
Effectivement, un petit bug dans le classeur en renommant certaines variables ...
Classeur corrigé :
bp.gif
 

Pièces jointes

  • BP auto F55.xlsm
    48.7 KB · Affichages: 7

Discussions similaires

Réponses
6
Affichages
329