Macro sur fonction tri [Résolu]

Signaler
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020
-
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020
-
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

Messages postés
8348
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
16 janvier 2021
1 567
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




Cordialement
Patrice

Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020

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/
Messages postés
8348
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
16 janvier 2021
1 567 >
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020

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) ?
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020
>
Messages postés
8348
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
16 janvier 2021

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.
Messages postés
8348
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
16 janvier 2021
1 567
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.
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020

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 !
Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 110
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 ?



Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020

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.
Messages postés
16366
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 janvier 2021
3 110
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.

@+
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020

Okay michel je comprends bien
Messages postés
20
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
2 novembre 2020

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.