Macro sur fonction tri

Résolu
abn279 Messages postés 20 Statut Membre -  
abn279 Messages postés 20 Statut Membre -
Bonjour,

Je dois envoyer des rapports quotidiens a différentes sociétés. Ces rapports me prennent énormément de temps en passant par la fonction tri.
Ce sont des donnés sur les conteneurs en stockage sur un Terminal. Il s'agira ici de mettre chaque Société dans un classeur contenant:
Feuille 1 les conteneurs en Sts FCL
Feuille 2 les conteneurs en Sts MTY et
Feuille 3 les conteneurs REEFER si la colonne REEFER TEMP C en remplie.
j'ai essayé un enregistrement en macro mais ca ne marche.
je cherche votre aide pour pouvoir le réaliser.
j'ai joint le fichier ci-dessous pour plus de précision.
https://www.cjoint.com/c/JJDbjic16gu

Configuration: Windows / Chrome 86.0.4240.111

5 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Avec un filtre élaboré et les critères en feuille 2 :
    Option Explicit
    Sub CreerRapports()
    Dim wbk As Workbook
    Dim wsh As Worksheet
    Dim rng As Range
    Dim crt As Range
    Dim dic As Object
    Dim tbl As Variant
    Dim ste As Variant
    Dim nom As String
    Dim i As Long
      
      ' Définir la plage des données
      Set rng = ThisWorkbook.Worksheets(1).Range("A9").CurrentRegion
      ' Lister les sociétés (dans dic)
      Set dic = CreateObject("scripting.dictionary")
      tbl = rng.Offset(1).Resize(rng.Rows.Count - 1, 1).Value
      For i = 1 To UBound(tbl): dic(tbl(i, 1)) = "": Next i
      Erase tbl: tbl = Empty
      ' Pour chaque société :
      For Each ste In dic.keys
        ' - mettre à jour les critères du filtre élaboré
        ThisWorkbook.Worksheets(2).Range("A2").Value = ste
        ' - créer le rapport (avec 3 feuilles)
        Set wbk = Workbooks.Add(xlWBATWorksheet)
        wbk.Worksheets.Add Count:=2
        ' - mettre à jour la feuille FCL
        Set wsh = wbk.Worksheets(1)
        With wsh
          .Name = "Sts FCL"
          ' -- filter les données à transférer
          Set crt = ThisWorkbook.Worksheets(2).Range("A1").CurrentRegion
          rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=crt, Unique:=False
          ' -- copier les données
          rng.Copy Destination:=.Range("A1")
          If rng.Parent.FilterMode Then rng.Parent.ShowAllData
        End With
        ' - mettre à jour la feuille MTY
        Set wsh = wbk.Worksheets(2)
        With wsh
          .Name = "STS MTY"
          ' -- filter les données à transférer
          Set crt = ThisWorkbook.Worksheets(2).Range("A4").CurrentRegion
          rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=crt, Unique:=False
          ' -- copier les données
          rng.Copy Destination:=.Range("A1")
          If rng.Parent.FilterMode Then rng.Parent.ShowAllData
        End With
        ' - mettre à jour la feuille REEFER
        Set wsh = wbk.Worksheets(3)
        With wsh
          .Name = "REEFER TEMP C"
          ' -- filter les données à transférer
          Set crt = ThisWorkbook.Worksheets(2).Range("A7").CurrentRegion
          rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=crt, Unique:=False
          ' -- copier les données
          rng.Copy Destination:=.Range("A1")
          If rng.Parent.FilterMode Then rng.Parent.ShowAllData
        End With
        ' - enregistrer et fermer le rapport
        nom = ThisWorkbook.Path & "\" & Format(Date, "yyyy-mm-dd") & " Rapport " & ste
        wbk.SaveAs nom
        wbk.Close False
      Next ste
    End Sub


    Le fichier : https://mon-partage.fr/f/xAcL6Afx/

    EDIT : pour chaque feuille (i.e 3 fois), avant le End With tu peux ajouter .Columns.AutoFit
          '....
          If rng.Parent.FilterMode Then rng.Parent.ShowAllData
          .Columns.AutoFit
        End With


    1
    1. abn279 Messages postés 20 Statut Membre
       
      bonjour Patrice

      je croyais pouvoir le faire avec un petit réglage sur la mise en forme. Mais depuis je n'y arrive pas. A chaque fois on me signale des erreurs de syntaxes. J'ai joint le fichier original sur lequel je travaille car sur le premier j'avais réduit les colonnes.

      Merci d'avance .

      https://mon-partage.fr/f/2V2hTSV9/
      0
      1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783 > abn279 Messages postés 20 Statut Membre
         
        Bonjour,

        Est-ce que tu travailles avec plusieurs fichiers sources ayant des structures différentes ?
        Faut-t'il mettre un En-tête dans les fichiers des sociétés (nom de la société et date) ?
        0
      2. abn279 Messages postés 20 Statut Membre > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonjour Patrice

        Non je ne travaille pas avec plusieurs fichiers sources. C'est l'unique structure sur laquelle je travaille pour envoyer mes rapports.

        Oui car L'En-tête du fichier cible doit être le même que celui qu fichier source .

        A votre disposition pour plus de clarification.
        0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Re,

    Ton fichier avec ma macro.
    https://mon-partage.fr/f/NU3K7cMZ/

    Il fallait juste modifier les critères (Line au lieu de Société) sur la feuille 2
    et établir la liste des sociétés d'après la seconde colonne au lieu de la première.
    1
    1. abn279 Messages postés 20 Statut Membre
       
      Bonjour Patrice

      c'est exactement ce que je voulais. Avec cette macro je pense gagner près 1 heure de temps sur mes rapport. Avec des gens comme vous le monde ne s'en porterait que mieux.

      un grand merci !
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    LINE =LIGNE ?

    Feuille 3 les conteneurs REEFER si la colonne REEFER TEMP C en remplie.


    dans ce cas dans les feuilles FCL et MTY, met on les lignes avec REEFER TEMP ou pas ?

    Le classeur cible sera t'il dans le m^me dossier que "report Stock" ?

    Pourra t'il y avoir d'autres société que FCL et MTY ?

    0
    1. abn279 Messages postés 20 Statut Membre
       
      Bonjour Michel.

      Il faut entendre Line = Société.

      Si la colonne Reefer Temp C n'est pas remplie c'est pas nécessaire que les colonnes Reefer Temp C et Last Reefer Temp apparaissent sur les feuilles Fcl et Mty.

      Oui le classeur cible peut-être dans le même dossier que Report Stock.

      Je rappelle les classeurs sont créés en fonction du nombre de société qu'il y'a dans la Colonne Société(ou Line). Sur ce cas si on doit en avoir 6.

      J'espère que j'ai été precis. En tout cas je suis à votre disposition pour plus de clarification.
      0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Je m'absente une ou toute partie de l'après-midi, car à partir de demain (France) je vais me retrouver confiner avec des conditions de sortie restreintes...
    Si personne d'autre n'est intervenu, je reprendrais ta demande demain.

    @+
    0
    1. abn279 Messages postés 20 Statut Membre
       
      Okay michel je comprends bien
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. abn279 Messages postés 20 Statut Membre
     
    bonjour Patrice

    Ca marche bien . juste quelques petites réglages sur la mise en forme .Mais c'est pas méchant.

    Un grand Merci à toi.
    0