IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro : Récupérer des données dans plusieurs onglets et fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Points : 31
    Points
    31
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Fichiers attachés

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Points : 31
    Points
    31
    Par défaut
    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.

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    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
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Points : 31
    Points
    31
    Par défaut
    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

  6. #6
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Tout est expliqué dans le tutoriel donné par Qwazerty.
    Sinon tu peux aussi créer un autre objet Excel que tu dois pouvoir masquer
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    Points : 31
    Points
    31
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2014, 12h00
  2. [XL-2007] Macro pour récupérer des noms dans un onglet
    Par Nahtalie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/04/2013, 15h07
  3. Réponses: 3
    Dernier message: 18/07/2012, 23h44
  4. Réponses: 4
    Dernier message: 29/03/2011, 17h13
  5. Réponses: 27
    Dernier message: 05/09/2008, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo