Hola à tous,
Je me permets de solliciter votre expertise VBA.
Voilà mon besoin: Je souhaiterais aider les opérateurs d'un entrepôt pour qu'ils aient sur un fichier excel les livraisons de la semaine à venir.
La situation: Imaginons le procédé, chaque Lundi matin un opérateur sort d'un ERP une base de données qui englobent toutes les livraisons de la semaine. Je souhaiterais que cette base de données se range par dates de livraison.
A l'image de l'exemple joint, nous sommes le Lundi 23: le fichier se distribuerait jusqu'au dimanche s'il y avait une livraison de prévue.
Dans l' onglet rouge, il s'agit de ce que l'on extrait de l'ERP. En jaune, les onglets que l'on souhaiterait créer via une macro.
L'idée est donc de copier les colonnes D F G H K L M dans des onglets nommés en fonction de la date de livraison.
Le top serait,en plus, d'avoir une mise en forme automatique en tableau de chaque onglet là on toucherait au saint graal.
J'avais un début de macro trouvée sur un autre topic mais elle ne marche pas pour mon cas...
https://forum.excel-pratique.com/excel/repartir-d-un-onglet-vers-plusieurs-onglets-selon-criteres-t39550.html
Sub Répartition()
Dim DLig As Long
Dim Mondico As Object
Dim aa As String
Dim J As Long
Dim Tablo
Application.ScreenUpdating = False
' Partie distribution des infos
Set Mondico = CreateObject("Scripting.Dictionary")
With Sheets("Feuil1")
DLig = .Range("A" & Rows.Count).End(xlUp).Row
For J = 12 To DLig
Mondico(.Range("C" & J).Value) = .Range("C" & J).Value
Next J
Tablo = Mondico.Items
End With
For J = 0 To Mondico.Count - 1
If FeuilleExiste(CStr(Tablo(J))) = False Then
Sheets("Feuil1").Copy after:=Sheets(Sheets.Count)
aa = Tablo(J)
ActiveSheet.Name = Tablo(J)
Range("2:11").Delete
With Sheets(aa)
.Select
.Rows("1:1").AutoFilter
.Range("A2:D" & DLig).AutoFilter Field:=3, Criteria1:=aa 'Dlig correspond à la dernière ligne de la feuille 1
End With
End If
Next J
Application.ScreenUpdating = True
End Sub
Function FeuilleExiste(nom As String) As Boolean
On Error Resume Next
FeuilleExiste = Sheets(nom).Name <> ""
On Error GoTo 0
End Function
Au plaisir de vous répondre pour de plus amples informations,
Cordialement