J'ai un Dossier nommé "EXERCICES" avec un Sous-dossier nommé "2010".
Dans ce dernier; des Dossiers pour chaque mois de l'année.
Mes Classeurs dans ces mois portant comme nom la date numérique de leur création,
il ne peut donc y avoir de doublons.
A ce jour, je me farci le Chemin complet , alors que je pense qu'il est possible de fouiller
dans "EXERCICES" avec seulement le nom du Classeur (Ex. 40383,7215856482),
puis l'ouvrir, imprimer sa Feuil1 et le fermer.
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Bonjour YANN-56,
Voici un essai :
Il faut adapter le chemin du dossier "EXERCICES" ainsi que le nom du classeur.
VB:
Public Sub Test()
Dim pathDossier As String, nomClasseur As String, pathClasseur As String
Dim classeur As Workbook
pathDossier = "E:\XLS"
nomClasseur = "Classeur2.xlsx"
'chercher le fichier dans le dossier et ses sous-dossiers
pathClasseur = FindFile(pathDossier, nomClasseur)
'si on a pas trouvé le fichier, quitter la macro
If pathClasseur = "" Then Exit Sub
'ouvrir le classeur en lecture seulle
Set classeur = Application.Workbooks.Open(pathClasseur, , True)
'immprimer sa feuille 1
classeur.Sheets(1).PrintOut
'fermer le classeur
classeur.Close False
End Sub
Private Function FindFile(pathDossier As String, nomFichier As String) As String
Dim myFso As Object, dossier As Object, ssDossier As Object, fichier As Object, pathFichier As String
'créer un "FileSystemObject"
Set myFso = CreateObject("Scripting.FileSystemObject")
'récupérer le dossier passé en paramètre
Set dossier = myFso.GetFolder(pathDossier)
'boucler sur chaque fichier du dossier
For Each fichier In dossier.Files
'si le fichier correspond à celui cherché, renvoyer le path du fichier et quitter la fonction
If fichier.Name = nomFichier Then FindFile = fichier.Path: Exit Function
Next fichier
'boucler sur chaque sous-dossier du dossier
For Each ssDossier In dossier.SubFolders
'rappeler la fonction sur le sous-dossier
pathFichier = FindFile(ssDossier.Path, nomFichier)
'si le fichié a été trouvé, renvoyer le path du fichier et quitter la fonction
If pathFichier <> "" Then FindFile = pathFichier: Exit Function
Next ssDossier
End Function
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Bonjour mromain,
J'avais déjà vu ta façon de le faire, lors de mes recherches sur XLD.
Bravo pour ta compétence, mais cherchant à simplifier ma macro,
cela ne correspond pas trop.
J'en déduis qu'il est préférable pour moi de rester avec un truc du genre:
Code:
Private Sub CommandButton1_Click()
Dim CLASSEUR_SOURCE As Workbook
Set CLASSEUR_SOURCE = Workbooks.Open("X:\.....\....\....\EXERCICES\2010\NOVEMBRE\40383,7215856482")
CLASSEUR_SOURCE.Sheets("Feuil1").Activate
ActiveSheet.PrintOut
CLASSEUR_SOURCE.Saved = True: CLASSEUR_SOURCE.Close
End Sub
(Avec l'année et le mois en variables enregistrées par ailleurs)
Pourtant je pense qu'avec une recherche dans les Subfolders de "EXERCICES",
cela doit être possible! Il va falloir que je retrouve ce que j'ai oublié.
En tous les cas, Merci beaucoup pour ton aide dont je garde bon enseignement.
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Bonsoir Pierrot,
Les mois sont effectivement en majuscules, et sans accents, bien que je heurte toujours avec le mois de "FEVRIER", alors que le mois d'"AOUT" passe dans tous les cas.
(A noter que les mois sont dressés dans une ListView, et "FEVRIER" est correctement écrit...???)
Avec:
Code:
For i = 1 To 12
.ListItems.Add , , UCase(Replace(Replace(MonthName(i), "û", "U"), "é", "E"))
Next i
Pour ce qui est de ma question initiale:
Si tu n'as pas compris mon besoin, ce n'est que je me suis mal exprimé.
Je cherchais seulement à demander à Bill de me trouver le Classeur " 40383,7215856482"
dans le dossier "EXERCICES" sans me préoccuper de lui préciser le nom des Sous-dossiers,
et de m'imprimer sa Feuil1.
Merci à toi Pierrot d'avoir pris la peine de me répondre.
Je suis en train de regarder du coté de FSO, mais je ne suis pas doué de ce coté!!!
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Bonjour Yann,
si cela peut te faire avancer, pour rechercher un fichier dans les sous dossiers :
Code:
Option Explicit
Sub test()
Dim Fso As Object, fs As FileSearch
Set Fso = CreateObject("Scripting.FileSystemObject")
Set fs = Application.FileSearch
With fs
.NewSearch
.SearchSubFolders = True
.LookIn = "C:\EXERCICES"
.Filename = "40383,7215856482.xls"
If .Execute > 0 Then
MsgBox .FoundFiles(.FoundFiles.Count)
End If
End With
End Sub
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Salut Yann
Bonjour le fil
Bonjour le Forum
pour ce qui est de ton problème de date au format majuscule
il est vrai que lorsque l'on formate une date en Mois , Majuscule il y a un accent sur Août et Février , Décembre , il serait peut être préférable de remplir ta listView en y mettant le bon format
via une boucle
For M= 1 to 12
Me.ListView1.ListItems.Add , , Ucase(Format(DateSerial(Year(Date),M,1),"MMMM"))
Next M
ou en formatant tes mois lors du remplissage
de plus UCase (MonthName (i)) donne le format qui correspond , pourquoi supprimer les accents ??? arff ou alors je n'ai rien compris lol
ARFFFFFF je viens de Comprendre '%%%%%£££ enregistrement etc etc Lol excuses
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Bonjour Pierrot, chTi60, et à ceux qui passeront par ici,
Pierrot:
J'ai cru entrevoir que "Application.FileSearch" n'est plus utilisable avec 2007
(Sauf adaptation)... Si l'utilisateur l'installe, nous allons être mal barrés... Non?... Je me trompe?
Si oui; je vais certainement adapter ton code à ce que je recherche.
Voici vers où je m'orientais:
Code:
Sub CHEMIN(SourceFolderName As String, IncludeSubfolders As Boolean)
Dim FSO
Dim SourceFolder
Dim SubFolder
Dim FileItem
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.GetFolder(SourceFolderName)
For Each FileItem In SourceFolder.Files
With UserForm1.ListView1
.ListItems.Add , , FileItem.Name
.ListItems(.ListItems.Count).ListSubItems.Add , , FileItem.Path
End With
Next FileItem
If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
CHEMIN SubFolder.Path, True
Next SubFolder
End If
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
End Sub
Ce n'est qu'un test en cours.
Maintenant je vais devoir ne prendre en note que le Classeur recherché,
l'ouvrir, sélectionner la Feuil1 et l'imprimer.
Qu'en penses-tu?
chTi60:
Tu n'as pas à t'excuser; d'autant que ta remarque concernant mon caprice
relatif aux mois en Majuscules et sans accent est pertinente.
Il y a seulement que j'ai pris comme habitude de mettre en majuscules
tous mes fichiers, ainsi que ce qui est de mon cru dans une procédure VBA.
Cela m'aide bien souvent à m'y retrouver. (Sauf que dans mon application actuelle, j'ai des mystères)
Merci à vous, c'est sympa d'avoir pris la peine de regarder et me répondre. Je continue à peaufiner.
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Pierrot,
Il est vraiment très agréable de rencontrer des personnes comme toi ici.
Tu ajoutes la gentillesse à ta compétence. Et c'est vraiment réconfortant.
Je connais ce lien de MichelXLD, qui est comme d'hab. au top du top.
Mais je ne veux pas prendre le risque que ce qui est fait pour 2007
ne fonctionne plus pour 2003.... Je tenterai plus tard!
(Deux appli différentes seraient moins faciles à gérer)
mais je vois que tu en as tiré profit, oui il me semble que c'est une bonne direction, à confirmer pour la suite...
Je vais donc y travailler, et sauf échec, j'en joindrai le résultat ici.
Au cas où cela puisse servir à quelqu'un.... Hum! J'ai de quoi m'occuper cet après-midi.
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Bonjour à tous,
si ça peut aider, une idée pour une recherche dans les sous-dossiers sans Filesearch qui devrait fonctionner pour toutes les versions, mais je pense que la version de MichelXLD doit fonctionner sur 2003 aussi même si je n'ai pas testé
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1
Bonjour Yann, le fil
pas trop compris pourquoi tu lances directement la procédure lors de l'initialisation... cela provoque une erreur lorsque tu cherches à masquer / ré afficher l'usf alors que celui ci n'est pas complètement initialisé... enfin c'est l'analyse que je peux en faire...
Il me semble que la ligne de code ci-dessous serait mieux à sa place dans l'événement activate de l'usf, lors de l'exécution de cet événement l'usf serait alors affiché et ta procédure pourrait se dérouler entièrement....
A voir si j'ai bien compris....
Code:
Private Sub UserForm_Activate()
CHEMIN ThisWorkbook.Path & "\EXERCICES\", True
End Sub
Je te laisse tester, voir si cela répond à ton attente avec le code positionné ainsi...