XL 2019 Macro : remplir une fiche automatiquement à partir d'un tableau

Yana

XLDnaute Nouveau
Bonjour,
Après des jours de recherches, j'ai décidé de créer cette discussion car je ne trouve pas de situation similaire dans les sujets déjà ouverts.
Je me permets de vous demander de l'aide dans la construction d'un outil qui permet de remplir une fiche Excel avec les données brutes (pus de 100 colonnes).
Je vous joins 2 fichiers : "Données" et "Fiche à remplir".
L’idée est de créer un bouton dans "Données" qui ira chercher la "Fiche à remplir" pour créer un fichier rempli "Fiche à remplir - Ent1".
Condition importante : ayant plus de 400 lignes, je pense qu'il sera plus facile pour l'utilisateur de pouvoir choisir la date de demande (boîte de dialogue) pour générer toutes les fiches pour toutes les demandes qui sont arrivées ce jour.

Je vous remercie tous par avance!
 

Pièces jointes

  • Données.xlsx
    10 KB · Affichages: 46
  • Fiche à remplir.xlsx
    8.5 KB · Affichages: 48
Solution
Bonsoir ou Bonjour @Yana, le Forum

Je me suis penché sur ton problème... Je pense qu'il y a une solution pour ton idée "un peu trop ambitieuse par rapport à ce module dont je rêve"

Voici comme ça fonctionne :
1) le Classeur XLD_YANA_Données_Generator_Enterprise_Files_v01.xlsm ne contient plus que la "base de Données, que tu te chargeras de copier/coller ton extraction brute dedans et tu appuieras sur le bouton pour générer les Fiches Entreprises...

2) le Classeur XLD_florian333_Fichier_sources_Planning-1_v00.xlsm est uniquement là pour simuler un classeur multi-onglets, avec multi-macros, et même un USF, il ne sert qu'à simuler ton "Gros Fichier Source Fiche Entreprise"

Dans mon synopsis, en aucun cas le...

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @Yana , le Forum

Si j'ai bien compris ta demande, le Code VBA dans ce classeur devrait correspondre à tes besoins.
Tu dois sauver ce classeur dans un répertoire de test et l'auto-génération des fichiers 'Fiche Entreprise" te fera un fichier par ligne dans le même répertoire de test.

Bien @ toi, à vous
@+Thierry
 

Pièces jointes

  • XLD_YANA_Données_Generator_Enterprise_Files.xlsm
    23.1 KB · Affichages: 80

Yana

XLDnaute Nouveau
Bonsoir @Yana , le Forum

Si j'ai bien compris ta demande, le Code VBA dans ce classeur devrait correspondre à tes besoins.
Tu dois sauver ce classeur dans un répertoire de test et l'auto-génération des fichiers 'Fiche Entreprise" te fera un fichier par ligne dans le même répertoire de test.

Bien @ toi, à vous
@+Thierry

Un GRAND GRAND merci pour cette proposition rapide et pertinente! Je crois que c'est exactement ce qu'il me faut!!!
Je commence à adapter la macro pour mes vrais fichiers et je me permettrais de revenir vers vous si je rencontre des problèmes.

Excellente journée!
 

Yana

XLDnaute Nouveau
Bonsoir @Yana , le Forum

Si j'ai bien compris ta demande, le Code VBA dans ce classeur devrait correspondre à tes besoins.
Tu dois sauver ce classeur dans un répertoire de test et l'auto-génération des fichiers 'Fiche Entreprise" te fera un fichier par ligne dans le même répertoire de test.

Bien @ toi, à vous
@+Thierry

Je me permets de revenir vers vous car je crois que j'ai un souci.
En effet mon fichier "Fiche entreprise" est un fichier avec une douzaine d'onglets et une dizaine de macros dedans.
Est-ce que c'est possible de générer ces fiches si le modèle est déjà assez lourd?
Désolée de ne pas l'avoir précisé dès le départ...
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Yana , le Forum

Le fait que ce soit un "gros" classeur, ne devrait pas en soit poser de problème, le code de cet algo ne s'interresse qu'à Trois Choses :
VB:
Set WSData = WB.Worksheets("Base de données")
Set WSmatrix = WB.Worksheets("Matrice Fiche Entreprise")
Set RangeData = WSData.Range("B2:B" & WSData.Range("B5000").End(xlUp).Row)

