Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/01/2012, 22h48   #1
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Par défaut boucle auto sur fichier externe

Bonjour,

J'ai une macro qui synchronise plusieurs fichiers excel externe à mon fichier possédant la macro.

Fichier principal : Tableau de bord (TDB_GENERAL.xlsm)
Fichiers à synchroniser : "n" fichier dans un même répertoire (tab_nego_XXX.xlsm).

Aujourd'hui, j'ai écrit autant de fois la boucle de mon script VBA en modifiant manuellement le nom de mes fichiers excel à synchroniser.

Mon souci, c'est que si on ajoute un ou plusieurs fichier à synchroniser il faut modifier manuellement le VBA.

Je sais qu'il y a une boucle à faire pour que mon script soit appelé qu'une seule fois.

La construction du nom des fichiers est identique et normé comme suit :

tab_nego_XXX.xlsm

Le XXX correspond au initiale du négociant. Ces initiales sont dans la liste récap d'une feuille du tableau principal (TDB_GENERAL.xlsm).

Comment faire pour :

- récupérer les initiales de cette liste
- compiler le nom de chaque fichier (tab_nego_) plus les initiales (.xlsm)
- et faire la boucle sur chaque fichier du répertoire jusqu'à la fin de la liste des initiales.

Voici mon code VBA actuel :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Windows("TDB_NEGO_EM.xlsm").Activate
    Sheets("ZZZZZZZ").Select
    Columns("A:M").Select
    Selection.Copy
    Windows("XXXXXXX.xlsm").Activate
    Sheets("YYYYYYY").Select
    Columns("A:A").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
 
... / ...
    Windows("TDB_NEGO_EM.xlsm").Activate
    Sheets("ZZZZZZZ").Select
    Rows("1:102").Select
    Selection.Copy
.../...
 
    Sheets("YYYYYYY").Select
    Columns("A:M").Select
    Selection.ClearContents
Le code ci-dessus est coupé mais il fonctionne très bien aujourd'hui, c'est juste une boucle sur les noms des fichiers qu'il me faut... sachant que le nom du fichier est utilisé au tout début du code et au milieu du code VBA.

J'espère avoir été suffisamment explicite.

Merci d'avance de vos réponses.
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 23h12   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
Bonjour,


Le code ci dessous ouvre chaque fichier xlsm du répertoire "C:\" et copie la plage A1 à C1 de la feuille ZZZZZZ dans la feuille YYYYYY du fichier en contenant la macro

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Dim fso As Object
Dim FsoRepertoire As Object
Dim FsoFichier As Object
Dim i As Long
Dim Wrk As Workbook
 
Dim str() As String
 
Set fso = CreateObject("Scripting.FileSystemObject")
Set FsoRepertoire = fso.GetFolder("C:\")
 
 
'Boucle sur fichiers du repertoire
i = 1
For Each FsoFichier In FsoRepertoire.Files
    str = Split(FsoFichier.Name, ".")
    If str(UBound(str)) = "xlsm" Then
'        Range("A" & i).Value = FsoFichier.Path
        Set Wrk = Application.Workbooks.Open(FsoFichier.Path)
 
        Wrk.Sheet("ZZZZZZZ").Range("A1:C1").copy
        ThisWorkbook.Sheets("YYYYYY").Range("A" & ThisWorkbook.Sheets("YYYYYY").Range("A65536").End(xlUp).Row + 1).Paste
 
        Wrk.Close
 
        i = i + 1
    End If
Next
Je te laisse le soin d'adapter à ton besoin et de revenir vers le forum si tu bloques
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h17.


 
 
 
 
Partenaires

Hébergement Web