Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1

YANN-56

XLDnaute Barbatruc
Bonjour à ceux qui passeront par ici,

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.

N'est-il pas? :confused:

Si oui, merci de m'aider, je n'y parviens pas.

Yann
 

mromain

XLDnaute Barbatruc
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
a+
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
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.

Amicalement.

Yann
 

Pierrot93

XLDnaute Barbatruc
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1

Bonjour Yann, Romain

peut être comme cei, mais pas sûr d'avoir bien compris ton besoin..
Code:
Dim fichier As String
fichier = "C:\MesDocs\EXERCICES" & Format(CDate("40383,7215856482"), "yyyy""\""MMMM") & "\40383,7215856482.xls"

bonne soirée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1

Re,

si le nom du mois est en majuscule :
Code:
Dim fichier As String
fichier = "C:\MesDocs\EXERCICES" & UCase(Format(CDate("40383,7215856482"), "yyyy""\""mmmm")) & "\40383,7215856482.xls"
 

YANN-56

XLDnaute Barbatruc
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é!!!

Au plaisir de te lire.

Amicalement

Yann
 

Pierrot93

XLDnaute Barbatruc
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

bonne journée
@+
 

ChTi160

XLDnaute Barbatruc
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

Bonne Journée
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
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.

Amicalement

Yann
 

Pierrot93

XLDnaute Barbatruc
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1

Re, bonjour Jean-Marie

oui l'objet "FileSearch" n'est plus utilisé dans 2007, regarde le lien ci-dessous de MichelXLD:), une macro complémentaire à installer, perso pas testé, pas 2007... mais l'on peut lui faire confiance à Michel.
https://www.excel-downloads.com/threads/classefilesearch-pour-excel2007.77650/

A noter, dans le code que je t'ai donné précédemment, la ligne ci-dessous et la déclaration "FSO" ne sont pas utilisées..
Code:
Set FSO = CreateObject("Scripting.FileSystemObject")

mais je vois que tu en as tiré profit, oui il me semble que c'est une bonne direction, à confirmer pour la suite...

bon après midi
@+
 

YANN-56

XLDnaute Barbatruc
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.

Merci sincère encore pour ton aide. :)

Amicalement

Yann
 

YANN-56

XLDnaute Barbatruc
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1

Bonjour tototiti,

Je ne sais pas si je dois te dire Merci!!!
Car par ta faute, j'ai la tête comme un manège de fête foraine!!! :eek:

J'ai copié et adapté ton exemple mis sur le Fil dont tu fais référence.
et c'est aussi particulièrement efficace!

J'en suis toujours à décortiquer et simplifier mon code précédent.
Je vais tenter d'aller jusqu'à l'édition du Classeur recherché.

Je nage dans le bonheur avec toutes ces aides..... Mais je suis en nage!

Promis je vais tout essayer et joindre mon résultat.

Merci à toi, et à plus tard, si tu repasses par ici.

Amicalement

Yann
 

YANN-56

XLDnaute Barbatruc
Re : Rechercher un Classeur dans un Répertoire, et imprimer sa Feuille1

Bonsoir à tous,

Voici mon dernier jet, avec le dossier de données nécessaire pour le test.

Le "CHEMIN" dans l'initialise, je ne pige pas trop pourquoi.
Il provoque immédiatement la recherche; c'est bien, mais j'aimerais le fiche ailleurs!

Ici, j'utilise artificiellement la Caption du Label1.*

En réalité, je cherche à ce que le choix du Classeur à imprimé soit issu d'un
double click avec (Me.ListView1.SelectedItem.Text) de la ListView. *

Grace à vous, j'ai bien avancé en réussissant à passer outre l'écriture des Sous-dossiers.
C'est super, et bien utile dans mon cas.

A noter que le remplissage de la liste n'est ici qu'accessoire,
puisque dans l'appli il est fait bien avant.

En fait; c'est ce "CHEMIN ThisWorkbook.Path & "\EXERCICES\", True"
que je n'arrive toujours pas à déplacer.


Merci pour votre patience.
(Sous réserve d'en avoir trop abusé et récolté le silence)

Amicalement à vous.

Yann

Désolé! Ma base de données est trop lourde, je suis obligé de la mettre ici:
Cijoint.fr - Service gratuit de dépôt de fichiers

Le classeur:
 

Pièces jointes

  • RECH_IMPRIM.xls
    44.5 KB · Affichages: 66
Dernière édition:

Pierrot93

XLDnaute Barbatruc
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...

bonne journée
@+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 898
Membres
101 834
dernier inscrit
Jeremy06510