Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

agrégation de documents par macro

C@thy

XLDnaute Barbatruc
Bonjour le forum,

j'ai essayé de faire une recherche dans ce forum avec vba et agrégation, mais je dois mal poser la question.

Voilà :
je reçois (enfin pas moi, mon utilisateur) par mail des documents word.
Chaque jour il me faut agréger tous les documents en un seul avec un index biensûr... (chaque document a un thème).

C'est possible ça???

question organisation : est-ce qu'on peut repérer dans un répertoire tous les documents qui ont la même date et les agréger en un seul?
Sinon, je demanderai à l'utilisateur de lancer la macro d'agrégation tous les jours puis d'archiver.

Donc j'envisage une boucle sur tous les doc du répertoire, qui copie les fichiers .doc dans un doc de synthèse les uns à la suite des autres en fonction de la date.
Le 1er paragraphe devra être mis en titre1 pour créer l'index (ou sommaire) aïe je sens que ça se complique, car j'imagine qu'il y aura d'autres titre1 dans le doc.

question subsidiaire : est-ce qu'on peut faire ça sous Acrobat??? (agréger les doc. dans un pdf? mais là, je dois compliquer la chose... je ne sais même pas si il y a un VBA sous Acrobat, donc disons que c'est plus simple sous Word).

Edit :
Selection.WholeStory
Selection.Copy
Documents("Synthese.doc").Activate
Selection.EndKey Unit:=wdStory
'je les colle à la fin du doc
Selection.PasteAndFormat (wdPasteDefault)

Si vous pouvez éclairer ma lanterne, cela ferait avancer le schmilblick.

Un grand merci à vous.

Bises et bon ouik

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

Bonjour les p'tits loups.

J’ai travaillé hier toute la journée sur mon sujet (brûlant, au demeurant), mais je me suis heurtée à de nombreuses difficultés.

Jean-Noël, j’ai trouvé super ton idée de rechercher le répertoire par sélection dans la liste, et hop, adoptée !!!
Par contre, j’ai eu un petit souci :
L’agrégation d’un même répertoire se fait plusieus fois dans la journée. Et lorsque je relance la macro, je me trouve dans le répertoire choisi précédemment, et là, je dois remonter d’un niveau et choisir mon répertoire (lundi par exemple) sinon ma sélection est vide. Pour l’utilisateur ce n’est pas évident à comprendre qu’il faut remonter d’un niveau.
Mon principe est le suivant : j’ai la macro sous le répertoire prompteur. Dans ce même répertoire j’ai, outre la macro, 52 (ou 53) sous-répertoires, un par semaine, et dans chacun j’ai 5 sous-répertoire du lundi au vendredi, s’il n’y a pas de jours fériés
Alors, est-ce qu’il est possible, par défaut, de proposer comme départ de l’arborescence le répertoire dans lequel se situe la macro ?
C’est ma première question.

Ensuite, mon problème pricipal vient du fait que je peux avoir plusieurs news sur le même sujet dans le répertoire.
Je balaie mo répertoire jour (par exemple lundi) je prends tous les fichiers, je les copie dans mon document de synthèse (celui qui contient la macro).
Mais si j’ai plusieurs fois le même thème (par exemple Culture) je copie le même titre plusieurs fois.

