Récupération de données sur plusieurs classeurs

Bonjour,

Pour mon taf, je dois récupérer des données de matières grasses sur le réseau de mon entreprise via plusieurs dossiers et classeurs.

Exemple: mon chemin pointe un dossier commun, mais dans ce dossier il y a les dossiers mois (01-janvier; 02-février,etc...) et les dossiers semaines de chaque mois (sem01,sem02,etc...) e dans ces dossiers il y a des classeurs de la synthèse de la semaine (sem01.xlsx, sem02.xlsx,etc...).

J'ai donc commencé à ecrire le code suivant :

Sub filesearch()

Dim chemin, dos1, dos2, dos3, fic, fic2 As String

Dim Count, i As Integer

Count = ("0")

i = "1"

fic = "sem" & Count & i

fic2 = fic & ".xlsx"

chemin = "P:\FOSS\2015\"

dos1 = Count & i & "-" & Range("b" & i).Value

dos2 = chemin & "\" & dos1 & "\" & "sem" & Count & i & "\"

dos3 = dos2 & "\" & fic & ".xlsx"

Workbooks.Open dos3

Windows("Classeur2").Activate

Range("b2").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R8C3"

Range("b3").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R14C3"

Range("b4").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R20C3"

Range("b5").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R26C3"

Range("b6").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R32C3"

Range("b7").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R44C3"

Range("b8").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R50C3"

Range("b9").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R56C3"

Range("b10").Value = "=if(iserror(" & " '[" & fic & ".xlsx]bilan semaine'!R62C3" & ")="""",0, & " '[" & fic & ".xlsx]bilan semaine'!R62C3)"

Range("b11").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R68C3"

Range("b12").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R74C3"

Range("b13").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R80C3"

Range("b14").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R86C3"

Range("b15").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R92C3"

Range("b16").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R98C3"

Range("b17").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R104C3"

Range("b18").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R110C3"

Range("b19").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R116C3"

Range("b20").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R122C3"

Range("b21").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R128C3"

Range("b22").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R134C3"

Range("b23").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R140C3"

Range("b24").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R146C3"

Range("b25").Value = "=" & "'[" & fic & ".xlsx]bilan semaine'!R152C3"

Workbooks(fic2).Close

End Sub

Vous remarquerez que pour la valeur de la cellule (b10) je voudrais que la valeur devienne "0" si j'ai une erreur dans la cellule, biensur cette formule ne fonctionne pas quand j'arrive dessus...

Donc mes questions sont :

1- Quelle est la bonne variable VBA pour que ma formule fonctionne car quand je l'écrit directement dans la cellule

(formule :"=SI(ESTERREUR(B12)=0;B12;0)") c'est OK?

2-comment puis-je modifier ma variable pour qu'elle aille chercher les données dans les classeurs de chaque semaine depuis le début de l'année? (et bien sur les mettre respectivement dans chaque colonne de chaque mois sur mon classeur final)

J'espère avoir été asser clair dans mes propos et surtout compris

Merci à ceux qui prendront le temps de lire ce post et de me répondre.

A tout à l'heure

Bonjour

Réponse à la 1ère question

Tu as 2 formules différentes, laquelle est la bonne ?

Dans la macro tu peux la modifier comme ceci

Range("b10").Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R62C3)="""",0,'[" & fic & ".xlsx]bilan semaine'!R62C3)"

Pour la seconde il faut impérativement le fichier principal, et 1 fichier d'extraction (dans la mesure où il sont tous identiques (structure) )

Re,

Je ne comprends pas bien ce que tu veux dire en disant :"tu as deux formules différentes, laquelle est bonne?"

Ce que je veux c'est que lorsque je n'ai pas de résultat ou l'erreur #div/0!, la cellule correspondante dans mon fichier principal soit égale à zéro ou que rien ne s'affiche.

Je viens de tester ta formule et j'ai toujours "#div/0!" qui s'affiche dans ma cellule b10.

Voici les fichiers en question:

6sem01.xlsx (107.72 Ko)
7recup-data.xlsm (22.01 Ko)

J'ai fais en sorte de nommer tout les fichiers de la même manière afin de pouvoir extraire les données plus rapidement.

Merci pour ton aide.

Je précise que je suis débutant dans le VBA et que je comprends les variables mais que j'ai encore du mal à les créer moi même...

A tte et bon appétit...

Bonjour

A tester

Penses à modifier le chemin

Re,

Impeccable c'est exactement ce que je voulais. Merci

Maintenant comment je peux faire pour que j'aille rechercher ces données dans chaque classeur nommé sem01.xlsx, sem02.xlsx,...

et les mettre dans mon tableau à la suite.

Je mets le fichiers de nouveau avec en feuille 2 l'exemple...

C'est compliqué comme demande mais je préfère le faire comme ça que des copier/coller, et ça me servira bien pour d'autres fichiers...

Je n'ai pas remodifier le chemin...

Encore merci

Bonjour

Peux tu expliquer un peu plus ?

Que veux tu récupérer et surtout où placer les données que tu récupères ?

Donnes des exemples précis, car toi tu connais ton fichier, mais moi je découvre

