Créer un classeur à partir des données d'un autre [Fermé]

Signaler
Messages postés
64
Date d'inscription
mardi 13 décembre 2016
Statut
Membre
Dernière intervention
9 septembre 2019
-
Messages postés
64
Date d'inscription
mardi 13 décembre 2016
Statut
Membre
Dernière intervention
9 septembre 2019
-
Bonjour,

est ce que quelqu'un peut m'aider à améliorer et à poursuivre le code ci-dessous ?

Private Sub CommandButton1_Click()
CommandButton1.Caption = "Créer le protocole"

Sheets(Array("Protocole_1", "Protocole_1_bis")).Copy


Dim WbSource As Workbook ' Objet Workbook pour le classeur source
Dim WbDest As Workbook ' Objet Workbook pour le classeur destination

Set WbDest = ActiveWorkbooks

Set WbSource = Workbooks("Créer_Protocole.xlsm")

WbDest.Sheets("Protocole_1").Range("J4").Value = WbSource.Sheets("Générer_le_protocole").Range("A2").Value
WbDest.Sheets("Protocole_1").Range("A9").Value = WbSource.Sheets("Générer_le_protocole").Range("B2").Value
WbDest.Sheets("Protocole_1").Range("F9").Value = WbSource.Sheets("Générer_le_protocole").Range("C2").Value
WbDest.Sheets("Protocole_1").Range("A14").Value = WbSource.Sheets("Générer_le_protocole").Range("D2").Value
WbDest.Sheets("Protocole_1").Range("F14").Value = WbSource.Sheets("Générer_le_protocole").Range("E2").Value
WbDest.Sheets("Protocole_1").Range("H14").Value = WbSource.Sheets("Générer_le_protocole").Range("F2").Value

WbDest.Sheets("Protocole_1_bis").Range("J4").Value = WbSource.Sheets("Générer_le_protocole").Range("A2").Value
WbDest.Sheets("Protocole_1_bis").Range("A9").Value = WbSource.Sheets("Générer_le_protocole").Range("B2").Value
WbDest.Sheets("Protocole_1_bis").Range("F9").Value = WbSource.Sheets("Générer_le_protocole").Range("C2").Value
WbDest.Sheets("Protocole_1_bis").Range("A14").Value = WbSource.Sheets("Générer_le_protocole").Range("D2").Value
WbDest.Sheets("Protocole_1_bis").Range("F14").Value = WbSource.Sheets("Générer_le_protocole").Range("E2").Value
WbDest.Sheets("Protocole_1_bis").Range("H14").Value = WbSource.Sheets("Générer_le_protocole").Range("F2").Value

End Sub



Je souhaite à partir d'un classeur source enregistrer dans un lieu précis créer d'autres classeurs.
La feuille "Générer_le_protocole" du classeur source "Créer_ protocole" regroupe les informations pour remplir le nouveau classeur. Et les feuilles Protocole_1 , Protocole_1_bis servent de modèle pour la mise en forme des nouveaux classeurs (Ces deux feuilles seront présentes dans le nouveau classeur).

Objectif:
lorsque je clique sur le bouton "Créer le protocole" et je sélectionne l'échantillon e relatif au Projet 1 (ligne 4 feuille Générer le protocole Classeur source=Créer Protocole) par le biais d'une Inputbox ou quelque chose de se type un classeur doit s'ouvrir avec le nom Projet1_échantillon_e avec les feuilles Protocol_1 et Protocol_1_bis. du classeur source sauf que ces deux feuilles sont préremplis à partir des données saisis dans la feuille "Générer_le_protocole" du classeur source.

J'ai joint le classeur source et le classeur que je souhaiterai obtenir si je sélectionne par l'exemple l'échantillon du projet A.

Ma gestion des deux classeurs est pour le moment hasardeuse et je sais pas comment nommer le nouveau classeur tel que je le souhaiterais.
J'arriver à copier/coller les données entre le classeur source et le nouveau mais seulement pour une ligne défini car le code est écrit en dur..


https://www.cjoint.com/c/HJvkDwN8QAc : classeur source
https://www.cjoint.com/c/HJvkEb4Wmnc : classeur crée à partir du classeur source

2 réponses

Messages postés
15243
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2021
834
bonjour, il me semble plus simple d'avoir un classeur modèle pour les nouveaux classeurs.
ton code pourra ouvrir ce classeur, le remplir, puis faire "enregistrer sous" le nom final du nouveau classeur.
tu te demandes comment copier les données sans avoir le numéro de la ligne en dur dans le code. j'ai l'impression que tu as fait un exemple très confus: tu as choisi de mettre des "AAA" partout, pour nous empêcher de distinguer les valeurs. de plus, si je vois bien, ton exemple est basé sur la ligne 4, et ton code est pour la ligne 2.
je pense qu'il suffit d'utiliser une variable avec le numéro de ligne source, exemple de code:
Dim WbSource As Workbook, WbDest As Workbook
Dim numl As Long

Set WbSource = ThisWorkbook
Set WbDest = Workbooks.Open(ThisWorkbook.Path & "\Modele-échantillon" & ".xlsx")
numl = 4
WbDest.Sheets("Protocole_1").Range("J4").Value = _
    WbSource.Sheets("Générer_le_protocole").Cells(numl, 1).Value
WbDest.SaveAs (ThisWorkbook.Path & "\nouveau" & CStr(numl) & ".xlsx")
WbDest.Close
Messages postés
64
Date d'inscription
mardi 13 décembre 2016
Statut
Membre
Dernière intervention
9 septembre 2019

Merci du coup de main.
Je vais regarder ton code de plus près et je te tiens au courant.