Copier des informations de différents dossiers sans les ouvrir

Bonjour,

Je cherche un code que je sais probablement possible, mais qui est bien au-delà de mes compétences.

J'ai un fichier maître sur lequel je recopie des informations que d'autres personnes m'envoient. Le fichier contient plusieurs onglet construits de la même façon.

Exemple : mon dossier maître comporte les onglets nommés A, B, C, D, E, F...

Chaque personne m'envoie un fichier qui fait référence à une des lettres du dossier maître.

Ce que j'aimerai créer, c'est un code qui permette d'ouvrir automatiquement chaque fichier un par un, qui recopie les informations que je lui demande, qui referme le dossier et passe au suivant. (Donc le fichier mettre ca choisir le dossier A, l'ouvre, recopie les informations et le referme, puis passe à l'onglet B pour aller chercher le dossier B....)

Quelqu'un peut il m'aider ? Pour l'instant la seule solution que j'ai trouvées c'est la création d'un code par onglet et encore il faut que j'ouvre chaque dossier pour que le dossier maître les copie. ce qui ne me convient pas

Bonne journée,

Fabrice

Bonjour,

Le code pour ouvrir un classeur

Dim wb As Workbook       
Set wb = Workbooks.Open("C:\Users\bws229\Desktop\Test\Classeur1.xls" )

Le code pour fermer un classeur

Workbooks("C:\Users\bws229\Desktop\Test\Classeur1.xls").Close False 'sans sauvegarde (True si sauvegarde)

Tu peux faire une boucle pour les ouvrir l'un après l'autre.

bonjour

salut au passage Mus

utilisons Excel et ses fonctionnalités nouvelles (10 ans quand même ! )

menu Données/obtenir de classeur ou répertoire

il lit tous les fichiers contenus dans le répertoire sélectionné

faire "Modifier" (et non "charger" )

bingo !

reste juste à supprimer les datas inutiles (supprimer des colonnes, filtrer, un peu comme dans Excel)

"charger"

pas besoin de VBA.

amitiés

Merci à vous 2 pour vos réponses,

Je vais m'essayer aux 2 solutions, même si Power Query me semble devoir nécessiter quand même beaucoup de manipulations pour arriver à ce que je veux. Mais cela vaut la peine que je le découvre.

en VBA, un code comme devrait fonctionner, non ?

Public Wbk As Workbook, Sht As Worksheet

Sub Ouvre()

Dim wb As Workbook

Set wb = Workbooks.Open("PC_Cherbourg.xls")

End Sub

Sub Maj_PC_Cherbourg()

'

' Maj_PC_Cherbourg Macro

'

'

Windows("PC Cherbourg.xlsx").Activate

Range("B6:C15").Select

Selection.Copy

Windows("Statistiques des H?tels - Novembre 2018 3?me d?cade.xlsm").Activate

Range("B4").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Windows("PC Cherbourg.xlsx").Activate

Range("B17:C26").Select

Application.CutCopyMode = False

Selection.Copy

Windows("Statistiques des H?tels - Novembre 2018 3?me d?cade.xlsm").Activate

Range("B15").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

etc...

Bonjour,

Saluut jmd

Set wb = Workbooks.Open("PC_Cherbourg.xls")

Petit problème ici, il faut mettre le chemin et le nom du classeur, il me semble que tu as mis que le nom

Merci Mus54 pour ton aide.

Est-ce que ce code est bon ou est-ce qu'il faut mettre des underslash entre les espaces ? J'ai essayé les 2 et à chaque fois j'ai le message comme quoi l'indice ne fait pas partie de la sélection. Donc comme s'il n'ouvrait pas le classeur

Set wb = Workbooks.Open("C:\Users\fpass\Desktop\Opérationnel\Statistiques des hôtels\Novembre 2018\2ème décade\PC Cherbourg.xls")

Power Query me semble devoir nécessiter quand même beaucoup de manipulations pour arriver à ce que je veux. Mais cela vaut la peine que je le découvre.

en VBA, un code comme devrait fonctionner, non ?

re

1/

il y a autant de manip dans PQuery que dans VBA, à cette différence près que PQuery est :

  • immensément plus puissant
  • surtout possède un GUI qui te dispense de saisir la moindre ligne de code, et ça change tout

2/

avec VBA tu peux tout faire, même diriger la NASA

mais tu souffriras. Même à toute petite échelle tu souffres déjà

bon travail

amitiés à tous

Tu peux joindre ton fichier ?

Le voilà. Je l'ai réduit en nombre d'onglet sinon il est trop lourd.

Pour l'instant je copie un code pour chaque onglet et je sais que cela va alourdir le classeur. Et par exemple sur celui d'Avignon, je suis obligé d'ouvrir le fichier pour mettre à jour l'onglet.

J'avoue qu'une boucle si cela est possible pour lui demander d'aller chercher le classeur correspondant à chaque onglet serait top

8pc-cherbourg.xlsx (21.13 Ko)
10pc-avignon.xlsx (20.28 Ko)

Re,

