Récupérer le contenu d'un pied de page de document et le placer dans une cellule

fb62840

XLDnaute Impliqué
Bonjour à toutes et tous,

Voici en pièce-jointe un fichier qui examine une arborescence et créée la liste des fichiers dans les dossiers et groupe les différents niveau d'arborescence (je n'en suis pas l'auteur mais je n'ai malheureusement pas retrouvé la source que j'aurais cité dans le cas contraire).

Est-il possilbe de placer dans la cellule de la colonne D le contenu du pied de page des fichiers présents dans chaque dossiers ?

Les dossiers peuvent contenir ce type de document :
Fichiers Word
Fichiers Excel
Fichiers Html
Fichiers PDF

Votre aide sera vraiment la bienvenue.

Merci
 

Pièces jointes

  • Lister fichiers arborescence.zip
    27 KB · Affichages: 64

tototiti2008

XLDnaute Barbatruc
Re : Récupérer le contenu d'un pied de page de document et le placer dans une cellule

Bonjour fb62840,

Je n'ai pas pu ouvrir ton fichier, mais déjà sur le principe, il y a des choses que je ne comprends pas
Pour les fichiers Word, il peut y avoir plusieurs pieds de page différents (sections)
Pour les fichiers Excel, Il peut y avoir une mise en page par feuille, donc autant de pied de page
Je ne crois pas que les fichiers Html aient des pieds de page
Pour PDF je ne sais pas trop

Peux-tu préciser ta question ?
 

fb62840

XLDnaute Impliqué
Re : Récupérer le contenu d'un pied de page de document et le placer dans une cellule

Bonjour,

L'objectif est de vérifier si le pied de page contient bien le chemin d'accès complet au fichier (emplacement et nom de fichier + extension).

Si un document word contient plusieurs sections serait-il alors possible de placer le contenu de la section 1 dans la case D2, le contenu des autres sections s'ajoutant alors en D3, D4... autant que de sections ?

Effectivement les pieds de pages d'un classeur excel peuvent être nombreux. Est-il alors possilbe de place en D2, le contenu du pied de page & le nom de la feuille du pied de page considéré, idem en D3 pour une feuille différente... D3, D4 autant que de feuilles différentes dans le classeur.

Pour le HTML il me semble que le code peut faire apparaître un Footer, serait-il alors possible de placer le contenu de celui-ci en D2 (seulement le texte, les autres éléments comme les images par exemple ne seraient pas nécessaires)

Oups, j'ai oublié les fichiers PPT, pour lesquels il me faudrait aussi pouvoir récupérer le pied de page.


Voici les codes :

Code:
Dim F, fs, s, f1, f2, fc

Sub BtnListerFichiers_Click()

    'Déclaration des variables
            'Declare a variable as a FileDialog object.
                Dim ApplSelectionDossier As FileDialog
                       
            'Create a FileDialog object as a File Picker dialog box.
                'Set fd = Application.FileDialog(msoFileDialogFilePicker)
                Set ApplSelectionDossier = Application.FileDialog(msoFileDialogFolderPicker)
                
                
            'créé un objet de système de fichier (je sais pas trop quoi ...)
                Set fs = CreateObject("Scripting.FileSystemObject")
            
            
            'Declare a variable to contain the path of each selected item. Even though the path is aString,
            'the variable must be a Variant because For Each...Next routines only work with Variants and Objects.
                Dim ListeItemChoisis As Variant
        
        
        
    'nettoie le classeur
        NettoyerLaFeuille (4)

    'Use a With...End With block to reference the FileDialog object.
        With ApplSelectionDossier
                
            .Title = "Sélectionnez un dossier"
                
            'vue de départ
                '
    
            'l'utilisateur a cliqué sur le bouton OK de la boite de dialogue
            If .Show = -1 Then
            
                Range("Nom").Offset(-1, 0) = "Liste fichiers présents dans le dossier :" & Chr(10) & .SelectedItems(1)
            
                Range("Nom").Offset(1, 0).Activate
                
                'pour chaque dossier choisi, ici un seul mais plus _
                    instruction plus facile à utiliser
                For Each f2 In .SelectedItems
                   
                   Call EcritureDonnées(fs.GetFolder(f2), 1)
                    
                Next
                    
                    
            'The user pressed Cancel.
            Else
            
            End If
            
    End With
    
    ActiveSheet.Outline.ShowLevels RowLevels:=1
    Range("Nom").Offset(1, 0).Activate

    'Set the object variable to Nothing.
    Set fd = Nothing

End Sub


Sub NettoyerLaFeuille(ByVal LigneDeDépart As Integer)

    Rows(LigneDeDépart).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Delete
        Selection.ClearOutline
        Range("Nom").Offset(-1, 0) = "Liste fichiers présents dans le dossier :"
    

