Création/Enregistrement multiple de classeur avec noms variables

Bonjour à tous.

Pour vous expliquer rapidement mon problème. J'ai un classeur Excel avec toutes mes données calculées. Ce classeur est composé comme suit :

capture 1

Mon but est d'importer ces données dans notre ERP. Pour ce faire, j'ai besoin de

1 - créer des fichiers Excel d'import (1 fichier par dossier). Et je dois nommer ces fichiers avec le nom du dossier.

Exemple : Dossier A = nouveau classeur "A", Dossier B = nouveau classeur "B" et ainsi de suite jusqu'au dernier dossier

2- Retranscrire les données d'une certaine manière (comme ci-dessous),

capture 2

Dans le classeur qui sera généré (exemple "A"), j'ai besoin de renseigner les numéros de comptes en Colonne A etc..

Je suis coincé à la première étape, là ou je dois définir les variables de Noms des classeurs.

Ci-dessous mon code ; Il fonctionne jusqu'a ce que je définisse un nom pour le classeur ouvert, je bloque sur les variables "VariableNom" & "Nom"

Sub test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim Chemin As String, NomFichier As String, Fichier As String, Dossier As String, Import As String, VariableNom As String, Nom As String, Feuil As String

    Application.ScreenUpdating = False

    Chemin = "CHEMIN\" 'Chemin du fichier mère
    NomFichier = "Fichier_Mere.xlsx" 'Nom du fichier mère
    Fichier = Chemin & NomFichier 'Chemin & nom fichier mère
    Feuil = "SYNTHESE" 'Onglet où sont les informations sur le classeur mère

    Set wb = Workbooks.Open(Fichier, UpdateLinks:=0) 'Ouvre le fichier mère et désactive la mise à jour des liens
    Set ws = wb.Worksheets(Feuil) 'Se place sur la feuille "SYNTHESE"

    For L = 9 To ws.Range("B" & Rows.Count).End(xlUp).Row
    'Pour toutes les lignes à partir de la ligne 9, colonne B, et jusqu'a la dernière ligne non vide

    Workbooks.Add 'Crée un nouveau classeur Excel

    Import = "CHEMIN"
    'Chemin pour entregistrer le nouveau classeur

   VariableNom = wb.ws.Range("B9" & Rows.Count).End(xlUp).Row.Value
    'Nom du classeur = B9 pour le premier classeur crée, et parcours les lignes suivantes pour la création des autres classeurs
   Nom = VariableNom

    Workbook.SaveAs Filename:=Import & Nom, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    Next

 End Sub

Pouvez-vous m'éclaircir ? Merci par avance,

Cdt,

bonjour

importe tout ton fichier d'un coup dans l'ERP

les ERP acceptent d'ailleurs mieux ce genre d'import "en vrac"

Bonjour Jmd,

