IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

publipostage et sauvegarde


Sujet :

VBA Word

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    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

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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+

  3. #3
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Application.ScreenUpdating = False
    n'évite pas les mvts de feuille.
    J'ai remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.visible = false
    et ai rétabli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2014, 18h20
  2. Sauvegarde avec nom d'une variable publipostage.
    Par Alecp dans le forum VBA Word
    Réponses: 6
    Dernier message: 08/12/2009, 17h56
  3. Réponses: 5
    Dernier message: 23/10/2009, 17h11
  4. [WD-2002] sauvegarde publipostage word
    Par alexkickstand dans le forum VBA Word
    Réponses: 2
    Dernier message: 03/08/2009, 21h10
  5. publipostage : sauvegarde à 2 endroits
    Par wasdaka dans le forum VBA Access
    Réponses: 9
    Dernier message: 12/06/2008, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo