Récupération de données

Bonjour à Tous,

Je possède un dossier ou se trouve de nombreux fichiers Excel ayant la même structure et que je dois conserver.

Cependant, j'aimerais que toutes les sommes de ces données se trouvant dans ces différents fichiers s'additionne dans un seul et même fichier (Recap demande).

Tous les fichiers dans lequel je récupère mes données se nomme Demande S1 puis demande S2 etc.

Par exemple en cellule C28 de mon fichier "Récap demande" doit se trouver la somme de les cellules C28 des fichiers "demande S1 puis demande S2 etc)

Espérant avoir été assez claire dans mes explications, je vous souhaite à tous une bonne journée.

Et merci de votre aide

https://www.cjoint.com/c/GDzhcThwEy0

4s2.xlsx (15.37 Ko)
7recap-demande.xlsx (15.36 Ko)

Bonjour Xavier, bonjour le forum,

Peut-être comme ça (à placer dans le classeur Recap) :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim F As String 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim T As Long 'déclare la variable T (Total)

Set CD = ThisWorkbook 'définit le classeur Destination CD
Set OD = CD.Worksheets("Feuil1") 'définit l'onglet Destination OD
CH = CD.Path & "\" 'définit le chemin d'accès CH
F = Dir(CH & "Demande*.xlsx") 'définit le premier fichier commençant par "Demande" dans le dossier CH
Application.DisplayAlerts = False 'masque les messages d'Excel
Do While F <> "" 'exécute tant qu'il existe des fichiers F
    Workbooks.Open (F) 'ouvre le fichier F
    Set CS = ActiveWorkbook 'définit le classeur source CS
    Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source OS
    T = CLng(OD.Range("C28")) + CLng(OS.Range("C28")) 'définit le Total T
    OD.Range("C28").Value = T 'renvoie dans la cellule C28 du classeur destination le total T
    CS.Close False 'ferme le classeur source sans enregistrer
    F = Dir 'passe au fichier suivant
Loop 'boucle
Application.DisplayAlerts = True 'affiche les messages d'Excel
End Sub

Bonsoir ThauThème

Je te remercie pour ta réponse rapide.Je n'ai pas pu encore tester ton code car je suis à mon domicile et mon fichier au bureau.

Je jette un œil demain et te tiens au courant.

Cependant, je ne connais pas grand chose en VBA, mais je vois que dans le code , tu ne parles que de la cellule C28 or il faut que cela fonctionne pour les cellules de des fichiers "demande".

De mémoire ce sont les cellules allant de B28 à K34.

Si cela devient trop compliqué, le classeur "Recap" peut se présenté sous forme de tableau avec seulement se qui se trouve dans les cellule allant de A27 à K34.

Je te remercie et te tiens au courant.

ThauThème a écrit :

Bonjour Xavier, bonjour le forum,

Peut-être comme ça (à placer dans le classeur Recap) :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim F As String 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim T As Long 'déclare la variable T (Total)

Set CD = ThisWorkbook 'définit le classeur Destination CD
Set OD = CD.Worksheets("Feuil1") 'définit l'onglet Destination OD
CH = CD.Path & "\" 'définit le chemin d'accès CH
F = Dir(CH & "Demande*.xlsx") 'définit le premier fichier commençant par "Demande" dans le dossier CH
Application.DisplayAlerts = False 'masque les messages d'Excel
Do While F <> "" 'exécute tant qu'il existe des fichiers F
    Workbooks.Open (F) 'ouvre le fichier F
    Set CS = ActiveWorkbook 'définit le classeur source CS
    Set OS = CS.Worksheets("Feuil1") 'définit l'onglet source OS
    T = CLng(OD.Range("C28")) + CLng(OS.Range("C28")) 'définit le Total T
    OD.Range("C28").Value = T 'renvoie dans la cellule C28 du classeur destination le total T
    CS.Close False 'ferme le classeur source sans enregistrer
    F = Dir 'passe au fichier suivant
Loop 'boucle
Application.DisplayAlerts = True 'affiche les messages d'Excel
End Sub

Bonjour @ThauThème,

Je viens de tester ton code et je pense que cela ne sera pas adapter à ce que je recherche mais je pense que cela viens de moi qui me suis mal exprimé et peut être pas assez cogiter à mon sujet.

J'ai changé le modèle du classeur afin d'avoir l'historique de toutes mes commandes avec les dates et les quantités et une colonne du total pour chaque article commandés.

Donc , il faudrait dans ce classeur que soit reportés les quantités de chaque classeur nommer comme au début de mon sujet 'demande S1 puis demande S2 "etc.

Merci de ton aide et bonne journée

8s2.xlsx (15.37 Ko)

Re,

Une solution est envisageable avec basiquement le même code et en utilisant une variable tableau. Mais avec les cellules fusionnées (ennemies de VBA), je ne m'y risquerais pas...

ThauThème a écrit :

Re,

Une solution est envisageable avec basiquement le même code et en utilisant une variable tableau. Mais avec les cellules fusionnées (ennemies de VBA), je ne m'y risquerais pas...

Bonjour @ThauThème,

Je te remercie pour le temps accordé et j'essaie de voir de mon coté.

Bonne journée

Rechercher des sujets similaires à "recuperation donnees"