Sub CreerClasseursFournisseurs()
Dim Plg_Datas As Range ' Plage de cellules du tableau 'BaseArticles'
Dim Lst_Fournisseurs As Variant ' Liste des noms uniques de fournisseurs
Dim i As Integer ' variable de compteur de boucle for
Dim NomFichier As String ' nom du nouveau fichier
'
' Feuilles de travail (dans ce classeur)
Dim shParams As Worksheet, shTemp As Worksheet
'
' Récupérer la liste des fournisseurs
Lst_Fournisseurs = ListeFournisseurs()
'
' si elle est vide, avertir l'utilisateur et sortir
If IsEmpty(Lst_Fournisseurs) Then
MsgBox "Opération interrompue : " & vbCrLf & "Aucun fournisseur dans la liste!", vbExclamation, "Création classeurs fournisseurs"
Exit Sub
End If
'
' Initialisation des variables objets de ce classeur
With ThisWorkbook
Set shParams = .Sheets("Params") ' Feuille sur laquelle se trouve la zone de critères d'extraction
Set shTemp = .Sheets("Temp") ' feuille temporaire qui contiendra les données extraites
Set Plg_Datas = .Sheets("Base").ListObjects("BaseArticles").Range ' plage source des données à extraire
End With
'
'
AppOFF
'
' Parcourir la liste des fournisseurs
For i = 0 To UBound(Lst_Fournisseurs)
'
' Préparation des critères d'extraction
shParams.Range("A2") = Lst_Fournisseurs(i)
'
' Suppression d'éventuelle données précédentes
shTemp.Range("A1").CurrentRegion.EntireRow.Delete
'
' Extraction des données, copie dans la feuille temporaire
Plg_Datas.AdvancedFilter xlFilterCopy, shParams.Range("A1:A2"), shTemp.Range("A1")
'
' .Copy sans argument, copiera la feuille Temp dans un nouveau classeur
' ils deviendront les objets workbook et worksheet actif
shTemp.Copy
'
' Travailler à partir de la feuille active du nouveau classeur
With ActiveSheet
'
' Lui donner un nom
.Name = "Données"
'
' Créer le tableau structuré des données
.ListObjects.Add(xlSrcRange, .Range("A1").CurrentRegion, , xlYes).Name = "T_Données"
'
' Enregistre le parent de la feuille qui est le nouveau classeur
With .Parent
'
' Nom du fichier à partir de la liste fournisseurs
NomFichier = ThisWorkbook.Path & "\" & Lst_Fournisseurs(i) & ".xlsx"
'
' s'il existe déjà on le supprime
If Dir(NomFichier) <> "" Then Kill NomFichier
'
' sauvegarde et le fermeture
.SaveAs NomFichier, xlOpenXMLWorkbook
.Close
End With
End With
'
' Fin traitement du fournisseur en cours, on passe au suivant
Next i
AppOn
End Sub