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").Value

il faut adapter le nom des objets classeur (Workbook) et nom des objets onglet (Worksheet)

Rechercher des sujets similaires à "enregistrer donnees formulaire ensemble classeurs"