Je suis parti du principe que :

  • le nom des onglets de ton fichier maître est le même que le nom des fichiers que tu reçois (sans prendre en compte les formats ".xslx")
  • tout tes fichiers ont la même structure (c-a-d la cellule B3 c'est " NB Bloquée " dans tout tes fichiers
  • les fichiers que tu reçois sont en format ".xlsx")

Il faut que tu mettes tous les fichiers que tu reçois dans un classeur et que tu mette le chemin de ce classeur dans le code (j'ai mis un commentaire là ou tu dois le mettre)

Sub R()
Set wb1 = Workbooks("Statistiques des Hôtels - Novembre 2018 3ème décade TEST 2.xlsm")
Dim chemin As String
Dim monFichier As String

chemin = "C:\Users\XX\Downloads\Nouveau dossier\" 'Met ici le chemin de ton classeur qui contient tes fichiers
monFichier = Dir(chemin & "*.xlsx", vbNormal)

Do While monFichier <> ""
Set wb2 = Workbooks.Open(chemin & monFichier).Sheets(1)
x = Left(monFichier, Len(monFichier) - 5)
MsgBox (wb2.Cells(6, "c"))
wb1.Sheets(x).Range("B4:D13") = wb2.Range("B6:D15").Value
wb1.Sheets(x).Range("B15:D24") = wb2.Range("B17:D26")
wb1.Sheets(x).Range("B26:D36") = wb2.Range("B28:D37")

wb1.Sheets(x).Range("F4:F13") = wb2.Range("F6:F15")
wb1.Sheets(x).Range("F15:F24") = wb2.Range("F17:F26")
wb1.Sheets(x).Range("F26:F36") = wb2.Range("F28:F37")

wb1.Sheets(x).Range("J4:V13") = wb2.Range("J6:V15")
wb1.Sheets(x).Range("J15:V24") = wb2.Range("J17:V26")
wb1.Sheets(x).Range("J26:V36") = wb2.Range("J28:V37")

wb1.Sheets(x).Range("Y4:Z13") = wb2.Range("Y6:Z15")
wb1.Sheets(x).Range("Y15:Z24") = wb2.Range("Y17:Z26")
wb1.Sheets(x).Range("Y26:Z36") = wb2.Range("Y28:Z37")

wb1.Sheets(x).Range("AB4:AB13") = wb2.Range("AB6:AB15")
wb1.Sheets(x).Range("AB15:AB24") = wb2.Range("AB17:AB26")
wb1.Sheets(x).Range("AB26:AB36") = wb2.Range("AB28:AB37")

Workbooks(monFichier).Close False 'sans sauvegarde (True si sauvegarde)

monFichier = Dir
Loop
End Sub

Oublie pas de faire les ajustements nécessaires (noms chemins)

Merci beaucoup Mus

Je teste le fichier avec tous les onglets concernés et te dis si ça fonctionne

Mus,

Alors ça avance Le code arrive à ouvrir les fichiers, par contre il ne recopie qu'une infime partie des données je ne comprends pas pourquoi. En fait il ne recopie que la première partie du code ci-dessous en jaune. Il ne prend pas en compte le reste.

On est d'accord sur ce code, la première partie dit quelles cellules du fichier doivent être recopiées et coller dans le fichier maître ?

wb1.Sheets(x).Range("B4:C13") = wb2.Range("B6:C15").Value

wb1.Sheets(x).Range("B15:C24") = wb2.Range("B17:C26")

wb1.Sheets(x).Range("B26:C36") = wb2.Range("B28:C37")

Il y a aussi un message avec un chiffre qui apparaît à chaque ouverture de fichier. C'est normal ?

Ok Mus, j'ai branché mon cerveau et cela fonctionne

En fait il manquait des ".value" sur chaque ligne

Dernière petite question pour l'instant : Suis-je vraiment obligé de cliquer sur ok à chaque ouverture de fichier ? Ca ne peut pas être validé automatiquement ?

Encore merci pour ton aide tu n'imagines pas le temps que je vais gagner… au moins 1/2 journée de boulot à chque fois que j'aurais à mettre à jour le fichier

Bonjour Fapasse,

Heureux d'avoir pu t'aider.

Dernière petite question pour l'instant : Suis-je vraiment obligé de cliquer sur ok à chaque ouverture de fichier ? Ca ne peut pas être validé automatiquement ?

C'est un oubli de ma part .. il faut juste supprimer la ligne suivante du code

MsgBox (wb2.Cells(6, "c"))

Bonjour,

Tu es au top

En fait ce n'est pas une demi-journée que je vais gagner, mais une journée car j'ai réussi à tout automatiser en rajoutant des données et des fonctions dans le classeur. Du coup, là où je mettais une journée pour mettre le classeur à jour, ça me prendra 5 minutes : le temps d'enregistrer les fichiers dans le dossier et d'appuyer sur MAJ

Encore mille mercis pour ton aide !!

Bonne journée,

Fabrice

Rechercher des sujets similaires à "copier informations differents dossiers ouvrir"