La macro mission impossible

Asrull Messages postés 79 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 17 novembre 2004 - 17 nov. 2004 à 10:10
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007 - 17 nov. 2004 à 10:55
Bonjour,

Je débute dans l'univers des macros (mon truc c'est java, mais allez expliquer ça au chef quand il ne jure que par vb ...) et j'ai un gros problème, ça s'appelle la macro impossible (pour moi...), j'ai plusieurs ntervenants sur un tas de fichier et je doit pondre une macro qui va assembler tous ces fichier pour en faire une bdd modèle...

Si je prends les choses dans l'ordre et que je considère que les intervenants peuvent agir à leur guise (aucun verouillage sur le fichier modèle), je dois d'abord faire en sorte que la macro comprenne ou il a saisit ses donnée et comment. selon moi il y a deux grandes familles de cas:

1° Il saisit ses données sur plusieurs onglets (ou feuilles) du même fichier

2° Il saisit ses données sur plusieur fichiers distincts qui sont des copies modèle

Ma question est la suivante, comment puis-je dans une macro obtenir la liste des noms de tout les classeurs ouverts et comment puis je aussi obtenir la liste de tout les noms des feuilles d'un classeur ouvert ?

J'imagine que ce doit être trés simple, mais vu que je n'y connait rien à ce langage, je vais avoir besoin d'un sacré coup de pouce.

Merci d'avance pour le ou les fous furieux prêt à m'aider

Oobaï TaPou !

2 réponses

gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
17 nov. 2004 à 10:27
Salut Asrull

pour connaitre le nom de tous les classeurs xls ouverts, il faut quze tu fasse un truc du genre
déclares un entier i et un tableau de chaines NomClasseurs

for i=1 to worksbooks.count step 1
NomClasseurs(i)=workbooks.fullname
next i

(sur le for, le step 1 n'est pas utile mais ça fait plus propre)
(sur le next, i n'est pas utile mais c'est plus lisible si t'as des for next imbriqués)

pour avoir le nom des feuilles d'un classeur, même logique
for i=1 to worksheets.count
NomFeuilles(i)=worksheets(i).name
next i

y a plus qu'à ...

Guich
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
17 nov. 2004 à 10:55
On pourrait même ^tre plus subtile du genre :

Tu déclares un nouveau type qui contiendra le nom du classeur, le nombre de feuilles et le nom de chacune d'elles :
Public Type Essai
NomClasseur As String
NbFeuilles As Integer
NomFeuilles() As String
End Type

La c'est ta routine :
Sub toto()
Dim i, j As Integer ' ça c'est pour les boucles
Dim MonEssai() As Essai ' tableau de ton nouveau type
Dim NbClasseurs As Integer ' nombre de classeurs ainsi récupérer

' init du nb de classeurd
NbClasseurs = 0

' parcourt tous les classeurs ouverts
For i = 1 To Workbooks.Count
' ajoute un classeur dans le compteur
NbClasseurs = NbClasseurs + 1
' redimensionne notre tableau pour pouvoir travailler dessus
' le preserve permet de conserver les données déjà présentes dans le tableau
ReDim Preserve MonEssai(NbClasseurs)
' récupère le nom du classeur en cours
MonEssai(NbClasseurs).NomClasseur = Workbooks(i).FullName
' init le nb de feuilles pour le classeur en cours
MonEssai(NbClasseurs).NbFeuilles = 0
' parcourt toutes les feuilles du classeur en cours
For j = 1 To Worksheets.Count
' incrémente le nb de feuilles du classeur en cours
MonEssai(NbClasseurs).NbFeuilles = MonEssai(i).NbFeuilles + 1
' redimmensionne à nouveau le tableau mais cette fois pour les feuilles
ReDim Preserve MonEssai(NbClasseurs).NomFeuilles(MonEssai(NbClasseurs).NbFeuilles)

' récupère le nom de la feuille en cours
MonEssai(NbClasseurs).NomFeuilles(MonEssai(NbClasseurs).NbFeuilles) = Workbooks(i).Worksheets(j).Name
Next j ' boucle sur les feuilles
Next i ' boucle sur les classeurs

' A ce niveau là, tu a déjà récupérer toutes les infos
' on peut donc les affichées en faisant des boucles par classeur et par feuille

For i = 1 To NbClasseurs
For j = 1 To MonEssai(i).NbFeuilles
MsgBox "La feuille n° " & j & " du classeur nommé " & MonEssai(i).NomClasseur & " est nommée " & MonEssai(i).NomFeuilles(j)
Next j
Next i

End Sub
0
Rejoignez-nous