Excel: copie depuis fichiers multiples vers un classeur de stats

Excel: copie depuis fichiers multiples vers un classeur de stats - VB/VBA/VBS - Programmation

Marsh Posté le 11-03-2015 à 23:00:20    

:hello: la compagnie o/
 
Je fais une incursion dans la cat programmation pour un petit problème sur lequel je butte.
 
Pour l'histoire, en attendant le déploiement d'un erp au niveau national j'ai commencé à travailler sur Excel pour créer quelques documents, puis gérer une petite bdd client, puis d'autres documents, puis la mise en réseau des fichiers... bref mes petits classeurs Excel prennent une ampleur inattendue.
Le déploiement du système globalisé/interconnecté/topmoumoute prend du retard et je dois continuer à me débrouiller avec les outils à ma disposition.
 
Tant que des formules excel permettent de contourner l'utilisation du code ça va, mais je dois maintenant tirer des statistiques des affaires traitées et j'ai un problème simple dont la solution est sûrement aussi simple mais je ne sais pas comment faire, parce que la syntaxe toussa, je gère moyen [:eric le-looser]
 
 
 
Voila comment se compose mon travail:
 
https://lh4.googleusercontent.com/-0ro9rjkldIg/VQCwAB-iC1I/AAAAAAAADTM/zgjFiu2Zckk/w910-h394-no/pic.jpg
 
- Les classeurs D1, D2, D3,[...],Dn sont mes "dossiers", j'ai un dossier par affaire traitée.
- Dans chacun de ces dossiers je crée entre autres une feuille avec uniquement un récapitulatif, les informations sont tirées des autres feuilles du classeur (c'est nécessaire car les positions des cellules dans les autres feuilles changent selon le type d'affaire traitée)
- le classeur "stats" est dans le même répertoire que les classeurs correspondant à chaque affaire
- Les dossiers sont créés petit à petit, et il est impossible de gruger excel qui ne veut pas pointer vers un classeur inexistant quand on utilise une formule nécessitant un lien entre deux classeurs
 
Il me faudrait juste une solution pour copier automatiquement (dans l'exemple) la ligne 2 de feuil1 de chacun des classeurs présents dans le répertoire de D1 à Dn, et les inclure les unes à la suite des autres dans une feuille du classeur "stats" dans lequel je ferai d'autres manipulations pour obtenir les résultats voulus.
 
On fait comment? :??:
 
J'ai déjà passé un petit moment à chercher sur le ouaibe et ai trouvé des solutions semblant correspondre à ce que je veux faire mais souvent ce sont des solutions à des problèmes bien plus compliqué, du coup en partant d'un code compliqué je suis bien incapable de le simplifier pour l'adapter à mes besoins [:ddr555]
 
Notez que j'assume parfaitement ma noobitude, sans multi [:roger21:1]


Message édité par gurk13 le 11-03-2015 à 23:00:54
Reply

Marsh Posté le 11-03-2015 à 23:00:20   

Reply

Marsh Posté le 12-03-2015 à 19:19:51    

 
           Bonjour,
 
           peut aussi s'effectuer par formules de calculs, consulter l'aide d'Excel pour créer une liaison avec un autre classeur
 

Reply

Marsh Posté le 12-03-2015 à 22:24:18    

o/
 
Merci pour ta réponse, par contre le problème avec les formules c'est qu'il semble y avoir nécessité de lier les classeurs.
 
Donc si demain je crée un classeur D4 , il faut que le classeur de stats puisse aller taper dedans sans devoir créer une liaison à chaque fois.
 
Ou alors on peut créer des liaisons automatiquement??

Reply

Marsh Posté le 03-05-2015 à 14:35:26    

o/
 
De retour avec mon petit fichier de stats :D
 
j'ai pris le temps de me pencher sur le vba, la syntaxe toussa... le code est assez simple, le voici:
 

Code :
  1. Sub plop()
  2. 'ignorer les messages d'ouverture/fermeture des fichiers
  3. Application.DisplayAlerts = False
  4. 'parcourir le répertoire pour trouver les .xlsx, les ouvrir et copier les cellules voulues les unes à la suite des autres dans la feuille "stats" de mon fichier "recap"
  5. ChDir ("C:\Users\Administrateur\Desktop\excel test" )
  6. dossier = Dir("C:\Users\Administrateur\Desktop\excel test\*.xlsx" )
  7. While Len(dossier) > 0
  8. Workbooks.Open dossier
  9.     Sheets("stats" ).Range("a2:x2" ).Copy
  10.     Workbooks("Recap.xlsm" ).Activate
  11.     Workbooks("Recap.xlsm" ).Sheets("Feuil1" ).Range("a" & ActiveSheet.UsedRange.Rows.Count + 1).Select
  12.     Workbooks("Recap.xlsm" ).Sheets("Feuil1" ).Paste
  13.     Workbooks(dossier).Close
  14. dossier = Dir
  15. Wend
  16. End Sub


 
Ma petite macro est donc capable d'ouvrir les fichiers .xlsx d'un répertoire, aller chercher les cellules qui m'intéressent (b2 à x2) dans la feuille qui m'intéresse ("stats"), les coller dans mon fichier recap.xslx et s'arrêter quand le tour des fichiers a été fait.
 
Petit problème: certaines cellules de la feuille "stats" ont des références relatives que je souhaite conserver dans mes dossiers mais pas dans le fichier recap.xlsx!
 
Il me manque donc un bout de code pour faire l'équivalent de la fonction collage spécial -> valeurs
Je ne sais pas si le code doit être modifié en ligne 15 (copie) ou 18 (collage)et je n'arrive pas à trouver comment faire sur le ouebe.
 
Un p'tit coup de pouce hfr? [:agkklr]
 
 
 
Edit: trouvay grace à l'enregistreur de macros \o/
 

18. Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats


Message édité par gurk13 le 03-05-2015 à 15:33:55
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed