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 :

question concernant ce lien : http://heureuxoli.developpez.com/office/word/publipostage/#L7-G [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre à l'essai

    Homme Profil pro
    utilisateur
    Inscrit en
    Décembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 9
    Points : 17
    Points
    17
    Billets dans le blog
    2
    Par défaut question concernant ce lien : http://heureuxoli.developpez.com/office/word/publipostage/#L7-G
    Bonjour,
    je ne suis pas un développeur avancé et j'espère ne pas être sur un site trop spécialisé ...
    Je cherche une solution au problème suivant :
    Je travaille en word 2010.
    je crée un mail merge à partir d'une liste excel de 177 enregistrements (destinataires avec nom, adresse, num rue, code postal, etc).
    word crée un fichier contenant tous les enregistrements.
    Je splitte chacune des pages (les données tiennent sur une seule page par destinataire) via la macro suivante :

    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
    Sub coupepages()
       Application.Browser.Target = wdBrowsePage
     
       For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")
     
          'sélectionne et copie le texte vers le presse papier
          ActiveDocument.Bookmarks("\page").Range.Copy
     
          ' Ouvre un nouveau document et colle le texte du presse papier
          Documents.Add
          Selection.PasteAndFormat (wdFormatOriginalFormatting)
     
          ' ôte le saut de page si nécessaire
          Selection.TypeBackspace
          ChangeFileOpenDirectory "C:\Users\dhaboush\Desktop\coi2016\Newfolder"
          DocNum = DocNum + 1
          ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
          ActiveDocument.Close
     
          ' page suivante
          Application.Browser.Next
       Next i
       ActiveDocument.Close savechanges:=wdDoNotSaveChanges
    End Sub
    Je cherche à renommer les différents fichiers ainsi obtenus et en cherchant j'ai trouvé votre code (voir titre et repris ci dessous) mais je ne comprends pas bien comment l'intégrer en word car il fait appel à la data source qui est en excel ..


    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
    Sub TestPublipost()
    ' Déclaration des variables
    Dim iR As Integer
    Dim i As Integer
    Dim oDoc As Document
    Dim DocName As String
    Dim oDS As MailMergeDataSource
     
    ' Affectation des objets
    Set oDoc = ActiveDocument
    Set oDS = oDoc.MailMerge.DataSource
     
    iR = oDoc.MailMerge.DataSource.RecordCount
    Debug.Print iR
    For i = 1 To iR
        With oDoc.MailMerge
            'Définition du premier et dernier enregistrement
            .DataSource.FirstRecord = i
     
            .DataSource.LastRecord = i
            ' Envoi des données dans un nouveau document
            .Destination = wdSendToNewDocument
            ' Exécution du publipostage
            .Execute
            ' Actualisation de l'enregistrement pour la sauvegarde
            .DataSource.ActiveRecord = i
            'Utilisation de deux champs pour obtenir le nom du document
            DocName = .DataSource.DataFields(2).Value
            DocName = DocName & "-" & .DataSource.DataFields(3).Value
            Debug.Print DocName; i
        End With
        ' Sauvegarde du document publiposté
        With ActiveDocument
            .SaveAs "c:\temp\" & DocName & ".doc"
            .Close
        End With
    Next i
    End Sub
    Pour le moment j'ai trouvé une solution qui fonctionne via excel (voir ci dessous) mais je préférerais travailler via word

    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
    Sub renameFile()
    Dim rg As Range
    Set rg = ActiveWindow.RangeSelection
    Dim i As Integer
    Dim fso As New FileSystemObject, f As File
    i = 1
    For Each cel In rg
        If cel <> "" Then
        Dim myFile As String
        myFile = "C:\Users\dhaboush\Desktop\coi2016\Newfolder\test_" & cel.Row - 1 & ".doc"
        Dim myName As String
        myName = Trim(cel.Value) & "-" & Worksheets("Global").Cells(cel.Row, 6) & ".doc"
     
        Debug.Print myName '  Worksheets("Global").Cells(cel.Row, 6)
     
        Set f = fso.GetFile(myFile)
        f.Name = myName
        i = i + 1
    End If
    Next
     
    End Sub
    merci d'avance.

  2. #2
    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
    Salut,


    Dans le second morceau de code que tu nous donnes, je pense savoir d'où il vient.
    On ne fait pas appel à Excel.
    La source de données n'a pas d'importance.
    En fait, on part d'un document de fusion qui est lié à des données et on génère une fusion pour chaque enregistrement. De cette manière, on peut utiliser un champ de données pour le nom du document.

  3. #3
    Membre à l'essai

    Homme Profil pro
    utilisateur
    Inscrit en
    Décembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 9
    Points : 17
    Points
    17
    Billets dans le blog
    2
    Par défaut question concernant ce lien : http://heureuxoli.developpez.com/office/word/publipostage/#L7-G
    merci pour la réponse. J'ai créer la macro en vba en faisant copier coller, en changeant simplement la directory de destination (c:\Temp) mais cela ne fonctionne pas : lorsque je fais tourner le debug, et que je positionne le curseur sur MailMerge ou DataSource je reçois le message suivant : <Object Variable or with block variable not set> - idem pour "active record" - pouvez vous m'aider ? encore merci

  4. #4
    Membre à l'essai

    Homme Profil pro
    utilisateur
    Inscrit en
    Décembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : utilisateur
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 9
    Points : 17
    Points
    17
    Billets dans le blog
    2
    Par défaut question concernant ce lien : http://heureuxoli.developpez.com/office/word/publipostage/#L7-G
    Rebonjour,
    j'ai trouvé la solution, càd lancer la macro au moment du mailmerge et pas à partir du fichier avec les résultats.
    on peut donc oublier mon précédent message.
    encore un tout grand merci.

  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
    Salut,

    Je viens de copier coller le code contenu dans le message pour être certain, chez moi, il ne donne aucune erreur et s'exécute sans problème et le résultat obtenu est conforme.

    Pour y arriver, j'ai crée un document principal de fusion.

    Je pars d'un document blanc, j'y ajoute une source de données comme pour un publipostage normal.
    Ensuite, j'ouvre le VBE (Alt + F11).
    Je colle le code dans ThisDocument.

    Je sauve en docm.

    avec le curseur dans le code, j'appuie sur F5 pour exécuter le code.

    J'ai bien dans le répertoire C:\Temp, les fichiers publipostés.

+ Répondre à la discussion
Cette discussion est résolue.

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