La feuille 2 sert à quoi ?

ok je vais essayer d'expliquer ce que j'ai en tête (Pas facile )

Quotidiennement des analyses de Matières Grasses sont effectuées dans mes ateliers, je retranscrit les résultat sur mes fichiers nommés "SemX" (ou X = numéro de la semaine)

Chaque fichier est enregistrés dans un dossier du même nom qui sont eux même dans un dossier nommé par mois (afin de les avoir dans l'ordre, j'ai dû les nommé comme cela : 01-Janvier, 02-février, etc.)

Chaque fichier contient donc les résultats pour les différents taux analysées (5%, 15%, 20%, etc)

Aujourd'hui mon bosse m'a demandé de mettre tout ça sur un fichiers afin de relever tout les résultats et de faire une moyenne par taux et par mois.

Donc je dois récupérer les résultats de chaque semaine et faire une moyenne par taux et ce pour chaque mois depuis le début de l'année...(d'où mon tableau en feuille 2 en guise d'exemple, mon tableau final est celui en feuille 1).

Après je ne sais pas si je m'y suis bien pris pour commencer le fichier...

J'aimerais donc que pour le 5% du mois de janvier, par exemple, j'ai 1 ligne représentant mes moyenne de taux par semaine afin d'avoir en 5ème ligne ma moyenne du mois.

Chaque moyenne de la semaine est situé dans les mêmes cellules sur tous mes fichiers.

Le but est donc de récupérer mes moyennes par semaine pour faire une moyenne par mois et par taux depuis le début de l'année pour que mon bosse et d'autres acteurs puissent étudier ces taux.

Voilà, j'espère avoir été un peu plus clair pour que tu puisse comprendre ma demande

Encore merci pour ton aide.

Bonjour

Pas trop clair

Banzai64 a écrit :

Donnes des exemples précis

Je ne sais pas où ils sont

Dans ta feuille 2 en janvier tu notes 4 semaines, alors qu'il a 5 semaines

Où va se situer la ligne pour les moyennes de janvier, février etc ....?

Dans le répertoire 01-Janvier il y a 5 répertoires (Sem01, Sem02 etc ..) et dans ces répertoires il n'y a qu'un seul fichier du nom du répertoire qui le contient

Exact ?

Je suis compliqué mais si c'est cette architecture alors bienvenu au club

Je ne sais pas si je vais y arriver, ça m'a l'air assez tordu (mais bon c'est ma première impression)

Pourquoi tu ne récupères pas la moyenne du 20% bio frais ?

Re,

Non tu as raison, je vais posé tout ça sur papier et te faire une belle architecture, comme ça tu y verras plus clair.

Concernant le 20% Bio nous n'en faisons pas donc pas la peine de le mettre.

Pour le nom du fichier, c'est exact. Le répertoire 01-Janvier (qui a effectivement 5 semaines ^^)se décline comme tel :

.\01-Janvier\------->Sem01\sem01.xlsx

------->Sem02\sem02.xlsx

------->Sem03\sem03.xlsx

------->Sem04\sem04.xlsx

------->Sem05\sem05.xlsx

etc

Je vais extraire une arborescence avec la commande DOS "Tree" et te montrerais comment mes dossiers sont classifiés.

Tordu? Oui peut être que je me complique la vie mais ça me paraissait plus rapide d'extraire ces données comme ça.

Je te fais tout ça pour demain, si ce n'est pas possible comme je le demande j'essayerais avec une autre solution (rien ne m'arrête^^) et je vais continué de chercher un peu aussi de mon coté...

En tout cas merci encore une fois.

Bonne soirée et à demain.

Bonjour,

Voici le fichier de l'arborescence du dossier 2015 :

Après j'ai un peu réfléchi, s'il faut que je tape les lignes de code par mois, ce n'est pas grave, ça va justement me faire rentrer ces codes dans le crâne !

Sinon je peut faire en sorte que tous les fichiers sem*.xlsx se retrouve dans le même dossier mais mon boss (et pas bosse (la honte^^)) voudrais que cela reste pour les prochaines semaines et l'année prochaine, ainsi de suite.

Je vais faire des tests ce matin, je reviendrais pour dire si j'ai une solution ou non.

A plus!!!

Re salut,

Bon j'ai bricolé un truc qui est un peu laborieux mais ça fonctionne :

Sub filesearch()

Dim chemin, dos1, dos2, dos3, fic, fic2 As String

Dim Count, i, l As Integer

Count = InputBox("selection du mois :")

i = "1"

l = "2"

fic = "sem" & InputBox("selection de la semaine :")

fic2 = fic & ".xlsx"

Dim objWorkbookSource As Workbook, objWorkbookCible As Workbook

chemin = "P:\FOSS\2015\" & Count & "\"

'dos1 = Count & i & "-" & Range("b" & i).Value

'dos2 = chemin & "\" & dos1 & "\" & "sem" & Count & i & "\" & "sem" & Count & i & ".xlsx"

dos2 = chemin & fic & "\"

dos3 = dos2 & "\" & fic & ".xlsx"

'Application.Workbooks.Open dos2 dos3

'Set objWorkbookSource = Application.Workbooks.Open(dos2) & (dos3)

'Set objWorkbookCible = Application.Workbooks.Add

Workbooks.Open dos3

'Workbooks.Open dos3 + i

Windows("Recup-data.xlsm").Activate

InputBox1 = InputBox("column?")

Inputbox2 = InputBox("numero de cellule :")

Range(InputBox1 & Inputbox2).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R8C3),0,'[" & fic & ".xlsx]bilan semaine'!R8C3)"

