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 qui ne fonctionne pas avec un fichier source lié [WD-2007]


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Publipostage qui ne fonctionne pas avec un fichier source lié
    Bonjour,

    Je travaille sur un publipostage (codé en VBA) dont le fichier qui sert de base est lui-même lié à un autre fichier.

    Donc, avant de faire mon publipostage, j'ouvre mon "fichierB" et récupère certaines données à partir du "fichier A" (par code VBA). Ensuite, j'ouvre mon document Word pour faire mon publipostage avec les données du "fichier B".

    Tout fonctionne lorsque le "fichier A" est un fichier normal. Le problème apparaît lorsque mon "fichier A" est un fichier partagé : même s'il est fermé et que je ne l'utilise pas dans le publipostage (je me base uniquement sur le "fichier B"), mon code ne fonctionne plus.

    Est-ce que cela est vraiment dû au fait que le "fichier A" est partagé ? Et quelqu'un aurait-il une idée de comment je pourrais contourner le problème ?

    Mille mercis !

    Pauline

  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,

    Je ne vois pas ce qui pourrait "empêcher" le publipostage.

    Si tu pouvais nous donner plus d'infos, où se trouvent les deux fichiers ?, comment fais-tu le publipostage ?

    je pourrais alors tenter de reproduire le problème.
    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 !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Merci de ta réponse, Heureux-Oli.

    Le but de la manœuvre est le suivant :

    Tous mes collègues travaillent sur un fichier commun "FichierA". Le service de facturation veut pouvoir travailler sur un fichier séparé, puisqu'il n'utilise pas toutes les données du "Fichier A", d'où la nécessité d'un "Fichier B".

    Le publipostage sert à imprimer des tableaux de facturation en fonction des données du "Fichier B", données donc récupérées sur le "Fichier A".

    Tous les fichiers sont sur un serveur partagé par une centaine d'ordinateurs.


    Mon code pour le publipostage est le suivant :

    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
    Option Explicit
     
    Private Sub CommandButton1_Click()
     
    Dim appWord As Word.Application
    Dim docWord As Word.Document
    Dim appOffice As Office.OfficeDataSourceObject
    Dim SQL As String
    Dim mois As String
     
     
    Application.ScreenUpdating = False
     
    Set appWord = New Word.Application
    appWord.Visible = True
     
    mois = ActiveDocument.FormFields(1).Result
    SQL = "SELECT *" & _
    "FROM [Facturation$]" & _
    "WHERE [Langue]= 'Anglais'" & _
    "And [Decision] LIKE '3%'" & _
    "And [Facture1]= '" & mois & "';"
     
    Set docWord = appWord.Documents.Open("Module1.docx")
     
    With docWord.MailMerge
    .MainDocumentType = wdDirectory
    .OpenDataSource _
    Name:="FichierB.xlsm", _
    SQLStatement:=SQL
     
    .Execute Pause:=True
     
    End With
     
    End Sub

    Le "fichier B" est lié au "fichier A" de la manière 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
    25
    26
    27
    28
    29
    30
    31
    32
    Option Explicit
     
    Private Sub CommandButton1_Click()
    Dim wb As Workbook
     
     
    Set wb = Workbooks.Open("FichierA.xls")
     
    ThisWorkbook.Activate
     
    With Workbooks("FichierA.xls").Worksheets(1)
     
        .Range("A:A, C:C, F:F, H:H, K:K, L:L, T:AE").Copy Workbooks("FichierB.xlsm").Worksheets(1).Range("A1")
     
     
    End With
     
    With Workbooks("FichierB.xlsm").Worksheets(1)
     
     
        If Not .AutoFilterMode Then .Range("A:R").AutoFilter
     
     
    End With
     
     
    Range("A:R").EntireColumn.AutoFit
    Range("A:R").Sort Key1:=Range("E2"), Header:=xlYes
     
    Workbooks("FichierA.xls").Close
     
    End Sub
    J'ai testé étape par étape pour voir ce qui ne fonctionnait pas : tant que le "fichier A" est un fichier Excel 2007 "normal", le publipostage fonctionne. Mais lorsque je teste mon code avec les données réelles (le "fichier A" est alors un fichier partagé par tout le monde), je n'arrive plus à finaliser le publipostage.

    Je ne suis pas certaine que le problème vient du fait que le fichier soit partagé, mais il semblerait que cela puisse venir de là.

    J'espère que c'est plus clair comme cela !

    Merci beaucoup !

    Pauline

  4. #4
    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,

    Même avec le code, ça reste trouble.

    Je vais utiliser ta méthode pour voir ce que ça donne chez moi.

    En attendant, pourrais-tu essayer au lieu de copier les données de A vers B, de sauver les données A en B.

    Tu ouvres le fichiers et tu en fais une sauvegarde en FichierB.

    Selon moi, la solution lorsque les fichiers sont partagés, c'est utiliser Access qui permet une utilisation à plusieurs en toute transparence, mais ce n'est pas toujours possible.
    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 !

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Merci de ta réponse !

    Cette solution serait sans doute plus simple, mais cela demande un peu trop de manipulation aux utilisateurs. Est-ce qu'il y aurait moyen de faire cette sauvegarde sans avoir besoin de toucher au fichier de base ? Il est en effet utilisé par beaucoup de personnes et la moindre modification soulève des tollés...

    Sinon, j'aurai bien utilisé Access, mais je n'y connais vraiment rien et je n'ai pour l'instant pas le temps de m'y former.


    Merci en tout cas pour tes conseils, je vais quand même essayer et voir si ça colle.

    Pauline

  6. #6
    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 ne rencontre pas le problème. Lors de la copie des données.

    Pour idée, voilà le code que j'ai utilisé, j'ai légèrement modifié ton code pour qu eje puisse l'utiliser.

    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
     
    Sub CopieDonnees()
    Dim wb1 As Workbook, wb2 As Workbook
     
     
    Set wb1 = Workbooks.Open("Y:\BIB\PUB01.XLSX")
    Set wb2 = Workbooks.Add
     
     
     
     
    With wb1.Worksheets(1)
     
        .Range("A:A, C:C, F:H, K:K, L:L").Copy wb2.Worksheets(1).Range("A1")
     
     
    End With
     
    With wb2.Worksheets(1)
     
     
        If Not .AutoFilterMode Then .Range("A:F").AutoFilter
     
     
    End With
     
     
    wb1.Close
    set wb1 = Nothing
    wb2.SaveAs "C:\Documents and Settings\Olivier\Mes documents\Excel\PUB02.xlsx"
     
     
    End Sub
    Pour la sauvegarde, ce n'est pas plus complexe que la copie des données, on ouvre et on fait un SaveAs

    Dim wb1 As Workbook

    set wb1 = Workbooks.Open("")

    wb1.SaveAs ""
    wb1.Close
    set wb1 = Nothing
    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 !

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup Heureux-Oli pour toutes ces informations !

    Je viens de trouver mon erreur : les deux fichiers que je testais n'était pas exactement les mêmes (une petite lettre de différence dans un des en-têtes de colonnes), et c'est pour cette raison que le publipostage ne pouvait pas se faire.

    Mais de toute façon je change ma façon de procéder (Save plutôt que Copy), donc mille merci pour ton aide !

    Pauline

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

Discussions similaires

  1. Réponses: 26
    Dernier message: 20/11/2012, 09h24
  2. fichier shell qui ne fonctionne pas avec le cron mais fonctionne dans le shell
    Par diabli73 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/10/2008, 19h12
  3. un For Each qui ne fonctionne pas avec une collection maison !
    Par grenouillesiverte dans le forum Windows Forms
    Réponses: 7
    Dernier message: 01/09/2007, 21h00
  4. tutoriel qui ne fonctionne pas avec glassfish
    Par dev7 dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 13/04/2007, 17h25
  5. Réponses: 10
    Dernier message: 13/03/2007, 11h38

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