Opier les données de 3 feuilles dans un autre fichier

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour,
Je dispose de deux fichiers qui sont tous les deux ouverts. Le premier reçoit des informations et les trois dernières feuilles synthétisent ces informations.
Les valeurs contenues dans les trois derniers onglets sont copiées dans le deuxième fichier.
J’ai fait des petites macros de copie pour chacun des trois derniers onglets qui copient les valeurs vers chaque feuille du deuxième fichier. Je suis donc obligé de recommencer cette opération 3 fois.
Serait-il possible de ne réaliser qu’une macro qui effectue ces trois copies de valeurs en même temps et qui effectue les copies dans des cellules prédéfinies de chacun des trois feuilles du fichier destinataire.
J’ai réalisé un exemple raccourci de mon problème au moyen de deux fichiers :
Données Essai.xlsm (fichier source)
ExportEssai.xlsx (fichier destinataire)
Je ne sais si quelqu’un pourra m’aider, mais j’en serai ravi.
Mille mercis d’avance !
 

Pièces jointes

  • Données Essai.xlsm
    22.3 KB · Affichages: 9
  • ExportEssai.xlsx
    9.9 KB · Affichages: 5
Solution
Re

La précédente macro n'était qu'un exemple.
Une "accroche" pour que le demandeur mette les mains dans le cambouis ;)
Et finisse par exemple à écrire ceci dans son VBE ;)
Code:
Sub Test_II()
Dim Wbk As Workbook
Dim F, D, Pg, i%
F = Array("Données1", "Données2", "Données3")
D = Array("Export1", "Export2", "Export3")
Pg = Array("B5:B10", "A7:D9", "B7:C9")
On Error Resume Next
Set Wbk = Application.Workbooks("ExportEssai.xlsx")
If Wbk Is Nothing Then
MsgBox "Le classeur ExportEssai n'est pas ouvert!", vbCritical, "Erreur"
Else
MsgBox "Le classeur ExportEssai est ouvert", vbInformation
For i = LBound(F) To UBound(F)
Workbooks("ExportEssai.xlsx").Sheets(D(i)).Range(Pg(i)).Value = Sheets(F(i)).Range(Pg(i)).Value
Next
End If
End Sub

Staple1600

XLDnaute Barbatruc
Bonsoir Constantin (et bienvenue sur XLD)

Une possibilité de macro
(test OK sur tes fichiers)
Code:
Sub Copie123_ok()
Dim F, D, Pg, i%
F = Array("Données1", "Données2", "Données3")
D = Array("Export1", "Export2", "Export3")
Pg = Array("B5:B10", "A7:D9", "B7:C9")
For i = LBound(F) To UBound(F)
Workbooks("ExportEssai.xlsx").Sheets(D(i)).Range(Pg(i)).Value = Sheets(F(i)).Range(Pg(i)).Value
Next
End Sub
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Merci infiniment JM, ça marche bien ! J'avais réussis à pondre quelque chose avec la fonction Call qui marche aussi mais qui, comparé à la clarté de votre proposition ressemblait vraiment à une usine à gaz...
Si je peux abuser encore un peu de vos compétences ?
Dans la macro de copie de valeurs multiples, je voudrai afficher un message signalant que le fichier ExportEssai n'est pas ouvert... Problème, je ne peux connaitre et renseigner le chemin vu que chaque utilisateur copiera ces fichiers dans le répertoire de son choix. Toutes les solutions que j'ai explorées nécessitent de fait de renseigner le chemin...

Bon week-end et merci encore !

PC
 

Staple1600

XLDnaute Barbatruc
Bonjour

Je laisse tester (sans se préoccuper du chemin ;))
Code:
Sub Test_I()
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Application.Workbooks("ExportEssai.xlsx")
If Wbk Is Nothing Then
MsgBox "Le classeur ExportEssai n'est pas ouvert!", vbCritical, "Erreur"
Else
MsgBox "Le classeur ExportEssai est ouvert", vbInformation
End If
End Sub
Sub Test_II()
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Application.Workbooks("ExportEssai.xlsx")
MsgBox "Le classeur ExportEssai " & IIf(Wbk Is Nothing, "n'est pas", "est") & " ouvert", vbInformation
End Sub
PS: Ensuite tu as le choix de la macro, selon tes goûts esthétiques ;)
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Rebonjour JM,
Tout d'abord un grand merci pour ta réactivité et la qualité de tes réponses. Là, c'est sûr, je n'aurai pas trouvé ça tout seul !
Pardonne-moi pour avoir tardé à te répondre lors de notre premier échange. Par le passé, Excel-Downloads me signalait par messagerie qu'un membre m'avait répondu. Maintenant, plus rien et la recherche dans ce forum n'est pas très conviviale.
Mais bon le principal est qu'on puisse échanger.
Je vais tester tes macros cet après-midi ou au plus tard demain (ma femme voit d'un mauvais œil le fait que je bosse durant mes week-end...

Bon week-end et encore mille mercis !

Pierre Constantin
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour

Je laisse tester (sans se préoccuper du chemin ;))
Code:
Sub Test_I()
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Application.Workbooks("ExportEssai.xlsx")
If Wbk Is Nothing Then
MsgBox "Le classeur ExportEssai n'est pas ouvert!", vbCritical, "Erreur"
Else
MsgBox "Le classeur ExportEssai est ouvert", vbInformation
End If
End Sub
Sub Test_II()
Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Application.Workbooks("ExportEssai.xlsx")
MsgBox "Le classeur ExportEssai " & IIf(Wbk Is Nothing, "n'est pas", "est") & " ouvert", vbInformation
End Sub
PS: Ensuite tu as le choix de la macro, selon tes goûts esthétiques ;)

