Enregistrer des données d'un formulaire vers un ensemble d'autres classeurs
Bonjour,
Lorsque l'on veut inscrire des données dans un Worksheet, comment l'activer ou le sélectionner par son nom désigné par une variable qui correspond à la valeur d'une cellule?
Après avoir réussi à ouvrir un workbook dont le nom est désigné dans le contenu d'une cellule, pourquoi le code suivant ne fonctionne il pas ?
-> Dim mafeuille As Worksheet
contenuB5 = Range("B5").Value 'this workbook
mafeuille = monclasseur.Worksheets("contenuB5") 'monclasseur est le workbook destination et mafeuille la worksheet de destination
mafeuille.Activate
Ci-dessous mes explications un peu plus fastidieuses :
J’ai créé un classeur excel"macst.xlsm" avec un onglet "source" qui ne sert qu'à contenir un formulaire pour saisir des données affectées à 10 variables.
Je souhaite enregistrer directement ces données dans des classeurs autres que celui qui contient mon userform (autre que ce qui est actif?).
Mes fichiers de destination sont une cinquantaine de classeurs Excel différents situés dans un même répertoire (dossier de fichiers .xlsx) avec un grand nombre de worksheet mais tous conçus exactement de la même manière.
Pour désigner un classeur de destination spécifique, dans mon classeur "macst" sur mon onglet "source" j'ai inscrit en B4 le nom du classeur destination et en B5 le nom de l'onglet/worksheet de destination. Dans ma macro mon code est :
Dim monclasseur As Workbook
contenuB4 = Range("B4").Value
Set monclasseur = Workbooks.Open(Filename:="\\C:\Users\Channel\Documents\06. PRODUCTION & OPTIMISATION\06. VBA test\" & contenuB4 & ".xlsx")
Ce qui fonctionne et m'ouvre le classeur de destination choisi
Dim mafeuille As Worksheet
contenuB5 = Range("B5").Value 'this workbook
mafeuille = monclasseur.Worksheets("contenuB5")
mafeuille.Activate
Ce qui ne fonctionne pas et ne m'ouvre pas l'onglet correspondant ... sachant que mes onglets ont des noms numériques
La suite de mon code pour enregistrer mes données dans des cellules à partir de mes variables fonctionne :
Range("A8").Value = dhab
Range("B8").Value = refpo
Range("C8").Value = cx
etc...
Mais les données ne s'exportent pas là où je le souhaite.
Si j'écris : Worksheets("9900").Activate cela marche et m'ouvre l'onglet "9900" dans le bon classeur de destination mais ne me permet pas de changer le nom de l'onglet au fur et à mesure des différentes saisies
Si j'écris :Worksheets("contenuB5").Activate cela marche mais enregistre les données dans l'onglet actif "source" du classeur de la macro "macst"
1) Je n'arrive donc pas à faire le lien entre mon classeur de destination et son onglet de manière à l'activer, le sélectionner, écrire dessus...
2) Je ne suis pas très douée en syntaxe VBA car je ne comprends pas pourquoi on ne pourrait pas écrire : monclasseur.Worksheets("contenuB5").activate
1) Je n'arrive donc pas à faire le lien entre mon classeur de destination et son onglet de manière à l'activer, le sélectionner, écrire dessus...
2) Je ne suis pas très douée en syntaxe VBA car je ne comprends pas pourquoi on ne pourrait pas écrire : monclasseur.Worksheets("contenuB5").activate
Bonjour chanelausie ,
il n'est pas nécessaire d'activer un classeur et tel onglet pour y transférer une donnée,
il faut déclarer les objets
par exemple
Dim wk1 As Workbook, wk2 As Workbook
Dim sh1 As Worksheet, sh2 As Worksheet
Set wk1 = Workbooks("source.xlsm")
Set wk2 = Workbooks("destnation.xlsm")
Set sh1 = wk1.Sheets("Feuil1")
Set sh2 = wk2.Sheets("Feuil1")
sh2.Range("A1") = sh1.Range("A1").Valueil faut adapter le nom des objets classeur (Workbook) et nom des objets onglet (Worksheet)