creation de macros sur des fichiers excel différents

  • Initiateur de la discussion françois gillier
  • Date de début
F

françois gillier

Guest
Bonjour a tous,
Je voudrait savoir s'il est possible de programmer des macros qui travailleraient sur des fichiers excel différents.
Explication
Je suis obligé de travailler à partir d'un 1er classeur où je dois faire figurer les userforms, mes boutons de commandes. Dans un autre classeur excel, situé dans un autre fichier se trouve ma base de données. Le 3eme classeur que je dois encore créer sera un tableur excel ou je trouverais les résultats demandés. Le travail de la macro consisterait essentiellement a faire du trie sur ma base de données.
Je voudrait donc savoir si cette architecture est faisable. Si oui, comment dois m'y prendre ? Ou puis je trouver des informations à ce sujet ?

Merci d'avance
 
B

bellenger florian

Guest
Bonjour le forum,

oui, on peut travailler sur des fichiers excels différents.

prenons un exemple:

Sub ôte_class_soeur_ma soeurAnne()




Dim s As String '
Dim classeur As Workbook


'je travaille en chantant (faux)
'...

'Oh, (ça alors), voilà t'y pas que j'ai envie d'utiliser un autre classeur

s = "C:\try\catch\la\gourde.xls"
Workbooks.Open Filename:=s, UpdateLinks:=0, ReadOnly:=False 'ceci est

la ligne 254 du code.

Set classeur = ActiveWorkbook


classeur.Sheets(1).Cells(1, 1) = "Why has I get never been for be between the average-moyenne during my exam englich?" 'ceci est la ligne 3057 du code

classeur.Close SaveChanges:=True 'il est temps de partir


End Sub


Imaginons qu'à un moment donné, on ait envie d'écrire quelque-chose par exemple dans un classeur intitulé "gourde.xls"

Alors, on l'ouvre (ligne 254), on écrit (ligne 3057) , on ferme (payer les consommations)

Maintenant, il est peut-être possible de faire la même chose sans ouvrir le classeur mais je ne sais pas le faire.

J'ai rajouté la variable classeur au cas où il y aurait besoin de réutiliser le classeur, mais ne fin de compte,je ne sais pas si cela sert à grand chose...



Florian


ps: il y a plein d'option avec la fonction Open de l'object Workbooks (je commence à parler bizarre moi non?) mais je connais pas très bien et je ne sais pas quelle est la forme la plus en forme (j'ai pas le forme) pour la forme de ton problème.

A+,

florian
 
B

bellenger florian

Guest
Bonjour,

généralement, si on a besoin d'effectuer un traitement comparable sur un grand nombre d'object, on utilise des boucles.

Par exemple si on veut appliquer le même traitement à tous les fichiers d'un dossier:

Sub appel()

dim fs as Object
dim reffolder a Object


set fs=CreateObject("Scripting.FileSystemObject")
set reffolder=fs.getFolder("D:................)<- chemin du dossier entre " et ()

Call Boucle(reffolder)

end sub



Sub Boucle(reffolder As Object)' parcours tous les fichiers sous le dossier

Dim liste_dossiers
Dim liste_fichiers
Dim refdossier As Object
Dim reffichier As Object

Set liste_dossiers = reffolder.subfolders 'descente récursive de sous-dossier en sous-dossier

For Each refdossier In liste_dossiers

Call Boucle(refdossier)
Next

Set liste_fichiers = reffolder.Files

For Each reffichier In liste_fichiers 'on passe tous les fichiers en revue
Call Fonction_qui_fait_ce_qu'il faut_sur_fichier(reffichier) 'traitement d'un

fichier

Next

End Sub

(Attention, il y a peut-être plus simple.)

Evidemment, il faut pouvoir exprimer l'ensemble des actions à appliquer sur chaque fichier par un seul et même code, ce qui n'est pas toujours évident.

Ensuite, il faut être capable de définir l'ensemble des Objects à traiter.

Il ya alors le cas où ces objects forment déjà un groupe facilement définissable et identifiable (exemple:fichiers contenus dans un dossier, ensemble des classeurs ouverts, etc.)

Dans ce cas, la définition du groupe est plutôt courte et rapide à écrire et l'identification par le système des objects appartenant à ce groupe est relativement instantanée.


Il y a aussi le cas où le groupe est facilement définissable mais plus long à identifier par le système (exemple: tous les fichiers crées lors des trentes derniers jours.)

Pour la définition, je pense qu'un pro d'excel sur ce forum pourrait nous faire ça en une ligne.

En revanche, le système devrait identifier les objects appartenant à cet ensemble à chaque exécution.

.......................................................................................................................

Je place ici une disgresion de mon propos au sujet d'une question annexe qui m'a traversé l'esprit il y a quelques secondes:

C'est au sujet du groupe de fichiers créés lors des trentes derniers jours.

Approche1: on recherche tous les fichiers créés lors des trentes derniers jours. On identifie le groupe qu'ils forment. On execute la fonction-traitement sur les fichiers de ce groupe.

Approche2: on execute la fonction sur tous les fichiers de l'univers. dans la fonction on fait un test:

Si fichier créé il y a plus de trentes jours alors:
sors de là tout de suite.

sinon:
bosse, fonction fainéante!
etc.

Questions: 1)A priori, quelle est l'approche la plus efficace?
2) La fonction vba est-elle susceptible?

Remarquez que les deux approches peuvent être combinées.

........................................................................................................................

Les matheux pourraient aussi nous rappeler qu'un ensemble peut être défini à partir de considérations particulières vis à vis de plusieurs ensembles (unions, intersections, complémentaire)

ps: 1) Mon petit doigt me dit que le premier matheux à passer sur ce fil va prendre le temps de me répondre pour dire que ma phrase est complètement fausse.

2) Et je présente mes excuses à tous ceux qui ont un mauvais souvenir de leur cours de math.


Enfin, il y a le cas le plus pessimiste où, rien n'y fait, vous êtes obligé de définir le groupe à la main; par exemple, en entrant dans le code les "chemins" de tous les fichiers concernés. Si le nombre de fichiers s'exprime au-delà des centaines, vous risquez d'y passer du temps (solution: avoir un ami dévoué...)

En revanche, si vous devez exécuter le programme plusieurs fois, l'ensemble sera facilement identifiable par le système.

Si vous êtes dans le dernier cas, que votre programme doit s'exécuter tous les jours, mais que les fichiers à traiter change à chaque fois, alors il vaut mieux trouver un moyen de ne plus être dans le dernier cas (solution ultime: poster un message sur ce forum.)


Pour en venir à un cas plus particulier par rapport à mon message précédent sur ce fil. Si on a une grande quantité de fichiers à traiter, alors le temps pris par l'ouverture de ces fichiers peut à la fin être conséquent.

Or, l'on peut voir sur ce forum qu'il est possible de récupérer des données sur un fichier sans l'ouvrir.

Mais cela ne veut pas dire que l'on peut tout faire sans jamais ouvrir de fichiers.

Amicalement,

Florian
 

Discussions similaires

Statistiques des forums

Discussions
314 085
Messages
2 105 631
Membres
109 402
dernier inscrit
dalilouille