Rebonjour JM,
J'ai opté pour la première proposition. J'ai recopié le code en début de ma macro. Çà fonctionne très bien. Juste un petit problème, si le fichier destinataire n'est pas ouvert, le message d'erreur s'affiche bien, mais quand je clique sur OK, la macro continue de se dérouler et m'affiche que les copies ont bien été effectuées, bien que ce ne soit pas le cas. Serait-il possible de bloquer la macro en cas de non ouverture du fichier destinataire et d'inviter l'utilisateur à ouvrir ce fichier ?
Je ne connais pas suffisamment les possibilités de Msgbox et mes recherches n'ont pas donné grand chose (ou alors, je ne n'ai pas tout compris...)
Si tu peux m'aider, je suis preneur!
A bientôt...
Pierre Constantin
 

Staple1600

XLDnaute Barbatruc
Re

La précédente macro n'était qu'un exemple.
Une "accroche" pour que le demandeur mette les mains dans le cambouis ;)
Et finisse par exemple à écrire ceci dans son VBE ;)
Code:
Sub Test_II()
Dim Wbk As Workbook
Dim F, D, Pg, i%
F = Array("Données1", "Données2", "Données3")
D = Array("Export1", "Export2", "Export3")
Pg = Array("B5:B10", "A7:D9", "B7:C9")
On Error Resume Next
Set Wbk = Application.Workbooks("ExportEssai.xlsx")
If Wbk Is Nothing Then
MsgBox "Le classeur ExportEssai n'est pas ouvert!", vbCritical, "Erreur"
Else
MsgBox "Le classeur ExportEssai est ouvert", vbInformation
For i = LBound(F) To UBound(F)
Workbooks("ExportEssai.xlsx").Sheets(D(i)).Range(Pg(i)).Value = Sheets(F(i)).Range(Pg(i)).Value
Next
End If
End Sub
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Merci JM pour le tuyau pour consulter mes réponses.
Merci aussi pour la macro, mais j'avoue ne pas avoir tout compris... Tu vois le niveau ?
Je vais reproduire et adapter ce contenu qui, si je comprends bien, compile mes deux demandes.

Le temps d'ouvrir le capot et je m'y mets !!!

Bonne journée mais sans doute à demain parce que ma femme m'a surpris en flagrant délit de travail hors horaires. Et bien entendu, elle m'a trouvé du bricolage à faire.
Bon dimanche !
 

Staple1600

XLDnaute Barbatruc
Re

"Ce que femme veut, Dieu le veut"

Merde, je suis athée !
(depuis la scission d'Amon Düül)

Donc je peux continuer à titiller mon VBA dominical ;) sans craindre les fourches caudines d'une gente dame
(égarée dans ma salle bureautique, appelée par des tiers: La Cellule Sacrée du Grand Tableur)

PS: Passe le bonjour à Madame.
 
Dernière édition:

Constantin

XLDnaute Occasionnel
Supporter XLD
Re

"Ce que femme veut, Dieu le veut"

Merde, je suis athée !
(depuis la scission d'Amon Düül)

Donc je peux continuer à titiller mon VBA dominical ;) sans craindre les fourches caudines d'une gente dame
(égarée dans ma salle bureautique, appelée par des tiers: La Cellule Sacrée du Grand Tableur)

PS: Passe le bonjour à Madame.
Je n'y manque pas ! Par contre, je n'ai jamais entendu parler d'Amon Düül.
J'ai hâte d'être à demain pour tester ta macro.

Au plaisir d'échanger à nouveau avec toi.

Pierre Constantin
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Très sympa, un peu longuet mais je préfère ça à la soupe de Viannet et celle de Doré...

Merci de cette attention. Je mourrai moins bête ce soir (si je dois mourir ce soir. En fait, malgré mes 64 ans à venir, je ne suis pas pressé surtout quand on croise d'une façon ou d'une autre des gens super). Tu en fais partie !

Je passe en cuisine... A demain !

Pierre
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour JM,

Je suis au bureau et j'ai pu adapter et tester ta belle macro. J'ai ajouté quelques lignes de code pour repositionner l'utilisateur sur le fichier destinataire et annoncer le succès de l'exportation. Ca marche super bien !
Sincèrement, je n'aurai pu m'en sortir tout seul. Mille mercis,
A bientôt peut-être ?

Pierre
 

Discussions similaires

Statistiques des forums

Discussions
312 187
Messages
2 086 024
Membres
103 097
dernier inscrit
Benduch