Quelle serait la solution ? :
- tout copier et à la fin supprimer les titres en double ou triple voire plus, ou bien
- sélectionner le titre de la news, le rechercher dans le doc de synthèse, et s’il existe, le copier sous ce titre, en tenant compte si possible de la chronologie (par heure décroissante, le + récent en 1er ?

Aië aïe caramba ça se corse mon truc…

Ensuite, une fois que j’ai tout copié, je crée mon sommaire. (j'ai fait la macro)
Je remplace les styles sous thème et Thématique par Titre1 et Titre2, c’est plus facile pour créer mon sommaire car j’ai remarqué que lorsqu’on refait le sommaire il ne conserve pas les anciens paramètres (sous thème en niveau1 et Thématique en 2).
Puis je mets tout en haut (avant le sommaire) la date, l’heure et semaine du … au … comme dans les modèles d’agrégation qu’on m’a donnés.

Dîtes-moi si ce qu’il faut faire est compliqué (pour moi cela semble insurmontable…)
J’ai avancé sur la création du sommaire, ça semble coller. Roger2327 et Pierre-Jean m’ont fourni la macro pour calculer la semaine, c’est assez GEANT.

Je joins le tout.

Merci pour votre participation, si vous pouvez m’aider à avancer un peu plus, car là je suis bloquée.

Merci de me dire aussi si je me fourvoie complètement et si les solutions que j’imagine sont farfelues. Au pire, j’imagine de leur donner un document avec plusieurs fois le même titre (ex. Culture), mais ça, je sais qu’il vont pas aimer, c’est pour notre nouveau ministre, et il vaut mieux qu’il reçoive du travail propre, jusque là fait entièrement à la main.

Voilà, j’ai été super longue, j’espère que vous avez compris mon souci et que vous pourrez m’apporter un début de solution.

Bisous

C@thy
 

Pièces jointes

  • news2.zip
    234.3 KB · Affichages: 91
  • news2.zip
    234.3 KB · Affichages: 88
  • news2.zip
    234.3 KB · Affichages: 92
Dernière édition:

James007

XLDnaute Barbatruc
Re : agrégation de documents par macro

Bonjour Cathy

Je n'ai pas encore regardé ton code ... mais pour ta première question, tu devrais pouvoir utiliser :
Code:
Application.FileDialog("tontype").[B]InitialFileName[/B]

A tester ...

A +
 

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

Hello James,

je savais que ma 1ère question avait une solution simple.

Heu... je vais te paraître complètement ignare, c'est quoi mon type???

Sinon, mon type c'est les beaux espions avec un double zéro (personnellement, mon préféré : Pierce Brosnan).

Merci à toi pour ta réponse si rapide.

Bises

C@thy
 

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

oups! autant pour moi, le type c'est msoFileDialogFolderPicker bien sûr!!!

(jre préférais l'autre... lol!)

voici mon code (fourni par JPN je précise) :
Sub AcquisitionDossier()
Dim fd As FileDialog, vrtSelectedItem As Variant
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
If .Show = -1 Then
Chemin = .SelectedItems(1)
End If
End With
Set fd = Nothing
End Sub

par contre Set fd = Application.FileDialog(msoFileDialogFolderPicker).InitialFileName
ne fonctionne pas!
C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

With fd
.InitialFileName = ThisDocument.Path
If .Show = -1 Then
Chemin = .SelectedItems(1)
End If
End With
Set fd = Nothing
End Sub
me ramène 1 niveau trop haut...
mais on n'est pas loin...

euh...je n'ai pas bien compris l'histoire du .Show = -1 ni du .SelectedItems(1)

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

OUPS!!!

Autant pour moi,
With fd
.InitialFileName = ThisDocument.Path & "\"

ce qui serait génial c'est qu'une fois que le gus a sélectionné le sous-répertoire (lundi) je récupère dans une variable le nom du répertoire au-dessus, càd le n° de semaine.

Je sais que c'est possible, ça, doit y avoir une histoire de .. (point point)

Biz

C@thy
 
Dernière édition:

James007

XLDnaute Barbatruc
Re : agrégation de documents par macro

Re,

Désolé ... j'aurais dû être plus explicite ...

Mais, au demeurant, cela m'a tout de même permis d'entrevoir, ne serait-ce que l'espace de quelques secondes ... que j'aurais éventuellement pu être ...
tontype ...

Plus sérieusement, je vais regarder comment faire la récupération du répertoire du dessus ...

A +
 

James007

XLDnaute Barbatruc
Re : agrégation de documents par macro

Re,

Je viens de trouver cette fonction qui a l'air plus souple ...
malheureusement, je ne peux pas la tester sur l'ordinateur que j'utilise en ce moment ...
Code:
Function GetFolderName(Optional OpenAt As String) As String
    Dim lCount As Long

    GetFolderName = vbNullString
     
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = OpenAt
        .Show
        For lCount = 1 To .SelectedItems.Count
            GetFolderName = .SelectedItems(lCount)
        Next lCount
    End With
End Function

A +
 

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

Thank you, James

je veins de tester ton code, il ne donne pas le répertoire au-dessus too bad!!! il fait la même chose que celui de Jean-Noël.

Chemin = ThisDocument.Path & ".." me rajoute 2 point à la suite du nom de répertoire...

en tout cas merci

Biz
 

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

je viens de faire une recheche dans le forum excel, pas trouvé le répertoire au-dessus, pourtant je suis sûre qu'il y a ..

vais poser la question sur le forum Excel et je vous tiens au courant

C@thy
 

JNP

XLDnaute Barbatruc
Re : agrégation de documents par macro

Re ,
Désolé, pas trop le temps ces jours-ci, mais
Code:
Dim Tableau() As String, Chemin As String, I As Integer
Tableau = Split(ThisDocument.Path, "\")
For I = UBound(Tableau) - 1 To 0 Step -1
Chemin = Tableau(I) & "\" & Chemin
Next I
MsgBox Chemin
devrait le faire ...
A +
 

Zon

XLDnaute Impliqué
Re : agrégation de documents par macro

Salut,

une autre façon d'avoir le repertoire du dessus avec ou sans slash à la fin


Code:
Function Reparent$(ByVal Ch$, Optional Slash As Boolean = True)
 Dim Temp
  Temp = Split(Ch, "\")
  Reparent = IIf(Slash, Left(Ch, Len(Ch) - Len(Temp(UBound(Temp)))), _
                  Left(Ch, Len(Ch) - Len(Temp(UBound(Temp))) - 1))
End Function

reparent(thisdocument.path) 'si tu veux le flash à la fin
reparent(thisdocument.path,false) 'si tu ne veux pas le flash à la fin



Le test .show=-1 permet de savoir que l'utlisateur a sélectionné un dossier.

A+++


Ps Cathy j'ai pas tout compris mais j'avais vu PJ sous Outllok VBA tu as laissé tomber ?
 

C@thy

XLDnaute Barbatruc
Re : agrégation de documents par macro

Coucou Zon,
je te remercie pour ta participation à la résolution de mon problème.

C'est génial, j'ai plein de solutions pour le prix d'une
et je pense que toutes me seront utiles, selon le cas.
En effet, j'ai parfois besoin de connaître le chemin complet du répertoire au-dessus, et parfois juste son nom (pour récupérer le n° de la semaine).

Biz

C@thy
 

tototiti2008

XLDnaute Barbatruc
Re : agrégation de documents par macro

Bonjour à tous,

Juste pour proposer une autre approche

Code:
Function Rereparent(ByVal Ch) As String
Dim fs
    Set fs = CreateObject("Scripting.FileSystemObject")
    Rereparent = fs.getfolder(Ch & "/..").Path
    Set fs = Nothing
End Function

Edit : trop fort, j'ai confondu "/" et "\" et ça marche quand même...
donc je conseillerais plutôt

Code:
Rereparent = fs.getfolder(Ch & "\..").Path
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…