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

  • Initiateur de la discussion Initiateur de la discussion Bob 31
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...
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
 
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

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

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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
506
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…