En fait malheureusement c'est impossible, en fait quand je parle d'ERP (qui n'en est pas un), il s'agit plus de notre logiciel de comptabilité, qui est au passage un peu... archaïque.

Il n'est pas possible d'importer en "multi" dossiers. Tu es obligé de sélectionner un dossier (qui est ta clé d'entrée), et importer les données qui alimenteront le module budgétaire de ce dossier uniquement. Et nous devons le faire pour chaque dossiers . C'est pourquoi j'ai besoin de créer un fichier Excel par dossier

Cdt,

J'ai corrigé pour que mon premier point fonctionne, j'arrive donc à créer les classeurs avec des noms spécifiques

Je m'attaque au second point, à savoir retranscrire les données d'une certaine manière dans les classeurs créés.

Je reviens vers vous car j'aurai surement besoin d'aide,

Mon code :

Dim wb As Workbook
    Dim ws As Worksheet
    Dim Chemin As String, NomFichier As String, Fichier As String, Dossier As String, Import As String, VariableNom As String, Feuil As String

    Application.ScreenUpdating = False

    Chemin = "CHEMIN\" 'Chemin du fichier mère
    NomFichier = "Fichier_Mere.xlsx" 'Nom du fichier mère
    Fichier = Chemin & NomFichier 'Chemin & nom fichier mère
    Feuil = "SYNTHESE" 'Onglet où sont les informations sur le classeur mère

    Set wb = Workbooks.Open(Fichier, UpdateLinks:=0) 'Ouvre le fichier mère et désactive la mise à jour des liens
    Set ws = wb.Worksheets(Feuil) 'Se place sur la feuille "SYNTHESE"

    For L = 9 To ws.Range("B" & Rows.Count).End(xlUp).Row
    'Pour toutes les lignes à partir de la ligne 9, colonne B, et jusqu'a la dernière ligne non vide

    Workbooks.Add 'Crée un nouveau classeur Excel

    Import = "CHEMIN\"
    'Chemin pour entregistrer le nouveau classeur

    VariableNom = ws.Range("B" & L)
    'Nom du classeur = B9 pour le premier classeur crée, et parcours les lignes suivantes pour la création des autres classeurs

    ActiveWorkbook.SaveAs Filename:=Import & VariableNom, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWorkbook.Close

    Next

 End Sub

re

alors avec ton Excel 2016 il y a le menu Données. Tu connais ? il FAUT le connaître, bien avant de te lancer dans VBA

donc feuille vierge

données, obtenir de plage Excel, naviguer vers ta plage d'origine

"modifier"

dépivoter (cherche, ce sera un clic droit ! )

"charger"

je te montre, mais il faut un fichier origine et non du VBA

note : apprendre Excel avant d'apprendre VBA

Je suis curieux...

Voici ci-joint un fichier

26test-1.xlsx (10.83 Ko)

re

avec une requête, un dépivotage et un TCD

je t'ai fait le A

il y a un simple filtre A sur le TCD

fais idem pour un TCD B etc.

pour ajouter tes valeurs en bleu, sauras-tu les mettre à côté des TCD avec des RECHERCHEV ?

s'il faut remanier les colonnes pour avoir exactement ton dessin, alors copier un TCD, et "collage spécial valeur"

les requêtes et TCD peuvent se mettre dans des classeurs à part, comme tu le souhaite.

Bonjour jmd,

Pour ma curiosité perso, comment as tu pu avec la requête passée de l'étape de depivotage?,

Cordialement,

Bonjour,

Après une recherche, j'ai donc trouver ce sujet qui explique le dépivotage :

https://forum.excel-pratique.com/viewtopic.php?f=2&t=113258&start=10

Ça peut toujours servir

Cordialement,

Bonjour Jmd

Alors c'est assez impressionnant, je ne connaissais pas du tout... et je ne comprends pas tout mais je vais regarder.

Par contre ça fait pas mal de manipulations.

  • > Créer plus de 70 TCD
  • > Les remanier 1 à 1
  • > Faire des rechercheV (très simple, mais une action supplémentaire)
  • > Sachant que 1 TCD donne lieu à la création d'un classeur, et que je dois nommer spécifiquement chaque classeur crée (est-ce possible avec la requête ?)
  • > Que je dois également nommer spécifiquement l'onglet de chaque classeur créé (est-ce possible avec la requête ?)
  • > Et que je dois insérer des noms de colonnes spécifiques (standard pour tous) dans mes classeurs crées qui n'apparaissent pas sur mon tableau de données

Pour info, j'ai terminé la macro qui me permet de ne réaliser aucune manipulation supplémentaire,

Ci-dessous le code pour les suivants qui lieront ce post :

Sub Generation_Import_Elements_financiers()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim newwb As Workbook, Entete
    Dim newws As Worksheet
    Dim Chemin As String, NomFichier As String, Fichier As String, Dossier As String, Import As String, Nom_Variable As String, Nom_Fixe As String, Nom As String, Feuil As String, Onglet_Import As String

    Application.ScreenUpdating = False 'désactive la mise à jour de l'affichage

    Chemin = "CHEMIN\" 'Chemin du fichier mère
    NomFichier = "FICHIER_MERE.xlsx" 'Nom du fichier mère
    Fichier = Chemin & NomFichier 'Chemin & nom fichier mère
    Feuil = "SYNTHESE" 'Onglet où sont les informations sur le classeur mère

    Set wb = Workbooks.Open(Fichier, UpdateLinks:=0) 'Ouvre le fichier mère et désactive la mise à jour des liens
    Set ws = wb.Worksheets(Feuil) 'Se place sur la feuille "SYNTHESE"

    For L = 9 To ws.Range("B" & Rows.Count).End(xlUp).Row
    'Pour toutes les lignes à partir de la ligne 9, colonne B, et jusqu'a la dernière ligne non vide

    Set newwb = Workbooks.Add 'Crée un nouveau classeur Excel
    Onglet_Import = "CMBU_BUDGET" 'Définition du nom de l'onglet du nouveau classeur
    newwb.ActiveSheet.Name = Onglet_Import 'Renomme l'onglet du classeur avec la variable Onglet_Import
    Set newws = newwb.Worksheets(Onglet_Import)
    Entete = Array("Nom 1", "Nom 2", "Nom 3", "Nom 4", "Nom 5", "Nom 6", "Nom 7") 'Défini les entetes du notre tableau de réstitution n des données
    newws.Range("A1").Resize(, UBound(Entete) + 1) = Entete '

    ws.Range("D8", ws.Range("D8").End(xlToRight)).Copy 'Copie les Cellules D8 à la dernière cellule non vide sur la droite du classeur&feuille "ws"
    newws.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 'Colle en valeur & transpose à partir de la celulle A2 du classeur&feuille "newws"

    ws.Range("D" & L, ws.Range("D" & L).End(xlToRight)).Copy 'Selectionne les Cellules de D9 à la dernière cellule non vide sur la droite pour la première boucle du classeur&feuille "ws"
    newws.Range("D2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 'Colle en valeur & transpose à partir de la celulle D2 du classeur&feuille "newws"

    newws.Range(Cells(2, 3), Cells(newws.Range("A" & Rows.Count).End(xlUp).Row, 3)) = "LIN" 'Texte renseigné en colonne C jusqu'a la dernière ligne non vide de la colonne A
    newws.Range(Cells(2, 5), Cells(newws.Range("A" & Rows.Count).End(xlUp).Row, 7)) = 0 'Texte renseigné en colone D jusqu'a à la colonne G jusqu'a la dernière ligne non vide de la colonne A

    Import = "CHEMIN\" 'Chemin pour entregistrer le nouveau classeur
    Nom_Variable = ws.Range("B" & L) 'Determine le nom variable du classeur excel : B9 pour le premier classeur crée, et parcours les lignes suivantes pour la création des autres classeurs
    Nom_Fixe = "_CMBU_BUDGET" 'Determine le nom fixe du classeur excel
    Nom = Nom_Variable & Nom_Fixe 'Nom concatené du classeur

    ActiveWorkbook.SaveAs Filename:=Import & Nom, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 'Enregistre en format xls
    ActiveWorkbook.Close

    Next

 End Sub
Rechercher des sujets similaires à "creation enregistrement multiple classeur noms variables"