End Sub

Sub EcritureDonnées(ByVal F As Variant, ByRef niveau As Integer)
    
    Dim DossierEnfantPrésent, FichiersPrésent As Boolean

        
            PremièreLigne = ActiveCell.Row
            
            'on récupère les dossiers enfants
                Set fc = F.SubFolders
                DossierEnfantPrésent = False
                For Each f1 In fc
                    
                    ActiveCell = f1.Name
                On Error GoTo SuiteBoucle1
                    ActiveCell.Offset(0, 1) = f1.Type
                    ActiveCell.Offset(0, 2) = f1.Size / 1024 'taille en Ko
                        If ActiveCell.Offset(0, 2) > 1000 Then ActiveCell.Offset(0, 2).NumberFormat = "0.00,"" Mo"""
                        If ActiveCell.Offset(0, 2) > 1000000 Then ActiveCell.Offset(0, 2).NumberFormat = "0.00,,"" Go"""
SuiteBoucle1:
                    ActiveCell.Offset(1, 0).Activate
                    
                    DossierEnfantPrésent = True
                    Call EcritureDonnées(fs.GetFolder(f1), niveau + 1)
                Next
                
            'on récupère ensuite les fichiers
                
                Set fc = F.Files
                FichiersPrésent = False
                
                For Each f1 In fc
                
                   If FunctionNePasPrendreEnCompte(f1.Type) = True Then
                    
                     
                    Else
                        ActiveCell = f1.Name
                    On Error GoTo SuiteBoucle2
                        ActiveCell.Offset(0, 1) = f1.Type
                        ActiveCell.Offset(0, 2) = f1.Size / 1024 'taille en Ko
                            If ActiveCell.Offset(0, 2) > 1000 Then ActiveCell.Offset(0, 2).NumberFormat = "0.00,"" Mo"""
                            If ActiveCell.Offset(0, 2) > 1000000 Then ActiveCell.Offset(0, 2).NumberFormat = "0.00,,"" Go"""
SuiteBoucle2:
                        ActiveCell.Offset(1, 0).Activate
                        FichiersPrésent = True
                                
                    End If
                Next
                
            'on groupe les lignes selon les cas
                
                If niveau <> 1 Then
                    If DossierEnfantPrésent = True And FichiersPrésent = True Then _
                            Range(Rows(PremièreLigne), Rows(ActiveCell.Row - 1)).Group
                    
                    If DossierEnfantPrésent = True And FichiersPrésent = False Then _
                            Range(Rows(PremièreLigne), Rows(ActiveCell.Row - 1)).Group
                    
                    If DossierEnfantPrésent = False And FichiersPrésent = True Then _
                            Range(Rows(PremièreLigne), Rows(ActiveCell.Row - 1)).Group
                    
                    'If DossierEnfantPrésent = False And FichiersPrésent = False Then _
                            Range(Rows(PremièreLigne), Rows(ActiveCell.Row - 1)).Group
                    
               End If
            
            'mise en forme des cellules
                Columns("A:D").EntireColumn.AutoFit
                        

End Sub

Merci pour votre aide.
 

fb62840

XLDnaute Impliqué
Re : Récupérer le contenu d'un pied de page de document et le placer dans une cellule

Bonjour à toutes et à tous,

J'ai trouvé sur ExcelDownload un code qui permettait de récupérer l'entête d'un document word.

J'ai modifié le code pour récupérer le pied de page d'un document word spécifié dans le code qui s'inscit dans la cellule A1.

voici le code :
Code:
Private Sub AfficherPieddePage()

      Chemin = ThisWorkbook.Path
      fichier = "Doc1.doc"
      Set wd = CreateObject("Word.application")
      wd.Visible = False
      Set Mondoc = wd.Documents.Open(Chemin & "\" & fichier)
      Range("A1").Value = Left(Mondoc.Sections(1).Footers(1), Len(Mondoc.Sections(1).Footers(1)) - 1)
      Mondoc.Close False
      wd.Quit
      Set wd = Nothing
End Sub

J'aimerais modifier cette macro pour obtenir le résultat suivant :
Dans la colonne A jai des noms de fichiers avec leurs extensions (.doc, .xls, .ppt, .pdf etc.) qui sont les chemins d'accès complet au fichier.

J'aimerais placer pour chaque cellule contenue dans chaque ligne de la colonne A le contenu du pied de page du document dans la colonne F si dans la cellule de la ligne x de la colonne A le document est un fichier word.
Si c'était également possible avec si le document est un fichier xls, ou ppt... cela serait parfait.

Merci pour votre aide.
 

Discussions similaires

Réponses
26
Affichages
497

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 016
dernier inscrit
Mokson