1) La Feuille "Base de données" existe bien
2) La Feuille "Matrice Fiche Entreprise" existe bien (Et formattée pour recevoir les data de B1 à B7)
3) Dans "Base de données", la colonne "B" contient bien les noms des entreprises (sans caractères spéciaux interdits dans le nom d'un fichier)

Une fois ces conditions remplies, tout devrait bien se passer, il faut créer un module séparé,, et que le nom de la Sub n'existe pas déjà "Button1_Click", sinon la renommer.

Essaies sur une copie de ton classeur, dans un répertoire de test, afin de ne rien mettre en péril !

Bien à toi, à vous
@+Thierry
 

Yana

XLDnaute Nouveau
Bonjour @Yana , le Forum

Le fait que ce soit un "gros" classeur, ne devrait pas en soit poser de problème, le code de cet algo ne s'interresse qu'à Trois Choses :
VB:
Set WSData = WB.Worksheets("Base de données")
Set WSmatrix = WB.Worksheets("Matrice Fiche Entreprise")
Set RangeData = WSData.Range("B2:B" & WSData.Range("B5000").End(xlUp).Row)

1) La Feuille "Base de données" existe bien
2) La Feuille "Matrice Fiche Entreprise" existe bien (Et formattée pour recevoir les data de B1 à B7)
3) Dans "Base de données", la colonne "B" contient bien les noms des entreprises (sans caractères spéciaux interdits dans le nom d'un fichier)

Une fois ces conditions remplies, tout devrait bien se passer, il faut créer un module séparé,, et que le nom de la Sub n'existe pas déjà "Button1_Click", sinon la renommer.

Essaies sur une copie de ton classeur, dans un répertoire de test, afin de ne rien mettre en péril !

Bien à toi, à vous
@+Thierry

Je vous remercie pour votre réponse.
Je n'arrive pas à intégrer correctement le fichier modèle de la Fiche (le "gros fichier") dans le code (je place les deux dans le même dossier) :

Dim WB As Workbook, WBnew As Workbook 'fichier base de données
Dim WSData As Worksheet 'onglet base de données
Dim FC As Workbook, FCnew As Workbook 'fichier fiche entreprise
Dim WSmatrix As Worksheet, WSNew As Worksheet 'onglet fiche entreprise
Dim CellData As Range, RangeData As Range
Dim ThePathWB As String
Dim ThePathFC As String
Dim DateFrom As String
Dim Counter As Integer
ThePathWB = ThisWorkbook.Path & "\"
ThePathFC = ThisWorkbook.Path & "\Nom fichier Fiche"

Set WB = ThisWorkbook
Set WSData = WB.Worksheets("Nom onglet BD")
Set WSmatrix = WB.Worksheets("Nom onglet Fiche")

Auriez-vous une idée s'il vous plaît ou je me trompe?

Merci bcp d'avance!
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour Yana
Set WB = ThisWorkbook
Avec cette ligne, tu n'as pas besoin de donner le nom du "Gros Fichier", le code (si il est placé dans un module du "Gros Fichier") saura tout seul avec cette instruction ThisWorkBook qu'il est dans le classeur à traiter.

Cette ligne, ne devrait pas avoir lieu d'être :
Dim FC As Workbook, FCnew As Workbook 'fichier fiche entreprise
Ou alors il y a quelque qui n'est pas comme décrit au départ ?

Normalement, tu ne devrais pas à avoir à déclarer un autre classeur que DEUX :
Dim WB As Workbook, WBnew As Workbook
WB étant celui contenant : La Base de Donné, la Matrice, et l'Algorithme
WBnew étant celui créé à la volée qui sera renommé avec le nom de l'entreprise... Et ainsi de suite...

Y a t'il un troisième classeur en jeu ? Car là je ne comprends pas ?

Idem pour ceci, c'est quoi ce "FC" ?
ThePathFC = ThisWorkbook.Path & "\Nom fichier Fiche"

@+Thierry
 

Yana

XLDnaute Nouveau
Re Bonjour Yana

Avec cette ligne, tu n'as pas besoin de donner le nom du "Gros Fichier", le code (si il est placé dans un module du "Gros Fichier") saura tout seul avec cette instruction ThisWorkBook qu'il est dans le classeur à traiter.

Cette ligne, ne devrait pas avoir lieu d'être :

Ou alors il y a quelque qui n'est pas comme décrit au départ ?

Normalement, tu ne devrais pas à avoir à déclarer un autre classeur que DEUX :
Dim WB As Workbook, WBnew As Workbook
WB étant celui contenant : La Base de Donné, la Matrice, et l'Algorithme
WBnew étant celui créé à la volée qui sera renommé avec le nom de l'entreprise... Et ainsi de suite...

Y a t'il un troisième classeur en jeu ? Car là je ne comprends pas ?

Idem pour ceci, c'est quoi ce "FC" ?


@+Thierry

Bonjour,

Merci bcp pour les explications!
Ok pour le deuxième point - je dois effectivement l'effacer.

Concernant les points 1 et 3, je crois que probablement je n'ai pas été suffisamment claire.
Je pensais au départ placer le générateur dans un fichier ou il n'y aura que l'extraction (base de données). L'objectif étant de ne pas ouvrir le Gros Fichier mais bien l'utiliser comme modèle (aller le chercher avec le chemin indiqué).

+ Point important : je ne peux pas avoir la base de données et la matrice dans le même classeur '(vu les volumes 'informations dans chacun et le niveau de maîtrise d'Excel de mes collègues qui vont devoir utiliser ces outils. Ils utilisent déjà le Gros fichier depuis qq temps, c'est moi qui l'ai construit et je pourrais le retoucher, mais je voudrais l'éviter).

