XL 2016 Exporter données selon critères vers nouveau fichier

MickaelKeul

XLDnaute Nouveau
Bonjour,
J'aimerai faire (et je ne sais pas du tout comment ...) une macro pour filtrer un tableau selon un critère et exporter les données dans de nouveaux fichiers (et les enregistrer).
Dans mon tableau joint, je voudrais qu'en sélectionnant via le user form "import" ou "export", ça génère 1 fichier par fournisseur avec juste ses données et enregistrer automatiquement chaque fichiers.
J'espere ne pas avoir été trop confus et merci d'avance pour votre aide !
 

Pièces jointes

  • Test-Outil 2.xlsm
    24.1 KB · Affichages: 18

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Pas trop compris l'utilité du userform pour choisir export ou import :)

Alors dans le classeur joint vous trouverez la macro ci-dessous qui extrait toutes les données d'un fournisseur pour les copier dans une feuille temporaire.

Cette feuille temporaire est copiée en tant que nouveau classeur enregistré dans le répertoire du classeur qui contient la macro. Si le fichier existait déjà il est préalablement supprimé.

La macro est largement commentée, à vous de travailler et adapter.
Si vous avez des erreurs, revenez avec des descriptions précises (message, ligne) de ces dernières.

VB:
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

Cordialement
 

Pièces jointes

  • Test-Outil 2.xlsm
    44.8 KB · Affichages: 8

MickaelKeul

XLDnaute Nouveau
Le userform doit permettre de filtrer le tableau sur import ou export et ensuite pouvoir créer les fichiers fournisseurs unique sur les ligne produits correspondant

du coup ta macro marche parfaitement mais les nouveaux fichier cumulent les produits d'import et d'export...

Je vais essayé de l'adapter...

par contre j'avais quelques interrogations:
- on est obligé de passer par un onglet "temps" ? on ne peut pas directement copier vers un nouveau fichier vierge et sauvegarder ensuite ? (j'pensais avec une ligne workbook.add et coller ensuite)

- et dans les tableaux structuré je n'ai pas trouvé la syntaxe pour copier uniquement les données d'une (ou plusieurs) colonne filtré avec son entête

En tout cas merci beaucoup c'est deja top ça marche impeccable dans l'état
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

du coup ta macro marche parfaitement mais les nouveaux fichier cumulent les produits d'import et d'export...
il suffit de mettre "Import" ou "Export" en B2 de la feuille Params et de modifier le paramètre CriteriaRange de la ligne de filtrage avancé en A1:B2 (voir fichier joint)

VB:
 ' Extraction des données, copie dans la feuille temporaire
        Plg_Datas.AdvancedFilter xlFilterCopy, shParams.Range("A1:B2"), shTemp.Range("A1")

- on est obligé de passer par un onglet "temps" ? on ne peut pas directement copier vers un nouveau fichier vierge et sauvegarder ensuite ? (j'pensais avec une ligne workbook.add et coller ensuite)

Non, voir fichier joint.

- et dans les tableaux structuré je n'ai pas trouvé la syntaxe pour copier uniquement les données d'une (ou plusieurs) colonne filtré avec son entête
Pour ça, il faut mettre dans la feuille destination en entête de tableau, le nom des colonnes voulues.
Dans le fichier joint seules les colonnes, Code GEN, Fournisseur, Entité, Code FR et Marque sont exportées.

Cliquez sur votre bouton et hop !

Cordialement
 

Pièces jointes

  • Test-Outil 2.xlsm
    48.8 KB · Affichages: 9

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,= à tous :)

Une autre version (à ma sauce) avec userform.
  • les fichiers extractions sont nommés Extract-Import-NomFournisseur.xlsx ou Extract-Export-NomFournisseur.xlsx
  • chaque extraction est un tableau structuré de même nom que le fichier extraction
  • les fichiers extractions sont dans le même répertoire que le fichier de la macro
edit : préférer la v2 qui supprime le fichier avant de l'extraire.
 

Pièces jointes

  • MickaelKeul-Test-Outil 2- v2.xlsm
    33.6 KB · Affichages: 8
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonjour,
J'aimerai faire (et je ne sais pas du tout comment ...) une macro pour filtrer un tableau selon un critère et exporter les données dans de nouveaux fichiers (et les enregistrer).
Dans mon tableau joint, je voudrais qu'en sélectionnant via le user form "import" ou "export", ça génère 1 fichier par fournisseur avec juste ses données et enregistrer automatiquement chaque fichiers.
J'espere ne pas avoir été trop confus et merci d'avance pour votre aide !
Bonjour à tous :)
Une proposition supplémentaire ;)
 

Pièces jointes

  • Test-Outil 2.xlsm
    41.6 KB · Affichages: 20

Discussions similaires

Réponses
11
Affichages
497

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 812
dernier inscrit
abdouami