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
 

CHALET53

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

bonjour,
Pour la deuxième question : if cells(1,1))= cells(1,2) où le premier indice = la ligne et le deuxième= la colonne . Intérêt : ces indices peuvent s'exprimer sous la forme de variable pouvant (par exemple) varier de la ligne 1 à la ligne n et de la colonne 1 à la colonne m dans des traitements en boucle

L'égalité peut aussi s'exprimer sous la forme : if range("A1").value = range("B1").value (moins pratique pour faire varier les lignes et les colonnes)

Pour la première question, je regarde. toutefois, dans la mesure où le FichierA est suffixé d'une date de mise à jour, cela signifie qu'il y a dans le répertoire plusieurs fichiers commençant par "FichierA". Dans ce cas, comment identifier le bon fichier?

D'autre part tu dis que ça marche : parfait. Ne vois-tu pas l'écran basculé d'une fenêtre à l'autre ?
Pour l'éviter : ajouter au début du programme l'instruction : application.ScreenUpdating=False
Autre avantage : déroulement plus rapide
a+
 

grovallat

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

Merci encore pour tout tes bons conseils CHALET53, pourmon premier POST dans ce forum je dois dire que c'est particulieremnt agréable et que j'en ai appris beaucoup.

Pour ce qui du probleme de date tiens moi au courant, mais je tiens à te préciser qu'il n'y a qu'un seul fichierA dans le dossier et que donc j'avai penser à la structure: Ouvrir.FichierA_xxxxxxxx.xls avec X un caractère pouvant remplacer tout les autres, cela permettrai d'ouvrir le fichier peut importe son index de date (cependant je doute que l'instruction FichierA_xxxxxxxxxxx.Activate soit comprise).

J'avai également imaginer (j'imagine ptetre des trucs de ouf) une macro se déclenchant à l'ouverture du fichierB du type :

message box "quel est le fichierA à trier?"
'l'utilisateur rentrerait le chemin du fichierA_xxxxx
fichierA_xxxxxx renommer FichierA
'Excel donne un nom qui sera utiliser par la suite dans toutes les Macros


Ainsi l'utilisateur sékectionnera le fichierA sur lequel il voudra travailler et les macros s'executeront normalement.

Je divague peut-etre un peu mais bon...apparament tu sais y faire alors je demande...

En tout les cas merci pour tout ce que tu as déjà fait
 

CHALET53

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

Re,

Il est possible de lire les noms de fichiers dans un répertoire et de déclencher l'ouverture de celui qui répond à une condition précise. Ce n'est plus un travail de débutant.
Il n'y a peut-être qu'un FichierA mais plusieurs fichiers préfixés FichierA et suffixés par une date? Est-ce exact ?

Peux-tu préciser le processus lié au traitement des FichierA suffixés d'une date. Déjà comment est créé ce fichier suivi d'une date?

Déjà, le début de la macro dans le fichier teste l'ouverture du FichierA : si le fichier de lecture ne porte plus ce nom, le test ne vaut plus rien

A suivre
 

grovallat

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

Re:
En fait il n'y a sur le disque dur entier qu'un seul fichierA_aaaa_mm_jj.xls mais il est mis a jour régulièrement Ce fichier est simplement crée en mettant à jour les données du fichierA_aaaa_mm_jj.xls précédent (et en ajoutant des données) et il est enregistré sous le nom "fichierA_aaaa_mm_jj.xls" avec aaaa_mm_jj la date de sa mise à jour.

Je ne t'en demande pas plus, j'ai vu quelques posts sur différents forums de personnes qui n'ont pas eu de réponse sur des problèmes similaires au mien. Donc si c'est trop compliquer, ne t'y aventure pas, tu m'as déjà beaucoup aidé.

Merci
 

CHALET53

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

Re,

Par rapport au FichierA et FichierB que je t'avais adressé, j'ai modifié la macro en tenant compte d'un nom qui peut varier en fonction de la date mais commençant toujours FichierA suivi de _aaaa_mm_jj

La recherche du fichier a été intégrée en début de programme
la partie située entre suite: et plusloin: a été modifiée

Recopie ces deux fichiers dans un répertoire et exécute la macro (ouvirir_fenêtre) pas à pas pour voir le déroulement
Si c'est bon, tu recopies les instructions au bon endroit dans ta macro
J'ai été obligé de zipper le fichierB
a+
 

