Envoyer des données et lancer une macro sur un autre fichier excel fermé

flipy

XLDnaute Nouveau
Bonjour,

Je suis grande débutante en macro sur excel, et je rencontre quelques petits problèmes… Je vous explique…

J’ai un fichier excel (Fichier A) qui comporte toutes mes données. Je veux que ce fichier comporte aussi les VALEURS des résultats du calcul, pour 100 situations différentes.
J’ai un second fichier excel (Fichier B) qui permet de réaliser mon calcul pour une seule situation, via une macro.

Mon problème est le suivant :
Je souhaiterai, via une macro de mon fichier A, copier les données de certaines cellules du fichier A dans le fichier B pour ma première situation, lancer la macro qui permet de réaliser le calcul dans le fichier B, et ensuite copier les valeurs des résultats (1 ou 2 cellules) dans mon fichier A, puis recommencer l’opération pour mes 100 situations différentes (puisque le fichier B ne peut prendre en compte qu’une situation à la fois)… Tout ça à partir d’une macro dans le fichier A.

Je sais comment faire pour renouveler la manip autant de fois que j’ai de situation, mais mon gros problème est que je ne sais pas comment envoyer des données de mon fichier ouvert (fichier A) à mon fichier B, lancer la macro de calcul du fichier B et récupérer les résultats du fichier B pour les coller sur le fichier A.

Je m’emmêle un peu les pinceaux, j’espère que j’ai été un minimum claire. Et si qq’un à une idée à proposer pour m’aider je suis preneuse avec grand plaisir ! :)

Merci d’avance
 

Pièces jointes

  • Fichier A.xlsm
    21.7 KB · Affichages: 26
  • Fichier B.xlsm
    12.4 KB · Affichages: 24
  • Fichier A.xlsm
    21.7 KB · Affichages: 22
  • Fichier B.xlsm
    12.4 KB · Affichages: 27
  • Fichier A.xlsm
    21.7 KB · Affichages: 19
  • Fichier B.xlsm
    12.4 KB · Affichages: 24
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Bonjour Flipy et bienvenue, bonjour le forum,

Puisque tu es nouvelles parmi nous je te recommande de lire la Lien supprimé qui donne tous les bons plans pour obtenir de l'aide rapidement.
Comme dans le
film "Intouchables" ? Pas de bras, pas de chocolat... je dirais : pas de fichier exemple, pas d'aide...

 

flipy

XLDnaute Nouveau
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Bonjour Robert,

J'avoue que mon explication n'était pas très claire.... Mes fichiers sont confidentiels car effectués pour une entreprise... Cependant, j'ai fait 2 petits fichiers qui reprennent très grossièrement l'idée de ce que je souhaite réaliser, que j'ai rajouté à mon premier message

Je précise que la macro du FICHIER B n'est pas rédigée, je souhaite simplement la lancer pour récupérer le résultat.

J'espère que ça pourra aider à mieux comprendre ce que j'essaye de faire...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Bonjour Flipy, bonjour le forum,

Cependant, j'ai fait 2 petits fichiers qui reprennent très grossièrement l'idée de ce que je souhaite réaliser, que j'ai rajouté à mon premier message

C'est exactement ça qu'il fallait faire ! Je vais jeter un coup d'œil mais je ne sais pas travailler avec un classeur fermé. Si je trouve une solution ça sera forcément en ouvrant le classeur...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Bonsoir Flipy, bonsoir le forum,

Essaie ce bout de code (à adapter) :

Code:
Sub Macro1()
Dim A As Workbook 'déclare la variable A (classeur A)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim NC  As String 'déclare la variable NC (Nom du Classeur)
Dim B As Workbook 'déclare la variable B (Classeur B)
Dim OA As Object 'déclare la variable OA (Onglet A)
Dim OB As Object 'déclare la variable OB (Onglet B)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set A = ThisWorkbook 'définit le classeur A
CA = A.Path & "\" 'définit le chemin d'accès CA
NC = "Fichier B.xlsm" 'définit le nom du classeur NC
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set B = Workbooks(NC) 'définit le classeur B (génère une erreur si le classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'efface l'erreur
    Workbooks.Open (CA & NC) 'ouvre le classeur "Fichier B.xlsm"
    Set B = ActiveWorkbook 'définit le classeur B
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OA = A.Sheets("Feuil1") 'définit l'onglet OA
Set OB = B.Sheets("Feuil1") 'définit l'onglet OB
DL = OA.Cells(Application.Rows.Count, 21).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 21 (=U) de l'onglet OA
Set PL = OA.Range("U8:U" & DL) 'définit la plage PL
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    OA.Range("E8:E13").Copy OB.Range("C6") 'copie/colle "prof"
    OA.Range("F8:F13").Copy OB.Range("D6") 'copie/colle "p1"
    OA.Range("G8:G13").Copy OB.Range("E6") 'copie/colle "pe"
    OA.Range("I8:I13").Copy OB.Range("H6") 'copie/colle "em"
    OA.Range("P8:P13").Copy OB.Range("G6") 'copie/colle "k"
    OA.Range("Q8:Q13").Copy OB.Range("F6") 'copie/colle "q retenu"
    CEL.Offset(0, 1).Copy OB.Range("K5") 'copie/colle "x1"
    CEL.Offset(0, 2).Copy OB.Range("L5") 'copie/colle "x2"
    CEL.Offset(0, 5).Copy OB.Range("M5") 'copie/colle "x5"
    CEL.Offset(0, 7).Copy OB.Range("L7") 'copie/colle "long."
    CEL.Offset(0, 9).Copy OB.Range("L9") 'copie/colle "k"
    OA.Range("E16").Copy OB.Range("L11") 'copie/colle "E1"
    OA.Range("E18").Copy OB.Range("L13") 'copie/colle "E2"
    B.Activate 'active le classeur B (peut-être pas nécessaire si il n'y a aucun [Select] dans la macro1)
    OB.Activate 'active l'onglet OB (idem)
    Application.Run "'Fichier B.xlsm'!Macro1" 'lance la macro "Macro1" du fichier B
    A.Activate 'active le classeur A (idem)
    OA.Activate 'active l'onglet OA (idem)
    CEL.Offset(0, 11).Value = OB.Range("U10") 'récupère le Résultat T
Next CEL 'prochaine cellule de la boucle
B.Close SaveChanges:=False 'ferme le classeur B sans enregistrer les changements
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
 

flipy

XLDnaute Nouveau
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Malheureusement ça ne fonctionne pas... Ca plante à "Set OB = B.Sheets("Feuil1")", en disant que "l'indice n'appartient pas à la sélection".

Bien sûr, je l'ai adapté à ma feuille originale. Je ne comprends pas pk ça plante, d'autant plus qu'il n'y a pas de problème avec la ligne du dessus, "OA = A.Sheets("Feuil1")"....
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Bonjour Flipy, bonjour le forum,

As-tu remarqué que j'avais mis (à adapter) dans mon premier post.
Comme tu n'as pas tout précisé et notamment le noms des onglets j'ai mis le nom par défaut (Feuil1) donné dans ton propre exemple...
Dans ton fichier ce n'est pas ce nom là donc deux solutions :
• soit tu adaptes le code en remplaçant Feuil1 par le nom de l'onglet
• soit tu renommes l'onglet du Fichier B en l'appelant Feuil1Je me demande à quoi ça sert que je commente le code quand je vois ce genre de questions !...
 

flipy

XLDnaute Nouveau
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Certes je suis débutante, mais je ne suis pas une idiote finie et je sais tout à fait lire !
J'ai effectivement adapté le code à ma feuille originale, avec les bons noms de fichier et les bons noms d'onglet, mais ça ne fonctionne pas à la ligne précisée dans mon précédent message.

Je vous remercie vraiment pour votre aide, mais ne tiens pas à être traitée comme tel !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Envoyer des données et lancer une macro sur un autre fichier excel fermé

Bonjour Flipy, bonjour le forum,

Désolé Flipy tu as raison j'aurais du te dire ça autrement ! je te prie de bien vouloir m'excuser...
Le code que je t'ai proposé, je l'ai testé avec tes propres fichiers exemple. La seule chose que je n'avais pas c'est la macro du fichier B. J'en avais crée une :

Code:
Sub Macro1()
MsgBox "Coucou"
End Sub
et je n'ai jamais eu aucun bug, ni celui auquel tu fais référence, ni un autre...
Peut-être que le classeur B doit être le classeur actif au moment du code ? Normalement non...
 

Discussions similaires

Réponses
8
Affichages
365

Statistiques des forums

Discussions
312 160
Messages
2 085 838
Membres
103 000
dernier inscrit
Nath13