Choisir son dossier selon le mois
Bonjour,
J'ai cherché un peu partout et j'ai trouvé un code à mon problème sauf que j'ai une erreur sur celui-ci que je ne sais résoudre.
Je ne vois pas comment la modifier.
J'explique déjà ce que je souhaites :
J'ai un fichier excel ou je dois copier des onglets d'autres fichiers.
Ces fichiers seront dans des dossiers constituer par mois (ex: 01-janvier, 02-février, 03-mars, ect ...).
J'ai fait un code qui ouvre un InputBox, celui-ci je veux (c'est la que j'ai une erreur) que quand j'écris le mois (exemple "mars"), je veux qu'il ouvre le dossier "03-mars".
Après le code copie tous les onglets dont le nom comporte le mois "mars".
voici le code que j'ai :
Option Explicit
Public Chemin$
Option Compare Text
Sub Importer()
Dim i&, fin&, a&, rep$, wbks As Workbook, wbkc As Workbook, x$, ws As Worksheet
', Nomdossier As String
Chemin = ThisWorkbook.Path
Set wbkc = ThisWorkbook
rep = Application.InputBox("Quel mois Souhaitez vous Importer?" & vbCrLf & _
"Entrer le mois à Importer")
If rep = "Faux" Then Exit Sub
Application.ScreenUpdating = 0
Call Liste
fin = Sheets("Liste").Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To fin
If Not Sheets("Liste").Cells(i, 1) Like "*" & "Fichier" & "*" Then
x = Sheets("Liste").Cells(i, 1)
Set wbks = Workbooks.Open(Chemin & "\" & x)
'J AI UN MESSAGE D'ERREUR ICI CAR LE FICHIER EXCEL N'EST PAS DANS LE DOSSIER (MARS)
' JE NE VOIS PAS COMMENT DIRE QUE x est la recherche du fichier et x est également le dossier mars)
For Each ws In wbks.Worksheets
If ws.Name Like "*" & rep & "*" Then ws.Cells.Copy: GoTo 1
Next ws
1 wbkc.Activate
wbkc.Sheets.Add after:=Sheets(Sheets.Count): ActiveSheet.Name = Split(x, ".")(0) & " " & rep
ActiveSheet.Paste
Application.DisplayAlerts = 0
wbks.Close 0
Application.DisplayAlerts = 1
End If
Next i
Application.DisplayAlerts = 0
Sheets("Liste").Delete
Application.DisplayAlerts = 1
End Sub
Option Explicit
Option Compare Text
Sub Liste()
Dim Fso As Object
Dim MonRepertoire As String, f As Object, x As Integer
Dim f1 As Object, f2 As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
Sheets.Add after:=Sheets(Sheets.Count): ActiveSheet.Name = "Liste"
MonRepertoire = Chemin
x = 1
For Each f1 In Fso.GetFolder(MonRepertoire).SubFolders
Cells(x, 1).Value = f1.Name
x = x + 1
For Each f2 In f1.Files
Cells(x - 1, 2).Value = f2.Name
x = x + 1
Next f2
'x = x - 1
Next f1
End SubJe vous remercie par avance pour toute aide apportée ...
mimi
Bonjour
Il faudrait expliquer un peu mieux
mimi28 a écrit :Ces fichiers seront dans des dossiers constituer par mois (ex: 01-janvier, 02-février, 03-mars, ect ...).
Ce sont les noms des dossiers(répertoires) : Exact ?
mimi28 a écrit :je veux qu'il ouvre le dossier "03-mars".
Tu veux ouvrir le répertoire "03-mars" : Exact ?
mimi28 a écrit :Après le code copie tous les onglets dont le nom comporte le mois "mars".
Les onglets de quoi , tu n'as pas ouvert de fichier ?
Détailles l'arborescence afin de comprendre ce que tu cherches
Exemple
- Fichier avec macro
- Repertoire (01-Janvier)
fichier (......)
fichier ( .......)
etc.... - Répertoire (02-Février)
Fichier (......)
etc ....
etc ....
Bonjour Banzai,
merci de me répondre aussi rapidement.
Effectivement, je ne suis pas très douée dans les termes techniques (surtout vba).
Je te joins le fichier source dans l'onglet synthese j'ai mis l'arborescence des répertoires.
En fait, le but est de copier tous les onglets dans le fichier source. Mais chaque fichier à le même nom que son onglet.
Je te remercie d'avance
J'ai oublié le fichier
Bonjour
Que je comprenne un peu mieux, parce que j'ai du mal
Exemple:
Le mois tapé est "Mars"
Tu regardes dans tous les répertoires (sauf celui contenant le mot "fichier")
Tu ouvres dans ce répertoire le fichier "03-mars" et ...... après je ne sais pas
Pas évident tant que tu ne connais pas l'organisation et la structure des fichiers de comprendre
Détailles bien la succession des opérations faites lorsque l'on écrit un mois dans la boite de dialogue jusqu'à la fin de la macro
En fait, voila ce que fait la macro initial :
elle liste le répertoire où se trouve le fichier synthèse (macro lister)
ensuite, elle ouvre tous les fichiers excel dont le nom de l'onglet a été inscrit dans le Inputbox (message "mars")
après avoir trouver elle copie ces onglets dans le fichier synthèse.
Moi, je souhaites que la macro :
ouvre un message inputbox
que je sélectionne le mois du répertoire ou doit être effectuer la recherche des fichiers xls
et après que ces onglets soient recopier dans mon fichier de synthèse.
J'espère avoir pu être le plus explicite possible
merci encore
Bonjour
Désolé mais là tu me perds
mimi28 a écrit :ensuite, elle ouvre tous les fichiers excel dont le nom de l'onglet a été inscrit dans le Inputbox (message "mars")
Çà veut dire quoi ?
Elle ouvre tous les fichiers, regarde si le nom d'un onglet du fichier correspond au nom tapé dans l'inputbox, si oui elle copie cet onglet dans le fichier synthèse
Je suis désolé mais je ne pige pas
Tu connais à fond ton programme, mais moi j'en suis loin
mimi28 a écrit :ouvre un message inputbox
que je sélectionne le mois du répertoire ou doit être effectuer la recherche des fichiers xls
Cela je le comprends, tu veux regarder directement et seulement dans le répertoire (exemple "03-mars")
Mais une fois dans ce répertoire que fais tu ?
Ce que j'ai marqué (ouverture de tous les fichiers, vérification si un onglet s'appelle "03-mars", et si oui on copie cet onglet)
Et une fois la vérification de tous les fichiers de ce répertoire : fin de la macro
Encore désolée si me m'explique mal mais tu n'es pas loin.
Elle ouvre tous les fichiers, regarde si le nom d'un onglet du fichier correspond au nom tapé dans l'inputbox, si oui elle copie cet onglet dans le fichier synthèse
oui, la macro ouvre tous les fichiers dans le même chemin (avec ThisWorkbooks.path) et si elle trouve un onglet ayant le mot "mars", celui est copier dans le fichier de synthèse.
et la je le comprends, tu veux regarder directement et seulement dans le répertoire (exemple "03-mars")
oui c'est ca
Mais une fois dans ce répertoire que fais tu ?
Ce que j'ai marqué (ouverture de tous les fichiers, vérification si un onglet s'appelle "03-mars", et si oui on copie cet onglet)
Et une fois la vérification de tous les fichiers de ce répertoire : fin de la macro
Oui, ouvrir les fichiers excel du repertoire "03-mars" et rechercher et copier tous les onglets ayant "mars" dans son nom d'onglet.
et fin de macro
Bonjour
Normalement il manque le nom des nouvelles feuilles
A tester et à dire
Bonjour,
Désolé de ne répondre que maintenant mais je viens de tester ton fichier et rien ne se passe.
Et lorsque je copie le code sur mon fichier il bug.
J'ai fais le pas à pas et en fait, il ouvre le fichier mais ne le copie pas l'onglet dans le fichier synthèse.
Merci déjà ta correction recherche déjà dans le bon dossier.
Bonjour
Il faut que tu transmettes un fichier pour savoir la structure et surtout le nom des feuilles
C'est bon, j'ai un peu modifier la fin de ton code et maintenant ca fonctionne.
voici le code qui fonctionne :
Option Explicit
Option Compare Text
Sub ImporterOnglet()
Dim Fichier As String, Chemin As String, Rep As String
Dim LeMois As Byte, I As Integer
Dim Ws As Worksheet, WsActif As Worksheet
Dim wbks As Workbook, wbkc As Workbook
Set WsActif = ActiveSheet
Application.DisplayAlerts = False
For I = Sheets.Count To 4 Step -1
Sheets(I).Delete
Next I
Application.DisplayAlerts = True
Rep = InputBox("Quel mois Souhaitez vous Importer?" & vbCrLf & _
"Entrer le mois à Importer")
If Rep = "" Then Exit Sub
' attention chaque nom de mois doit avoir 9 caractères
' 123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789
LeMois = InStr(1, "janvier fevrier mars avril mai juin juillet aout septembreoctobre novembre decembre ", Rep)
If LeMois = 0 Then
MsgBox "Nom du mois non conforme"
Exit Sub
End If
Application.ScreenUpdating = False
Chemin = ThisWorkbook.Path & "\" & Format(1 + ((LeMois - 1) \ 9), "00") & " - " & UCase(Rep) & "\"
Fichier = Dir(Chemin & "*.xls*") 'j'ai mis une étoile pour tout type de fichier xlsx,xlsm,xls
Do While Fichier <> "" ' Commence la boucle
With Workbooks.Open(Chemin & Fichier)
For Each Ws In Sheets
If Ws.Name Like "*" & Rep & "*" Then
Ws.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Application.DisplayAlerts = False 'rajout
Application.DisplayAlerts = True 'rajout
Exit For
End If
Next Ws
.Close
Application.ScreenUpdating = True 'rajout
End With
Fichier = Dir
Loop
'WsActif.select => j'ai retiré j'avais un message d'erreur
End SubEncore merci pour ton aide Banzai