Range(InputBox1 & Inputbox2 + 6).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R14C3),0,'[" & fic & ".xlsx]bilan semaine'!R14C3)"

Range(InputBox1 & Inputbox2 + 12).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R20C3),0,'[" & fic & ".xlsx]bilan semaine'!R20C3)"

Range(InputBox1 & Inputbox2 + 18).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R26C3),0,'[" & fic & ".xlsx]bilan semaine'!R26C3)"

Range(InputBox1 & Inputbox2 + 24).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R32C3),0,'[" & fic & ".xlsx]bilan semaine'!R32C3)"

Range(InputBox1 & Inputbox2 + 30).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R44C3),0,'[" & fic & ".xlsx]bilan semaine'!R44C3)"

Range(InputBox1 & Inputbox2 + 36).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R50C3),0,'[" & fic & ".xlsx]bilan semaine'!R50C3)"

Range(InputBox1 & Inputbox2 + 42).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R56C3),0,'[" & fic & ".xlsx]bilan semaine'!R56C3)"

Range(InputBox1 & Inputbox2 + 48).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R62C3),0,'[" & fic & ".xlsx]bilan semaine'!R62C3)"

'Range("b10").Value = "=if(iserror(" & " '[" & fic & ".xlsx]bilan semaine'!R62C3" & ")="""",0," & "'[" & fic & ".xlsx]bilan semaine'!R62C3)"

Range(InputBox1 & Inputbox2 + 54).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R68C3),0,'[" & fic & ".xlsx]bilan semaine'!R68C3)"

Range(InputBox1 & Inputbox2 + 60).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R74C3),0,'[" & fic & ".xlsx]bilan semaine'!R74C3)"

Range(InputBox1 & Inputbox2 + 66).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R80C3),0,'[" & fic & ".xlsx]bilan semaine'!R80C3)"

Range(InputBox1 & Inputbox2 + 72).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R86C3),0,'[" & fic & ".xlsx]bilan semaine'!R86C3)"

Range(InputBox1 & Inputbox2 + 78).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R92C3),0,'[" & fic & ".xlsx]bilan semaine'!R92C3)"

Range(InputBox1 & Inputbox2 + 84).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R98C3),0,'[" & fic & ".xlsx]bilan semaine'!R98C3)"

Range(InputBox1 & Inputbox2 + 90).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R104C3),0,'[" & fic & ".xlsx]bilan semaine'!R104C3)"

Range(InputBox1 & Inputbox2 + 96).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R110C3),0,'[" & fic & ".xlsx]bilan semaine'!R110C3)"

Range(InputBox1 & Inputbox2 + 102).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R116C3),0,'[" & fic & ".xlsx]bilan semaine'!R116C3)"

Range(InputBox1 & Inputbox2 + 108).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R122C3),0,'[" & fic & ".xlsx]bilan semaine'!R122C3)"

Range(InputBox1 & Inputbox2 + 114).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R128C3),0,'[" & fic & ".xlsx]bilan semaine'!R128C3)"

Range(InputBox1 & Inputbox2 + 120).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R134C3),0,'[" & fic & ".xlsx]bilan semaine'!R134C3)"

Range(InputBox1 & Inputbox2 + 126).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R140C3),0,'[" & fic & ".xlsx]bilan semaine'!R140C3)"

Range(InputBox1 & Inputbox2 + 132).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R146C3),0,'[" & fic & ".xlsx]bilan semaine'!R146C3)"

Range(InputBox1 & Inputbox2 + 138).Value = "=if(iserror('[" & fic & ".xlsx]bilan semaine'!R152C3),0,'[" & fic & ".xlsx]bilan semaine'!R152C3)"

Workbooks(fic2).Close

End Sub

Après je choisi les mois, semaines, colonnes et cellules mais au moins j'ai un résultat...

Si il y a une possibilité de l'améliorer je suis preneur...

Je reviendrais jeter un coup d'oeil Lundi, je mettrais en résolu à ce moment là!

A plus

Bonjour

J'ai regardé un peu plus et la complexité est due à cette arborescence, pas facile de savoir dans dossier se trouve telle ou telle semaine

Pour faire des test j'aurai besoin, justement, des fichiers des semaines dans différents mois

Dans un fichier zippé tu n'envoies que les dossiers des mois, les dossiers des semaines et les fichiers des semaines

Voir le fichier

Une question : Le programme fonctionnera qu'avec XL2007 ou plus , ou aussi avec XL2003

Re,

Ok je verrais ça Lundi ...

Merci

Bon week end...

Rechercher des sujets similaires à "recuperation donnees classeurs"