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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    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 averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    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 confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 110
    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 Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    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

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