Exécuter macro sur un autre fichier du meme dossier

grovallat

XLDnaute Nouveau
Bonjour à tous,
J'ai eu beau chercher sur le forum mais je n'ai pas trouver de réponse à mon problème (mais si elle existait déjà je vous prirai de m'excuser...)

Voilà mon problème: un dossier contient 2 fichiers excel l'un fichierA mis à jour chaquie jour mais dont le nom ne change pas, l'autre fichierB qui contient quelques macros et leurs indications d'utilisations.
Je voudrai simplement crée une petite macro-bouton qui permettrait d'exécuter les macros du fichierB dans le fichier A.

Un exemple sera plus frappant je pense:
voilà une macro du fichier B:
Code:
[I]Sub Macro1()

Dim Lig As Long
Dim LigC As Long
   LigC = 4
    Sheets("Ponctualité").Select
    For Lig = 1 To Range("A65536").End(xlUp).Row
       If .... Then
           LigC = LigC + 1
          Rows(Lig).Copy Sheets("Proto_Ponctualité").Rows(LigC)
       End If
   Next Lig

End Sub[/I]

Cette macro permet de trier les données de la feuille Ponctualité du fichier A suivant les critères du if et de les reporter dans une feuille Proto_Ponctualité . Cette macro s'execute parfaitemet du fichierA dans le fichierA mais pas du fichierB dans le fichierA.

Je recherche donc une macro supplémentaire et/ou une correction pour dire: "cette macro là tu l'applique sur la feuille Ponctualité du fichier A et tu écris les résultats dans la feuille Proto_Ponctualité du fichier B"

Je sais pas si j'ai été très clair mais si quelqu'un désire de plus amples explications je lui fournirai avec plaisir.Je suis malheureusemnt trop noob en VB pour y arriver seul.

Merci anticipativement
 

grovallat

XLDnaute Nouveau
Re : Exécuter macro sur un autre fichier du meme dossier

Je suis désolé je ne peux pas t'envoyer les fichiers (ce sont des fichiers de travail), mais pour t'éclairer le fichierA contient toutes les données relatives à des commandes (ex: famille de produit, nom du responsable, nom de la société vendeuse, référence de la commande, etc....) et le fichier B ne contient rien que la macro que j'ai montrer au dessus dans une page de présentation.

La macro en question permet de trier chaquez ligne de commande de l'onglet "Ponctualité" et de copier toutes celles répondant aux critères du IF dans une feuille "Proto_Ponctualité".

J'ai essayé en mettant la macro dans le fichier A et tout ce passe bien les commandes sont triées et copiées dans la feuille "Proto_Ponctualité" placée à la fin du fichier.Mais je n'ai pas le droit et l'utilité d'écrire sur le fichierA en réalité. Donc je voulais creer dans un fichier B placer dans le meme dossier que le A une macro qui permettrai d'ouvrir le fichierA, de trier les commandes contenues dans la feuille "Ponctualité" du fichierA par la Macro précédente et que la feuille "Proto_Ponctualité" contenant les données réspectant les critères dans le IF soit placée à la fin du fichierB.

Pour résumer, je pense qu'il faudrait préciser dans cette macro l'emplacement des feuilles "Ponctualité" et "Proto_ponctualité" ainsi que les fichiers auxquelles elles appartiennent et ensuite crer une petite macro du type:

Open FichierA
Run Macro1
Close fichierA
Activate fichierB (le fichierB etant toujours ouvert puisqu'il contiendrait les deux macros)

Voilà,j'espère que j'ai été clair, et je te remercie de m'aider, si vraiment tu ne peux rien faire sans modèle des deux fichiers j'essaierai de t'en faire un modèle-exemple.
 

CHALET53

XLDnaute Barbatruc
Re : Exécuter macro sur un autre fichier du meme dossier

Re,

En retravaillant cet exemple (qui ouvre le fichierA s'il n'est pas ouvert) et qui travaille sur le fichier après avoir activer la bonne fenêtre, qui revient sur le fichierB pour continuer les traitements
A toi de programmer les traitements que tu veux faire sur chaque feuille.

Les aller/retour entre fichier avec une même macro sont possibles.
a+
 

Pièces jointes

  • FichierA.xls
    15.5 KB · Affichages: 102
  • FichierA.xls
    15.5 KB · Affichages: 101
  • FichierA.xls
    15.5 KB · Affichages: 96
  • FichierB.xls
    25.5 KB · Affichages: 91
  • FichierB.xls
    25.5 KB · Affichages: 80
  • FichierB.xls
    25.5 KB · Affichages: 81

tototiti2008

XLDnaute Barbatruc
Re : Exécuter macro sur un autre fichier du meme dossier

Bonjour à tous,

Les
Windows(a).activate
ne sont pas toujours conseillés (si tu as plusieurs fenêtre d'un même classeur par exemple)
Je conseillerais plus
Workbooks(a).activate
qui ne plante pas dans ce cas là...

d'autre part, il n'est pas forcément nécessaire d'activer un classeur pour travailler dessus, donc tout dépend des traitements.
 

grovallat

XLDnaute Nouveau
Re : Exécuter macro sur un autre fichier du meme dossier

Euh dsl si je reviens si tot (^^) mais j'ai un ptit soucis avec les 2 parties "suite"
et "plus loin" (dsl je suis débutant). Pourrai tu me les expliquer un petit peu plus en détails s'il te plait (dsl encore).
 

CHALET53

XLDnaute Barbatruc
Re : Exécuter macro sur un autre fichier du meme dossier

oui

A partir du fichierB, je teste l'ouverture du fichierA :

Reprise des instructions avec commentaire au bout

Dim Test As Workbook
On Error Resume Next: 'assez dangereux, le programme ignore les erreurs et va à l'instruction suivante
Set Test = Workbooks("FichierA.xls") :' teste l'ouverture du fichierA et met le résultat dans la variable Test
On Error GoTo 0 : 'A supprimer

'L'instruction ci-dessous teste la valeur vrai ou faux de la variable Test
If Test Is Nothing Then GoTo suite Else GoTo plusloin
'Si la variable est faux (nothing), je vais à suite pour exécuter les instructions d'ouverture
'Si la variable est vrai , je n'ouvre pas puisqu'il est ouvert , je passe les instruction pour aller directement à l'étiquette plusloin (Une étiquette adresse est reconnue par les deux points derrière)

J'espère être clair
 

CHALET53

XLDnaute Barbatruc
Re : Exécuter macro sur un autre fichier du meme dossier

petit complément :

lorsque j'exécute les instructions à partir de suite, il poursuit par les instructions derrière plusloin: sans s'arrêter (pour les éviter, lorsque c'est nécessaire, il faudrait devant plusloin: un goto ..vers une autre adresse)
 

grovallat

XLDnaute Nouveau
Re : Exécuter macro sur un autre fichier du meme dossier

Jusque là ca va impeccable, maintenant grace à toi.
Mais la ou ca se corse c'est avec les "a", "b","c","d" de ta partie Suite.
Pardonne mon ignorance mais c'est plus cette partie là que je voudrai bien que tu commentes:
Code:
suite:
'Ouverture du fichier "fichier_test.xls"

Windows("FichierB").Activate
a = ActiveWorkbook.Path
'b = Range("C3").Value
c = "FichierA" & ".xls"
d = a & "\" & c
    Workbooks.Open Filename:=d
    Windows(c).Activate
 

CHALET53

XLDnaute Barbatruc
Re : Exécuter macro sur un autre fichier du meme dossier

a : variable reprenant le nom du répertoire où se trouve ton fichier
b est en commentaire et ne sert à rien
c variable: pour avoir le fichier sous format FichierA.xls
d : pour avoir chemin et nom du fichier pour l'ouvrir (exemple : fichier dans un sous répertoire du type : D:\Toto la variable d prendra la valeur : D:\Toto\FichierA.xls
L'instuction Workbooks.open filename:=d ouvre le fichier contenu dans la variable d

Je suis maintenant absent tout l'après midi : en cas de souci attendre ce soir en ce qui me concerne.
a+
 

grovallat

XLDnaute Nouveau
Re : Exécuter macro sur un autre fichier du meme dossier

Ok dsl j'ai mis le temps pour comprendre mais je crois que c'est ok. Il me reste encore un pb: Comment dire (qu'elle est la correction à apporter) dans la macro que j'ai poster qu'on trie la feuille ponctualité du fichierA et que l'on crée une feuille-résultat "Proto-Ponctualité" dans le fichierB

Merci de ton aide, je pourrai pas rep après 18h donc probablement à demain
@++
 

CHALET53

XLDnaute Barbatruc
Re : Exécuter macro sur un autre fichier du meme dossier

Je pense que tu veux parler de cette procédure:

Dim Lig As Long
Dim LigC As Long
LigC = 4
Sheets("Ponctualité").Select
For Lig = 1 To Range("A65536").End(xlUp).Row
If .... Then
LigC = LigC + 1
Rows(Lig).Copy Sheets("Proto_Ponctualité").Rows(LigC)
End If
Next Lig

essaie de modifier la ligne : Rows(Lig).Copy Sheets("Proto_Ponctualité").Rows(LigC) par les 5 lignes suivantes
rows(lig).copy
Windows("FichierB.xls").Activate
Sheets("proto_ponctualité").Activate
Cells(LigC, 1).Select
ActiveSheet.Paste

Il faudra sans doute optimiser, mais première étape est-ce que ça marche ?
 

CHALET53

XLDnaute Barbatruc
Re : Exécuter macro sur un autre fichier du meme dossier

Un petit complément :
Comme la macro est dans le fichierB, entre l'instruction ligC=4 et sheets("ponctualité").activate, insérer : windows("FichierA".xls).activate

Après la 5ème ligne que j'ai proposé, rajouter: windows("FichierA.xls).activate (pour revenir poursuivre la lecture sur le fichierA
 

grovallat

XLDnaute Nouveau
Re : Exécuter macro sur un autre fichier du meme dossier

Oki c'est géant et ca marche très bien....Merci mille fois Chalet53.

J'ai plus que 2 petites questions:

-En realité le fichierA.xls ne s'apelle pas vraiment fichierA.xls mais plutot FichierA_aaaa_mm_jj.xls (date de mise à jour) y'a t'il possibilité dans la première partie de la macro que CHALET53 m'a fourni, d'effectuer une modif (si necessaire) pour ouvrir le fichierA quelle que soit la date de mise à jour?

exemple: au lieu d'ouvrir FichierA.xls on dirait: ouvre le fichierAxxxxxxxxxxx.xls ou x serait un caractère qui engloberait tout les autres.
Ou encore: au lieu d'ouvrir FichierA.xls on dirait: ouvre le fichier qui commence par "FichierA" et qui serait un ".xls"

-Deuxième question toute bète: comment on code dans une boucle SI: if cellule(A1)=Cellule(B1)?

merci
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 067
Membres
104 016
dernier inscrit
Mokson