Pièces jointes

  • FichierB.zip
    12.4 KB · Affichages: 41
  • FichierA_2009_08_19.xls
    18 KB · Affichages: 48

grovallat

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

Excuse-moi mais j'ai un petit soucis qui m'empèche de m'attaquer aux fichiers que tu m'a fourni.

Comment écrirais tu: si fichierA.Feuil1.Cellule(A1).valeur = fichierB.feuil1.Cellule(A1).valeur (sachant que les cellules contiennent toutes les deux un mot)?

merci
 

CHALET53

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

re,
je crois que je passerai par deux variables intermédiaires (sachant qu'il y a certainement mieux : mais on est dans le cas de deux fichiers) :

Workbooks("FichierB.xls").Activate: Sheets("Feuil1").Select
b = Range("A1").Value ou b= cells(1,1)
Workbooks("FichierA.xls").Activate: Sheets("Feuil1").Select
c = Range("A1").Value ou c= cells(1,1)
if b= c then ...

Les fichiers sont censés être ouverts
bon courage
 

grovallat

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

J'ai commencer à regarder les 2 fichiers que tu m'as passer, j'ai une erreur 1004 à l'éxécution: 'd:\Documents and Settings\bxxxxxx\Bureau\test3' introuvable (pourtant c'est là que mes fichiers A et B sont enregistrés) et elle pointe sur la ligne:

Workbooks.Open Filename:=a & "\" & c

Je te cache pas que la j'ai du mal à saisir les instructions de ta macro c'est compliqué (en tt cas pour moi^^). Si tu as une idée de la défaillance ou une solution je suis preneur, sinon t'as déja fait beaucoup pour moi alors ne t'enmenerde pas.

Merci pour tout
 

CHALET53

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

Petite explication sur le code rajouté :

Windows("FichierB").Activate => active la fenêtre du FichierB
a = ActiveWorkbook.Path => met dans la variable a le chemin complet du fichierB qui sera le même pour le FichierA
a1 = Len(a) => variable a1 = nombre de caractères du chemin

With Application.FileSearch =>lance l'application recherche des fichiers

.LookIn = a => dans le répertoire contenu dans la variable a
.Filename = ".xls" => dont l'extension est .xls
.Execute

' MsgBox .FoundFiles.Count & _ => code en commentaire
' " fichier(s) trouvé(s)."

For i = 1 To .FoundFiles.Count => dans cette boucle, recherche du fichier (.FoundFiles(i) :répertoire + nom) qui répond à la condition ci-dessous (La partie gauche du fichier trouvé y compris répertoire sur la longueur spécifiée : a1 longueur du répertoire + 9 qui correspond à \FichierA est-elle égale au contenu de la variable a suivi de \FichierA )


If Left(.FoundFiles(i), a1 + 9) = a & "\FichierA" Then
c = Right(.FoundFiles(i), Len(.FoundFiles(i)) - a1 - 1) => sélection dans c du nom du fichier qui correspond aux critères de sélection (partie droite de l'ensemble du chemin+fichier : .Foundfiles(i))

'Workbooks.Open Filename:=.FoundFiles(i) => code en commentaire
i = .FoundFiles.Count => Si j'ai trouvé le fichier, je sors de la boucle
End If
Next i


End With

Set test = Workbooks(c)
On Error GoTo 0
If test Is Nothing Then GoTo suite Else GoTo plusloin

suite:
'Ouverture du fichier "fichier_test.xls"
Workbooks.Open Filename:=a & "\" & c => ouvre le fichier contenu dans la variable c qui est dans le répertoire a (ajout de \ nécessaire pour avoir l'adresse complète du fichier à ouvrir

L'erreur 1004 constatée : le programme n'a pas trouvé le fichier FichierA dans ce répertoire et je n'ai pas testé ce cas de figure d'où plantage
Peux-tu créer un répertoire provisoire , y coller mes deux fichiers et tester pas à pas la macro du fichierB


Bon courage
 

grovallat

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

Oki, Topic clos, problème résolu, et eternelle gratitude à CHALET53.

Malheureusement tout n'est pas fini et j'ouvrirai bientot un npouveau topic pour un nouveau problème.

Merci beaucoup.:)
 

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 049
Membres
104 012
dernier inscrit
baffyt2