Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/05/2007, 17h31   #1
Membre du Club
 
Inscription : mars 2005
Messages : 199
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 199
Points : 56
Points : 56
Par défaut publipostage et sauvegarde

bonjour,

je souhaite faire une fusion de données à partir d'excel dans word, ça c'est bon, il n'y a pas de problèmes.

Mon problèmes :
J'ai donc mon document avec plus ou moins d'enregistrements et je veux enregistrer sur mon disque dur chaque enregistrement automatiquement.
le nom des documents word devant être un des champs du publipostage.

Es ce possible ?

Merci à tous
louroulou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2007, 14h06   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Chaque "enregistrement" créé dans un document résultant d'une fusion (Lettres Types) est séparé par un saut de section.
Tu peux donc sélectionner d'un saut de section au suivant, couper et coller dans une nouveau doc
Par contre, pour le nom du doc, comme tu es dans Excel, je commencerais par créer un tableau de ces noms car même s'ils sont dans le document, tu vas devoir les récupérer.
Tu peux aussi créer des balises dans le document principal Word de part et d'autre du <champ> contenant le nom du doc. Il te restera à retrouver ces balises pour récupérer le nom. Ces balises peuvent être masquées. Pour la recherche, tu mets "Afficher tout" et tu les masques pour l'impression.
Juste des idées mais quand ton choix sera fait, si tu as des pb, tu demandes
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2007, 17h31   #3
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 352
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 352
Points : 29 265
Points : 29 265
Je pense que c'est plus facile à faire avec Access, on peut faire la fusion document par document, ce qui permet de faire une sauvegarde.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2007, 18h09   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Hello Oli, tu me donnes une idée (tout le monde n'a pas Access)
Dans Word, il est possible de sélectionner la ligne du classeur Excel à fusionner. Il suffirait de lancer une fusion indépendante pour chaque ligne. Pour la récup du nom du document, en travaillant depuis Excel, ce n'est pas un pb.
Par contre, nul doute que c'est une solution de secours vu le temps que ça risque de prendre.
Juste une idée pour les ceusses qui n'ont pas la chance d'avoir Access
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2007, 21h57   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 352
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 352
Points : 29 265
Points : 29 265
On va faire le post à deux.

En access, tu peux lancer le publipostage pour chaque enregistrement avec un movenext.

Il doit être possible de faire la même chose en Excel.
Il suffit de récupérer la valeur d'une des cellules pour le nom et par exemple la date du jour en calendrier julien.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2007, 00h36   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je viens d'installer Access et je viens de lire ton message (11h30 ~)
Comme notre ami louroulou a posé sa question sur Word, je réponds pour Word plutôt que pour Excel (version déjà faite mais différemment)
De toutes façons, pour Excel, c'est pareil, mais à l'envers.
Au passage, pour tester à l'arrache, j'efface le répertoire s'il existe avant de le créer le nouveau. Il faudrait modifier ces quelques lignes '*******

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Sub FusionExcelWord()
Dim Wd1     'As Document
Dim xlApp   'as Excel.Application
Dim CL1     'as workbook
Dim FL1     'as worksheet
Dim TabNom(), DerLig As Long, NoLig, Rep
    Set Wd1 = ActiveDocument
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = False
 
    'Création du tableau des noms des fichiers à créer
    Set CL1 = xlApp.Workbooks.Open("D:\xls\Liste pour fusion.xls")
    Set FL1 = CL1.Worksheets("feuil1") '< la feuille
    FL1.Activate
    DerLig = FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row
    ReDim TabNom(DerLig)
    For NoLig = 1 To DerLig - 1
        TabNom(NoLig) = FL1.Cells(NoLig + 1, 1).Value
    Next
 
    CL1.Close False
    xlApp.Quit
    Set CL1 = Nothing
    Set xlApp = Nothing
    DoEvents
 
    'FACULTATIF : Créer la liaison entre le doc Word et le fichier Excel
    'Inutile si la liaison existe déjà entre les deux fichiers
    'Wd1.MailMerge.MainDocumentType = wdFormLetters
    'Wd1.MailMerge.OpenDataSource Name:= _
        '"D:\xls\Liste pour fusion.xls", ConfirmConversions:=False, LinkToSource:=True, Format:=wdOpenFormatAuto, Connection:= _
        '"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=D:\xls\Liste pour fusion.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Typ", _
        'SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
        'wdMergeSubTypeAccess
 
'************** à modifier ***************
    Rep = "D:\Doc\LettresTypes\"    'Création d'un nouveau répertoire
    on error  resume next
    MkDir Rep   'création du répertoire 'erreur s'il existe déjà
    on error goto 0
'*************************************    
   Application.ScreenUpdating = False
   'Fusion
    For NoLig = 1 To DerLig - 1
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = NoLig
                .LastRecord = NoLig
            End With
            .Execute
        End With
 
        'Enregistrement du fichier créé
        ActiveDocument.SaveAs FileName:=Rep & TabNom(NoLig) & ".doc"
        ActiveDocument.Close False
    Next
    Application.ScreenUpdating = True
End Sub
J'ai installé Access il y a une heure, j'aurai le plaisir de tester ton code.
Je crois me souvenir qu'une feuille Excel fait une très bonne table Access.
Ça m'évitera d'avoir à la créer.

NB - Je n'ai pas tester sur toute ma base de données (réelle -> 1328 adresses) mais tourlourou pourra faire ce test pour moi
A+

Edit
J'ai supprimé (provisoirement) la suppression du répertoire si existant. J'avais oublié que RmDir réclamait que le répertoire soit vide.
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2007, 00h55   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Application.ScreenUpdating = False
n'évite pas les mvts de feuille.
J'ai remplacé par
Code :
Application.visible = false
et ai rétabli
Code :
Application.visible = True
à la fin, mais je trouve cette méthode risqué en cas de bug.
Une autre solution ?

(je viens de relire ton message)
Citation:
En access, tu peux lancer le publipostage pour chaque enregistrement avec un movenext.

Il doit être possible de faire la même chose en Excel.
Je crois me souvenir que oui (!) Mais comme je fais toujours mes fusions depuis Excel en créant un fichier temp des seules adresses sélectionnées selon critères, je n'y ai pas pensé
Ce sera pour une autre fois
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h29.


 
 
 
 
Partenaires

Hébergement Web