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 :

Extraire données de plusieurs xls dans un dossier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Collégien
    Inscrit en
    Septembre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2017
    Messages : 1
    Par défaut Extraire données de plusieurs xls dans un dossier
    Bonjour,

    Je me demandais si c'était possible de créer une macro qui pourrait aller chercher la valeur d'une cellule dans plusieurs .xls d'un même dossier ? Dans le fond, la macro ouvrirait le premier xls du fichier, copier la cellule B11 pour aller la coller dans A1 de A.xls (qui est dans un autre dossier). Ensuite, le 2e xls du même dossier est ouvert pour encore aller copier B11 pour aller coller dans A2 de A.xls, et ainsi de suite pour tous les xls du dossier donné.

    C'est quelque chose qui se fait ?

    Merci et bonne journée

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Oui c'est possible.

    Il suffit de faire une boucle qui scrutera tous les fichiers XLS d'un dossier.
    Pour connaitre les fichiers d'un dossier, le plus simple est d'utiliser la fonction Dir().
    https://msdn.microsoft.com/fr-fr/lib.../gg278779.aspx

    A chaque tour de boucle, tu ouvres le fichier repéré avec un Workbook.Open.
    https://msdn.microsoft.com/fr-fr/lib.../ff194819.aspx

    Tu y prends les données que tu souhaites et tu le fermes avec un Close.

  3. #3
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, commence par Lire et écrire dans les classeurs Excel fermés

    Quand cela fonctionnera utilise une appli qui lit les fichiers d'un dossier, il y en a une myriade : une recherche

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Inutile de passer par ADO pour extraire une seule valeur de plusieurs Classeurs, ni d'ouvrir et fermer lesdits classeurs.
    On peut très facilement utiliser le gestionnaire de noms + la formule adéquate.

    Un exemple de fonction qui retourne une variable tableau :
    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
    Private Function Importer(FeuilleOrigine As String, Cell_Adress As String, FeuilleVierge As String, Extens As String) As Variant()
    'Paramètres :
        'FeuilleOrigine = Nom de la feuille qui contient la donnée à extraire (commune à tous les classeurs)
        'Cell_Adress = Adresse de la cellule qui contient la donnée à extraire (commune à tous les classeurs)
        'FeuilleVierge = une feuille du classeur ou se trouve la macro : cette feuille doit être vide de toutes données
        'Extens = extension des classeurs à importer (ex : xls ou xlsx...)
    Dim objShell As Object, objFolder As Object
    Dim Temp(), i As Long
    Dim Chemin As String, fichier As String
     
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
     
        If objFolder Is Nothing Then
            MsgBox "Abandon opérateur", vbCritical, "Annulation"
        Else
            Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
            fichier = Dir(Chemin & "*." & Extens)
            Do While Len(fichier) > 0
                If fichier <> ThisWorkbook.Name Then
                    ThisWorkbook.Names.Add "maPlageRienQuaMoi", _
                            RefersTo:="='" & Chemin & "[" & fichier & "]" & FeuilleOrigine & "'!" & Cell_Adress
                    With Sheets(FeuilleVierge)
                        .Range(Cell_Adress) = "=maPlageRienQuaMoi"
                        ReDim Preserve Temp(i)
                        Temp(i) = .Range(Cell_Adress).Value
                        i = i + 1
                    End With
                    ThisWorkbook.Names("maPlageRienQuaMoi").Delete
                End If
                fichier = Dir()
            Loop
            Importer = Temp
        End If
    End Function
    Que l'on peut appeler comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub Appel()
    Dim MesValeurs(), i As Long
     
        'attention les $ sont obligatoires dans l'adresse de cellule
        MesValeurs = Importer("Feuil1", "$B$11", "Feuil3", "xls")
        For i = LBound(MesValeurs) To UBound(MesValeurs)
            Debug.Print MesValeurs(i)
        Next i
    End Sub

Discussions similaires

  1. [2008R2] Importation des données parmi plusieurs fichiers dans un dossier
    Par marcandre dans le forum SSIS
    Réponses: 5
    Dernier message: 06/05/2015, 09h28
  2. [XL-2007] Extraire données de plusieur fichiers .xls selectionné via un dossier
    Par wisemanvsfatboy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/05/2009, 17h34
  3. Intégrer les données de plusieurs fichiers dans une table
    Par soad029 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2007, 04h57
  4. extraire donné fichier txt afficher dans xml
    Par jasminrose dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 01/04/2007, 13h14
  5. [MySQL] affichage de données de plusieurs tables dans un même tableau ?
    Par undebutant dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/03/2007, 12h56

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