Résolu 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!
 
Ce fil a été résolu! Aller à la solution…

Fichiers joints

_Thierry

XLDnaute Barbatruc
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
 

Fichiers joints

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
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
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
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
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.
 

_Thierry

XLDnaute Barbatruc
Ouh là là ça se complique...

Il a quelle "gueule" alors ce classeur :

car nous avons besoin de dupliquer tout le classeur Fiche Entreprise pour chaque entreprise
Car là on s'écarte bien de la demande initiale ... Combien d'onglets seront à dupliquer etc ...
Je me perds maintenant...

@+Thierry
 

_Thierry

XLDnaute Barbatruc
Ouh là là ça se complique...

Il a quelle "gueule" alors ce classeur :

Car là on s'écarte bien de la demande initiale ... Combien d'onglets seront à dupliquer etc ...
Je me perds maintenant...

@+Thierry
En fait c'est dupliquer le Classeur entier que tu veux faire ? Mais le personaliser à une entreprise à chaque fois ? Right ?

@+Thierry
 

Yana

XLDnaute Nouveau
En fait c'est dupliquer le Classeur entier que tu veux faire ? Mais le personaliser à une entreprise à chaque fois ? Right ?

@+Thierry
Oui, exact. c'est ce que je disais:
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.

La fiche Entreprise a 21 onglet.....
 

_Thierry

XLDnaute Barbatruc
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 "Gros Fichier Source" n'est ouvert par mon code. Il n'y a donc aucun risque d'alération du fichier source. Je n'en fais que des copies à la volée avec "FileCopy" sans toucher l'original.
Par contre nous sommes bien d'accord, le "Gros Fichier Source" parmis tous ces 21 onglets contient bien celui qui nous interresse : "Matrice Fiche Entreprise", si il se nomme autrement, il faut corriger dans le code dans cette partie :

VB:
'================================================================================================================================
' Informations à remettre dans le context réel..... TOUT DOIT EXISTER
ThePath = ThisWorkbook.Path & "\"
Source = ThePath & "XLD_florian333_Fichier_sources_Planning-1_v00.xlsm"  'C'est pour simuler le gros fichier avec des macro......
Destination = ThePath
WSmatrix = "Matrice Fiche Entreprise"
Set WB = ThisWorkbook
Set WSData = WB.Worksheets("Base de données")
'================================================================================================================================
Idem pour le "Gros Fichier Source" qui ne se nommera pas "XLD_florian333_Fichier_sources_Planning-1_v00.xlsm" et que tu renommera à ta guise plus tard.

Pour tester, tu prépares un répertoire de Test sur ton disque dûr et tu dézippes les deux fichiers dedans. Tu ouvres le XLD_YANA_Données_Generator_Enterprise_Files_v01.xlsm et tu verra ce qui se passe...

Les fichiers doivent être vraiment Extraits/Décompressés (pas uniquement ouvert à l'intérieur du Zip) et donc les deux fichiers dans le même répertoire.

Tu me diras si celà correspond mieux à ce dont tu rêvais ... ;)

PS j'ai fait aussi une gestion d'erreur qui devrait t'aider au cas où...

Bien à toi, à vous
@+Thierry
 
Ce message a été identifié comme étant une solution!

Fichiers joints

Yana

XLDnaute Nouveau
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 "Gros Fichier Source" n'est ouvert par mon code. Il n'y a donc aucun risque d'alération du fichier source. Je n'en fais que des copies à la volée avec "FileCopy" sans toucher l'original.
Par contre nous sommes bien d'accord, le "Gros Fichier Source" parmis tous ces 21 onglets contient bien celui qui nous interresse : "Matrice Fiche Entreprise", si il se nomme autrement, il faut corriger dans le code dans cette partie :

VB:
'================================================================================================================================
' Informations à remettre dans le context réel..... TOUT DOIT EXISTER
ThePath = ThisWorkbook.Path & "\"
Source = ThePath & "XLD_florian333_Fichier_sources_Planning-1_v00.xlsm"  'C'est pour simuler le gros fichier avec des macro......
Destination = ThePath
WSmatrix = "Matrice Fiche Entreprise"
Set WB = ThisWorkbook
Set WSData = WB.Worksheets("Base de données")
'================================================================================================================================
Idem pour le "Gros Fichier Source" qui ne se nommera pas "XLD_florian333_Fichier_sources_Planning-1_v00.xlsm" et que tu renommera à ta guise plus tard.

Pour tester, tu prépares un répertoire de Test sur ton disque dûr et tu dézippes les deux fichiers dedans. Tu ouvres le XLD_YANA_Données_Generator_Enterprise_Files_v01.xlsm et tu verra ce qui se passe...

Les fichiers doivent être vraiment Extraits/Décompressés (pas uniquement ouvert à l'intérieur du Zip) et donc les deux fichiers dans le même répertoire.

Tu me diras si celà correspond mieux à ce dont tu rêvais ... ;)

PS j'ai fait aussi une gestion d'erreur qui devrait t'aider au cas où...

Bien à toi, à vous
@+Thierry
Un grand merci ! Des codes encore à adapter mais je vois déjà que ça convient parfaitement pour mon cas!
Seule petite question : je ne trouve pas comment annuler le changement du nom de l'onglet de la Matrice (Matrice -> Nom Ent)? Le fait de changer le nom de l'onglet bloque les macros qui sont dedans.
Encore un fois grand merci!!!
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas