Microsoft 365 MAcro VBA - Recherche dans un groupe de fichier

jey31

XLDnaute Nouveau
Bonjour à tous
Je suis en cours de développement d'une macro afin de faire un fichier de collecte

je m'explique, j'ai des données des puissances de 66 Turbines qui sont stockées individuellement dans une fichier .xls soit 66 fichiers.. La je dois donc collecter les données des la dernières lignes de chaque fichiers sur une range définies par exemple ("AI:AO").

Le problème c'est que j'arrive pas a aller chercher chacune de ses lignes sans avoir à rentrer manuellement

auriez vous une idées ? .. je sèche
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jey,
C'est assez simple à faire si :
- Tous les fichiers sont en xls
- Ils sont tous dans le même dossier
- Les données à récupérer sont toujours au même endroit
Si c'est le cas, postez quelques ex de fichiers, quoi récupérer et comment organisées les datas en sortie.
 

jey31

XLDnaute Nouveau
Bonjour Jey,
C'est assez simple à faire si :
- Tous les fichiers sont en xls
- Ils sont tous dans le même dossier
- Les données à récupérer sont toujours au même endroit
Si c'est le cas, postez quelques ex de fichiers, quoi récupérer et comment organisées les datas en sortie.
Tout est dans le meme dossier, justement ^^ j'ai trouvé un exemple de macro.. mais ca veut pas s'appliquer à mon type ..
 

jey31

XLDnaute Nouveau
Sub Search_Function()


Dim wbRecap As Workbook 'fichier recap
Dim wsRecap As Worksheet 'feuille où on écrit les données
Dim wbSource As Workbook 'fichier à ouvrir
Dim wsSource As Worksheet 'feuille où on cherche les données
Dim DernLign As Integer 'ligne où on écrit les données
Dim vFichiers As Variant 'noms des fichiers
Dim i As Integer, k As Integer
Dim rgRecap As Range 'plage où on copie les données


vFichiers = Selectionner_Fichiers("Sélectionner les fichiers à compiler") 'Appel de Fonction pour ouvrir fichiers


Set wbRecap = ThisWorkbook 'Fichier récapitulatif
Set wsRecap = ThisWorkbook.ActiveSheet 'on écrit dans la feuille 1 du fichier récapitulatif


' --- Vérifier qu'au moins un fichier à été sélectionné-----------------------------------------------------------------

If Not IsArray(vFichiers) Then
Debug.Print "Aucun fichier sélectionné."
MsgBox "Erreur! Aucun/Mauvais fichier sélectionné."
Exit Sub
End If

On Error Resume Next

Application.ScreenUpdating = False


' --- Boucle à travers les fichiers

For k = 1 To UBound(vFichiers)
Application.StatusBar = ">> Lecture du fichier #" & k & "/" & UBound(vFichiers)


' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

' C'est ici qu'on écrit les instructions

Set wbSource = Workbooks.Open(vFichiers(k)) 'on ouvre le fichier


Set wsSource = wbSource.Sheet("Template") 'On copie les données de la feuille 1
DernLign = wbRecap.Cells(Rows.Count, 36).End(x1up).Row + 1 'ligne pour écrire le log des fichiers compilés

' - On copie les données vers le fichier Recapitulatif; à adapter
Set rgRecap = wsRecap.Range("F65000").End(xlUp).Offset(1, 0)

rgRecap = Time

With wsSource
rgRecap.Offset(0, 1) = .Range("B7")
rgRecap.Offset(0, 2) = .Range("B8")
rgRecap.Offset(0, 3) = .Range("B10")
rgRecap.Offset(0, 4) = .Range("B13")
rgRecap.Offset(0, 5) = .Range("B14")
End With

wbSource.Close 'fermer fichier
Set wbSource = Nothing
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Next k

Application.ScreenUpdating = True
Application.StatusBar = False



End Sub

Function Selectionner_Fichiers(sTitre As String) As Variant
Dim sFiltre As String, bMultiSelect As Boolean

sFiltre = "Statistic_(.xls)(.xlsm), *.xls*"
bMultiSelect = True 'Permet de choisir plusieurs fichiers à la fois
Selectionner_Fichiers = Application.GetOpenFilename(Filefilter:=sFiltre, Title:=sTitre, MultiSelect:=bMultiSelect)
End Function




Voici l'exemple trouvé
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Faites un fichier test.
Il suffit juste que je sache quoi "picorer" dans le fichier, et comment les ranger dans le fichier résultat.

Au vu de votre code, suffit il de copier ces 5 cellules dans le fichier résultat ?
VB:
With wsSource
rgRecap.Offset(0, 1) = .Range("B7")
rgRecap.Offset(0, 2) = .Range("B8")
rgRecap.Offset(0, 3) = .Range("B10")
rgRecap.Offset(0, 4) = .Range("B13")
rgRecap.Offset(0, 5) = .Range("B14")
End With
 

jey31

XLDnaute Nouveau
En gros,
il faut selectionner la dernière ligne du classeur 2 et copier coller la plages ("L33:M33" & " O33:Q33") sur la première ligne du classeur 4 sur la plages ("F1:J1").

Le truc c'est que réalité j'ai 66 (classeur 2) et je dois prendre chaque dernière ligne et la copier coller successivement dans le classeur 4
 

jey31

XLDnaute Nouveau
Alors en faite j'ai 66 fichier renommer individuellement
Mon objectif cest de copier coller chacune des dernières lignes dans le fichier récap ..

En gros mon idées c'etait des chercher la dernière ligne non vide et de copier coller la plage indiquée
 

Discussions similaires

Réponses
6
Affichages
319

Statistiques des forums

Discussions
312 201
Messages
2 086 164
Membres
103 149
dernier inscrit
Deepkneec