Transfert de données d'un classeur A vers un classeur B

Lancelot

XLDnaute Nouveau
Bonjour à tous,

Tout d'abord merci pour ce forum extrêmement vivant, j'y trouve généralement toutes les réponses dont j'ai besoin.

Cette fois-ci, et après avoir fait plusieurs recherches, je reste sans solution.

Mon problème est particulièrement épineux (pour mon niveau, LOL). Et je vais tenter l'incroyable gagure de l'expliquer :)

J'ai donc deux classeurs de suivi de données diverses et variées.
Dans chacun de ces classeurs, il y a des macros qui tournent.
L'une de ces macros permet la création d'une nouvelle ligne de données (à la fin du tableau de suivi) sous forme d'un Userform. Cette macro est identique dans les classeurs A et B puisqu'elle fait la même chose, à l'exception près que les données se rapportent à des sujets légèrement différents.

En imaginant que l'utilisateur est dans le classeur A et crée une nouvelle ligne, je souhaite que, si l'utilisateur le demande (on peut imaginer qu'il coche une tickbox), certaines de ces données soient réutilisées pour la création d'une nouvelle ligne dans le classeur B, et pour être tout à fait clair, les données seraient réutilisées au chargement du Userform de création de ligne du classeur B.

En d'autres termes, il faudrait que je trouve un moyen de stocker des données saisies dans le classeur A dans des variables réutilisables dans la marco du classeur B.

Je suis en train de faire des tests dans des classeurs tests et simplifiés pour trouver le principe mais je sèche un peu compte tenu de mes maigres connaissances. :D

J'ai bien lu des trucs sur la déclaration de variables publiques mais cela reste obscure quant à leur utilisation.

Je continue de bosser le sujet sur des fichiers tests et dès que j'ai un truc représentatif je l'ajouterai au message afin d'illustrer le problème.

En attendant, si une âme charitable peut me donner une piste ou deux, je suis vraiment preneur.

Merci.
 

mécano41

XLDnaute Accro
Re : Transfert de données d'un classeur A vers un classeur B

Bonjour,

Une idée comme une autre...regarde ce que tu peux en faire...

Voici deux fichiers :

-le premier, "Mémorisation...." est le fichier maître. Les choix sont mémorisés (et restitués à l'ouverture suivante de l'USF mais cela ne te sera pas forcément nécessaire (ou bien via un bouton "Rappel de la dernière saisie" par ex.).

- le second, "Transfert..." comporte la même USF mais à l'ouverture, celle-ci présente les choix effectués dans l'USF de l'autre fichier (ce fichier doit être ouvert). Il s'agit des choix issus de la dernière validation.

Cordialement
 

Pièces jointes

  • Transfert variables entre fichiers par noms cachés.zip
    42.4 KB · Affichages: 37

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

J'ai joué avec les deux fichiers et cela répond effectivement super bien au besoin.
C'est vraiment génial comme solution ! Merci.

L'adaptation dans mes fichiers est par contre un casse tête.
Donc, pour être sûr que je comprenne le principe:
- tu crées des noms dans lesquels est stocké l'information,
- les noms sont alors disponibles tant que le fichier est ouvert.

Questions:
- Est ce que les noms perscistent après fermeture du fichier?
- Si oui, comment peut-on les supprimer?

Complément:
- Je souhaiterai que le fichier "transfert..." s'ouvre tout seul si un tickbox est cochée dans le premier fichier ("mémorisation...") et du coup que la macro du fichier 2 ("transfert...") se lance toute seule plutôt que d'appuyer sur "ouvrir", est-ce possible?

Sinon, j'ai joint 2 fichiers tests et n'ayant pas eu l'idée proposée j'ai rapidement été bloqué.
Le mieux que j'ai réussi à faire était un copier/coller dans le 2ème fichier mais sans pouvoir récupérer les données pour lancer la macro et donc modifier les colonnes pour l'applicabilité (colonnes donnée A donnée B donnée C) qui ne sont pas les mêmes que dans le fichier Classeur1.

Je vais donc tenter l'implémentation de ta solution dans ces deux fichiers pour voir ce que je peux obtenir.


Encore une fois merci de ton aide.
 

Pièces jointes

  • Classeur2.xlsm
    24.6 KB · Affichages: 41
  • Classeur1.xlsm
    27.7 KB · Affichages: 44
  • Classeur2.xlsm
    24.6 KB · Affichages: 38
  • Classeur1.xlsm
    27.7 KB · Affichages: 45
  • Classeur2.xlsm
    24.6 KB · Affichages: 43
  • Classeur1.xlsm
    27.7 KB · Affichages: 46

mécano41

XLDnaute Accro
Re : Transfert de données d'un classeur A vers un classeur B

Bonjour,

Questions:
- Est ce que les noms persistent après fermeture du fichier?
- Si oui, comment peut-on les supprimer?

Oui, c'est le principe même...

Pour supprimer un nom (par ex. MemNom dans mon fichier) :

Code:
Workbooks("Mémorisation par noms cachés.xlsm").Names("MemNom").Delete


Complément:
- Je souhaiterai que le fichier "transfert..." s'ouvre tout seul si un tickbox est cochée dans le premier fichier ("mémorisation...") et du coup que la macro du fichier 2 ("transfert...") se lance toute seule plutôt que d'appuyer sur "ouvrir", est-ce possible?

A l'examen de tes fichiers et des commentaires ci-dessus, je me demande si j'ai bien compris et si ce que je te propose est bien nécessaire.

Si tu es dans le classeur 1 par ex. et que tu entres par l'USF (Userform) des valeurs que tu reportes dans la feuille de ce classeur (et qui y sont donc mémorisées), pourquoi ne pas envoyer par un clic les mêmes valeurs dans la feuille du classeur 2, sans passer par son USF ? (tu peux faire la même chose par un clic dans l'USF du classeur 2 si nécessaire....) ou bien, si tu tiens à aller dans le classeur 2 et ouvrir son USF, pourquoi ne pas aller chercher les données dans la feuille du classeur 1?

Je crains que tu sois en train de te compliquer la vie...

Cordialement
 

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

Ah bin, je me complique la vie parce que pour l'instant je ne sais pas faire autrement :)

Par ailleurs, il faut bien avoir en tête que je ne suis pas programmeur (m'enfin ça, ça se voit) et que tout ce que j'ai fait est un assemblage de connaissance empiriques à partir de l'enregistreur de macro et de documentation sur le net (notamment ici).

L'idée générale est que l'on soit dans le classeur 1 ou dans le classeur 2, le sujet peut être commun au deux fichiers mais pouvant avoir des impacts différents (exemple: dans le classeur 1 seul la donnée A est affectée tandis que dans le classeur 2 les données B et C le sont) et seul l'utilisateur a la connaissance pour définir les impacts dans l'un ou l'autre des fichiers.

En d'autres termes, je souhaite éviter la double saisie des éléments communs aux deux fichiers mais autoriser la sélection des impacts.

Donc effectivement, c'est une très bonne idée d'activé le USF du classeur 2 à partir du USF du classeur 1 (et vice versa), je ne savais pas que c'était possible. Mais cela me pose plusieurs difficultés:
- comment fait-on appeler un USF d'un autre classeur s'il n'est pas encore ouvert?
- et comment faire pour lancer le USF du classeur 2 en ayant les champs Réf, titre et synthèse renseigné à son ouverture?
 

mécano41

XLDnaute Accro
Re : Transfert de données d'un classeur A vers un classeur B

Donc effectivement, c'est une très bonne idée d'activé le USF du classeur 2 à partir du USF du classeur 1 (et vice versa), je ne savais pas que c'était possible. Mais cela me pose plusieurs difficultés:
- comment fait-on appeler un USF d'un autre classeur s'il n'est pas encore ouvert?
- et comment faire pour lancer le USF du classeur 2 en ayant les champs Réf, titre et synthèse renseigné à son ouverture?

Ce n'est pas ce que j'ai dit. J'ai suggéré d'écrire dans la feuille de l'autre classeur ouvert sans ouvrir son USF ; par ex. , en écrivant ceci dans le code du Classeur1 on copie ce qui est en F10 du classeur 1 dans la cellule A1 du classeur 2

Code:
    Dim Acopier As String
    Acopier = Range("F10")
    Windows("Classeur2").Activate
    Range("A1") = Acopier
    Windows("Classeur1").Activate

évidemment, à la place de =Range("F10") tu pourrais avoir =Textbox1.value par ex. et ce code serai intégré à la validation de ton USF (après contrôle de la validité des valeurs saisies sinon, il faudrait corriger les erreurs dans les deux fichiers)

Je disais que c'était peut-être suffisant et que cela pouvait se faire de manière identique pour écrire automatiquement dans le classeur 1 depuis le classeur 2 si nécessaire...

Cordialement
 

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

Cela correspond pas exactement à ce que je cherche à faire du fait que j'ai besoin que l'utilisateur intervienne également sur le classeur 2, si celui-ci était sur le classeur 1. Notamment pour modifier éventuellement un peu le texte et surtout pour les impacts (donnée A, B ou C).

Je suis encore en train de modifier mes deux fichiers avec les nouvelles idées que tu m'as données je fais suivre dès que cela fonctionne à peu près.
 

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

J'ai tenté un truc avec la commande windows("classeur1").activate et j'ai une erreur 9: l'indice n'appartient pas à la sélection.

Je mets les fichiers en pièce jointe.
 

Pièces jointes

  • Classeur2.xlsm
    29.8 KB · Affichages: 30
  • Classeur1.xlsm
    33 KB · Affichages: 35
  • Classeur2.xlsm
    29.8 KB · Affichages: 35
  • Classeur1.xlsm
    33 KB · Affichages: 38
  • Classeur2.xlsm
    29.8 KB · Affichages: 33
  • Classeur1.xlsm
    33 KB · Affichages: 32

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

Bon alors là, je ne suis pas loin d'obtenir ce que je veux.
J'ai un souci lorsque je rentre dans le deuxième USF, j'ai un message d'erreur me disant que le classeur 1 (ou 2) est déjà ouvert, forcément là plante tout.
 

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

Bon bin voilà. Ca marche.
Alors c'est sûr c'est pas forcément super élégant en terme de programmation mais ça fonctionne.

Maintenant, il faut que je vérifie la compatibilité de tout ça avec un stockage de ces fichiers sur un réseau. j'espère qu'il n'y aura pas de souci

Je mets les fichiers finaux histoire de montrer ce que j'attendais.

Un gros merci à toi mécano41!
 

Pièces jointes

  • Classeur1.xlsm
    35.2 KB · Affichages: 49
  • Classeur2.xlsm
    34.4 KB · Affichages: 45
  • Classeur1.xlsm
    35.2 KB · Affichages: 48
  • Classeur2.xlsm
    34.4 KB · Affichages: 47
  • Classeur1.xlsm
    35.2 KB · Affichages: 44
  • Classeur2.xlsm
    34.4 KB · Affichages: 47

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

Re-Bonjour,

Bon je suis embêté, j'ai adapté tout le travail fait ici en fonction des conseils de Mécano41 mais la ligne
Code:
Application.Run "nom du fichier excel.xlsm!Copie_FT2"
ne semble pas faire quoi que ce soit;
quelqu'un aurait une idée?
 

Lancelot

XLDnaute Nouveau
Re : Transfert de données d'un classeur A vers un classeur B

Après avoir désactivé ma commande 'on error resume next', j'ai un message d'erreur 1004 me disant qu'il n'est pas possible de lancer la macro copie_FT2 car soit elle n'est pas disponible soit les macros sont désactivées.
Je ne sais pas quoi faire. Quelqu'un a-t-il une suggestion?
 

Discussions similaires

Réponses
45
Affichages
1 K

Statistiques des forums

Discussions
312 203
Messages
2 086 192
Membres
103 152
dernier inscrit
Karibu