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 24/11/2011, 20h09   #1
Invité de passage
 
Inscription : janvier 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 84
Points : 1
Points : 1
Par défaut Macro : Récupérer des données dans plusieurs onglets et fichiers

Bonjour,

J'ai plusieurs fichiers contenant dix feuilles chacun situé dans un répertoire.

Le but est de récupérer deux données (cellules "A6" et "B6") situé dans les onglets ('Lundi', 'Mardi', 'Mercredi', 'Jeudi',...,'Dimanche') pour chacun des fichiers et ensuite de les rassembler en colonne dans le fichier 'Données'

Voici un bout de code, mais impossible de l'ajuster à mon fichier


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
 
Option Explicit
 
Sub Importer2()
Dim i As Long
Dim j As Byte
Dim sDossier As String, sFichier As String, sFeuille As Worksheet
'sFeuille As String
 
    Application.ScreenUpdating = False
 
    ShDatas.Range("B1:C65536").Clear
    sDossier = ThisWorkbook.Path & "\"
    sFeuille1 = "Lundi"
    sFeuille2 = "Mardi"
    sFeuille3 = "Mercredi"
    sFeuille4 = "Jeudi"
    sFeuille5 = "Vendredi"
    sFeuille6 = "Samedi"
    sFeuille7 = "Dimanche"
 
 
 
    For i = 1 To 4
    'For j = 1 To Sheets.Count
 
 
        With ShDatas
            sFichier = .Cells(i, 1)
            .Cells(i, 2) = ExtraireValeur(sDossier, sFichier, sFeuille1, "A6")
            .Cells(i, 2) = CDate(Cells(i, 2))
            .Cells(i, 3) = ExtraireValeur(sDossier, sFichier, sFeuille1, "B6")
            .Cells(i, 3) = Cells(i, 3)
 
        End With
 
    Next i
 
    Application.ScreenUpdating = True
End Sub
 
Private Function ExtraireValeur(ByVal Dossier As String, ByVal Fichier As String, ByVal Feuille As String, ByVal Cellule As String)
Dim Argument As String
    Argument = "'" & Dossier & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Address(, , xlR1C1)
    ExtraireValeur = ExecuteExcel4Macro(Argument)
End Function
Fichiers attachés
Type de fichier : zip Test.zip (30,8 Ko, 2 affichages)
roidurif est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 24/11/2011, 20h22   #2
Invité régulier
 
Inscription : avril 2011
Messages : 19
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 19
Points : 7
Points : 7
Mon code pour une macro similaire adapté à ton besoin je pense.
Rajoute les lignes pour la cellule A8
Place tous tes classeurs dans un même répertoire, que tu indiqueras dans le code.

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
29
30
31
32
33
Sub Synthese()
'déclaration type de variable
Dim Repertoire As String, Fichier As String 'texte
Dim Wb As Workbook 'classeur
Dim Ws As Worksheet 'onglet
Dim i As Integer 'nombre entier
 
Application.ScreenUpdating = False 'désactivation défilement écran
Set Ws = ThisWorkbook.Worksheets(1)
Repertoire = "X:\" 'définit le répertoire de recherche
Fichier = Dir(Repertoire & "*.xls") 'spécifie la recherche pour le fichiers .xls
 
Do While Fichier <> "" 'boucle sur les fichiers du répertoire
If ThisWorkbook.Name <> Fichier Then 'sauf sur ce fichier si dans même répertoire
Set Wb = Workbooks.Open(Repertoire & Fichier) 'ouvre chaque classeur
i = i + 1
 
Ws.Cells(i + 3, 1) = Fichier 
 
Ws.Cells(i + 3, 3) = Wb.Worksheets("lundi").Range("A2")
Ws.Cells(i + 3, 4) = Wb.Worksheets("mardi").Range("A2")
Ws.Cells(i + 3, 5) = Wb.Worksheets("mercredi").Range("A2")
Ws.Cells(i + 3, 6) = Wb.Worksheets("jeudi").Range("A2")
Ws.Cells(i + 3, 7) = Wb.Worksheets("vendredi").Range("A2")
Ws.Cells(i + 3, 8) = Wb.Worksheets("samedi").Range("A2")
Ws.Cells(i + 3, 9) = Wb.Worksheets("dimanche").Range("A2")
 
Wb.Close False 'referme le classeur sans sauvegarder
Fichier = Dir
Loop
 
Application.ScreenUpdating = True 'résactivation défilement écran
End Sub
rapheb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 20h31   #3
Invité de passage
 
Inscription : janvier 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 84
Points : 1
Points : 1
Bonjour rapheb,

Ta proposition est intéressante, Mais me convient pas car elle ouvre les fichiers un à un, alors ce que je souhaite par rapport à ma macro c'est de lire les données sans ouvrir les fichier.
roidurif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 21h41   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Si tu veux lire tes données sans ouvrir le fichier voila un tutoriel à se sujet.
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h25   #5
Invité de passage
 
Inscription : janvier 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 84
Points : 1
Points : 1
Bjr,

Merci pour l'astuce, mais je ne sais pas comment m y prendre pour lire onglet par ongler, fichier par fichier avec ce type de connexion


Merci pour votre aide
roidurif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h31   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Tout est expliqué dans le tutoriel donné par Qwazerty.
Sinon tu peux aussi créer un autre objet Excel que tu dois pouvoir masquer
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 21h35   #7
Invité de passage
 
Inscription : janvier 2009
Messages : 84
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 84
Points : 1
Points : 1
Bonjour,

J'avance à petit pas, j'ai réussi à récupérer les données fichiers par fichier vers mon fichier principal, par contre je bloque pour récupérer les données onglets par onglet vers mon fichier.

Voici le code en question.

Merci de votre aide

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
 
Sub valeurExterne1()
Dim ligne, colonne, rep, onglet, fichier
Dim dlng As Long
Dim FL1 As Worksheet
 
T = 6
c = 1
D = 6
G = 2
 
recap = ThisWorkbook.Name
rep = ThisWorkbook.Path
onglet = "Lundi"
ChDir rep
fichier = Dir("*.xls")
 
While fichier <> ""
If fichier <> recap Then
 
For Each FL1 In Workbook
With FL1
 
dlng = FL1.Range("A" & Rows.Count).End(xlUp).Row + 1
 
Cells(dlng, 1) = ExecuteExcel4Macro _
("'" & rep & "\[" & fichier & "]" & FL1 & "'!R" & T & "C" & c & "")
 
Cells(dlng, 2) = ExecuteExcel4Macro _
("'" & rep & "\[" & fichier & "]" & FL1 & "'!R" & D & "C" & G & "")
 
 End With
  Next FL1
 
    End If
 
    fichier = Dir
 
Wend
 
End Sub
roidurif est dé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 17h52.


 
 
 
 
Partenaires

Hébergement Web