Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 extraction de données vba

Bob 31

XLDnaute Occasionnel
Bonjour,
je souhaite extraire depuis une trentaine de classeurs vers un classeur les données de personnes depuis une cellule pour chaque mois de l'année
Ces données me serviraient a calculer les moyennes mensuelles et également des moyennes au fil des mois de l'année pour chacune des personnes
En vous remerciant par avance pour votre aide
 
Solution
Maintenant pour traiter uniquement les dossiers listés dans la feuille SANITAIRE utilisez cette macro :
VB:
Sub Liste_Fichiers()
Dim annee$, chemin$, P As Range, fso As Object, lig&, dossier As Object, f As Object, fichier$, x$, col%
annee = ActiveSheet.Name
If Not annee Like "####" Then Exit Sub 'ne traite pas les autres feuilles
'chemin = "\\192.168.0.250\shared\drh\"
chemin = ThisWorkbook.Path & "\" 'plus facile pour tester
Set P = ActiveSheet.ListObjects(1).Range 'tableau structuré
Application.ScreenUpdating = False
P.Rows(2) = "" 'efface toute la ligne
Rows(P.Rows(3).Row & ":" & Rows.Count).Delete 'RAZ en dessous
Set fso = CreateObject("Scripting.FileSystemObject")
lig = 2
For Each dossier In fso.GetFolder(chemin).SubFolders...

Laurent78

XLDnaute Occasionnel
Bonjour,
Je pense qu'il serait plus simple d'utiliser Power Query. Pour répondre convenablement, il nous faudrait également quelques fichiers exemple source (anonymisés bien sûr).
En deux mots : PQ permet de faire des requêtes sur un ensemble de fichiers contenus dans un dossier.
Bon dimanche
 

Bob 31

XLDnaute Occasionnel
Bonjour,
je souhaite extraire des données depuis une trentaine de classeurs sources vers un classeur cible plutôt en VBA si possible
Ces données sont dans des classeurs sources par agent (Nom Prénom) et par an dans un dossier
\\192.168.0.250\shared\drh\" & NomPré & "\" & NomPré & " " & Année & ".xlsx"
ANNEEZ1 (classeur cible)
Je voudrait récupérer dans le classeur cible les données par agent (Nom Prénom) et par mois le montant de la cellule (G43) de chaque agent et de chaque mois (onglets source)
Cela me serviraient a calculer les moyennes mensuelles et également des moyennes au fil des mois de l'année pour chacune agents
Ci joint le classeur cible (AMPLITUDES) et un classeur source (ABADIE FABIEN)
En vous remerciant par avance pour votre aide
 

Pièces jointes

  • AMPLITUDES.xlsx
    15.4 KB · Affichages: 5
  • ABADIE FABIEN 2024.xlsx
    525.1 KB · Affichages: 9

chris

XLDnaute Barbatruc
Bonjour

Une solution PowerQuery

Modifier le chemin d'accès dans l'onglet Feuil2 puis clic droit dans le tableau de résultats (vert) et Actualiser
 

Pièces jointes

  • AMPLITUDES.xlsx
    31.9 KB · Affichages: 6
Dernière édition:

Bob 31

XLDnaute Occasionnel
Bonjour à tous,
je souhaite récupérer des données depuis une trentaine de classeurs sources vers un classeur cible plutôt en VBA si possible
Ces données sont dans des classeurs sources par agent (Nom Prénom) et par an dans un dossier
\\192.168.0.250\shared\drh\" & NomPré & "\" & NomPré & " " & Année & ".xlsx"
Exemple \\192.168.0.250\Shared\DRH\ABADIE FABIEN\[ABADIE FABIEN 2024.xlsx]JANVIER'!$G$43
CHOIX DE L'ANNEE en Z1 (classeur cible)
Je voudrait récupérer dans le classeur cible les données par agent (Nom Prénom) et par mois (Janvier à Décembre) le montant de la cellule (G43) de chaque agent et de chaque mois (12 onglets Janvier à Décembre) depuis les classeurs sources
Cela me serviraient a calculer les moyennes mensuelles et également des moyennes au fil des mois de l'année pour chacune agents
Ci joint le classeur cible (AMPLITUDES) et un classeur source (ABADIE FABIEN)
En vous remerciant par avance pour votre aide
 

Pièces jointes

  • AMPLITUDES.xlsx
    15.5 KB · Affichages: 3
  • ABADIE FABIEN 2024.xlsx
    525.1 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour Bob 31, le forum,

Téléchargez les fichiers joints, ouvrez le fichier .xlsm et exécutez cette macro :
VB:
Sub Liste_Fichiers()
Dim fichier, annee$, w As Worksheet, P As Range, chemin$, lig&, col%, x$
fichier = Application.GetOpenFilename("Fichiers .xlsx (*.xlsx), *.xlsx")
If fichier = False Then Exit Sub
annee = Left(Right(fichier, 9), 4)
If Not annee Like "####" Then MsgBox "Le nom du fichier doit se terminer par une année...": Exit Sub
'---feuille de destination---
Application.ScreenUpdating = False
On Error Resume Next
Set w = Sheets(annee)
If w Is Nothing Then
    Sheets(1).Copy After:=Sheets(Sheets.Count)
    Set w = ActiveSheet
    w.Name = annee
End If
On Error GoTo 0
w.Activate
Set P = w.ListObjects(1).Range
P(2, 1).Resize(, 13) = ""
w.Rows(P.Rows(3).Row & ":" & w.Rows.Count).Delete 'RAZ en dessous
'---traitement des fichiers---
chemin = Left(fichier, InStrRev(fichier, "\"))
fichier = Dir(chemin & "*" & annee & ".xlsx")
lig = 2
While fichier <> ""
    P(lig, 1) = Left(fichier, Len(fichier) - 10)
    x = "'" & chemin & "[" & fichier & "]"
    For col = 2 To 13
        P(lig, col) = ExecuteExcel4Macro(x & P(1, col) & "'!R43C7") 'cellule G43
    Next col
    lig = lig + 1
    fichier = Dir 'fichier suivant
Wend
'---compléments---
P(lig + 1, 1) = "TOTAL"
P(lig + 1, 2).Resize(, 24) = "=SUM(R2C:R" & lig - 1 & "C)"
P(lig + 2, 1) = "MOYENNE MENSUELLE"
P(lig + 2, 2).Resize(, 12) = "=AVERAGE(R2C:R" & lig - 1 & "C)"
P.EntireColumn.AutoFit 'ajustement largeurs
End Sub
Nota 1 : dans le fichier ABADIE FABIEN 2024.xlsx il y avait des espaces superflus dans les noms des feuilles.

Nota 2 : Les noms des mois sont sans accents, si on les met il faut les mettre dans tous les fichiers.

A+
 

Pièces jointes

  • AMPLITUDES(1).xlsm
    23.8 KB · Affichages: 8
  • ABADIE FABIEN 2024.xlsx
    524.8 KB · Affichages: 6

Bob 31

XLDnaute Occasionnel
Bonjour Job 75
Merci pour la proposition
Est il possible d'automatiser le chemin :
\\192.168.0.250\shared\drh\" & NomPré & "\" & NomPré & " " & Année & ".xlsx" afin que je propose une liste d'agent Nom Prénom en colonne A du classeur source
et de proposer un ajout de bouton d'exécution par année
Merci
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…