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