Encore une fois un énorme merci pour votre réactivité et votre aide! Le monde avance grâce aux gens comme vous!

Belle journée!
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Yana, le Forum

Donc si je récapitule :
1) Le Classeur Contenant le Programme de Générateur "Fiches Client" (Disons "Interface")
2) Le "Gros Classeur" Contenant la Base de Données (Disons "DBSource")
3) Le Classeur Contenant la Matrice (Disons "Template")

Soit trois classeurs.

Le 1) va de soit...

Le 2) "DBSource" est-il unique ? et comment/quand comptes-tu faire "l'Extraction" de la base de données vers le 1) ? ( cf: "L'objectif étant de ne pas ouvrir le Gros Fichier....")

Le 3) "Template" est-il unique ou lui même existe en plusieurs version de formats selon différents cas (à spécifier) ?

Parceque tout est possible, mais il faut avoir un schéma conducteur du synopsis....

Bien à toi et bonne journée aussi
@+Thierry
 

Yana

XLDnaute Nouveau
Thierry,
Je pense que la confusion est autour du terme "Gros Fichier" (pour moi le Gros Fichiers est la Fiche Entreprise).
Donc si je récapitule nous avons 2 fichiers :

1. Fiche Entreprise (avec des nombreux onglets et macros dedans) qui inclut la Matrice (synthèse sur l'entreprise) dans un des premiers onglets. Ce fichier entier sert de Template (qui est unique pour absolument tous les cas), mais seulement l'onglet Matrice sera alimenté par le Générateur.
Cette Fiche Entreprise doit être générée pour chaque Entreprise (=une ligne, utilisée dans le Classeur Générateur).

2. Le Classeur Contenant le Programme de Générateur des Fiches Entreprise (qui contient 1 seul onglet probablement : je colle mon extraction brute dedans et j’appuie sur le bouton pour générer les Fiches Entreprise).

L'extraction sera faite très probablement quotidiennement.

J’espère que j'ai répondu à tes question et te remercie de nouveau!
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Yana, Oui, j'essaie de suivre

Alors le plus simple, puisque tu vas toi même faire l'extraction/copie de la BD vers le Générateur des Fiches Entreprise pourquoi ne pas y mettre dedans aussi la "Matrice" , comme ca plus de souci, non ? (Plus besoin d'ouvrir "le gros fichier" pour y copier l'onglet Matrice)

N'est-ce pas juste ?

@+Thierry
 

Yana

XLDnaute Nouveau
@+Thierry

Ce n'est pas suffisant d'avoir que la Matrice (deuxième onglet de la Fiche Entreprise) dans le Générateur car nous avons besoin de dupliquer tout le classeur Fiche Entreprise pour chaque entreprise qui figure dans la BD.
De plus l'onglet Matrice inclut 6 modules VBA, mises en forme conditionnelles, listes déroulantes etc.
 

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 343
Membres
111 107
dernier inscrit
cdel