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 :

[VBA-E-W]Publipostage Word Excel


Sujet :

VBA Word

  1. #1
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Bonjour, pour ne pas polluer un post avec la balise "Résolu", je recréé un message!!

    Premièrement, je vous invite à lire le post suivant où j'expose mon problème:

    http://www.developpez.net/forums/sho...d.php?t=296621

    Pour que vous puissiez mieux comprendre pourquoi je n'arrive pas à faire ce que je veux, voici la tête de mon code:

    Code de ma UserForm(Avec un bouton OK):
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Private Sub BoutonOK_Click()
     
     
        '#######DEBUT DE CODE EFFECTUANT UNE MANIP DANS EXCEL#####
    	'Code qui permet de modifier le contenu de plusieurs cellules    
        '########## Fin du code de manip dans excel #########
     
     
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
     
        Set WordApp = CreateObject("Word.Application")
        WordApp.Visible = True
        Set WordDoc = WordApp.Documents.Open _
        ("C:\Documents and Settings\QUALITE3\Bureau\Etiquettes\EtiquettesManuest.doc")
     
     
     
        '#################### CODE ############################
     
     
        Dim lngHandle As Long 'Manipulation de la bdr
        Dim sCheminCle As String 'Chemin dans la bdr de la clé à ouvrir et à fermer
        'Remarques:
        'Un handle est une valeur de type Long qui définit un objet de l'environnement Windows. _
        'Lorsque nous ouvrirons une clé, elle possèdera donc son propre handle qui est renvoyé par la fonction. _
        'Ce handle nous servira lors de la manipulation de cette clé.
        '-------------------------------------------------------------------------------------------------
     
        'Détermine le chemin de la clé dans la bdr en fonction de la version d'Office.
        If Application.Version = "11.0" Then
            sCheminCle = "SoftwareMicrosoftOffice11.0WordOptions"
        Else
            If Application.Version = "10.0" Then
                sCheminCle = "SoftwareMicrosoftOffice10.0WordOptions"
            End If
        End If
     
        'Désactive le message d'alerte : "L'ouverture de ce document exécutera la commande SQL suivante...." => Office 2002 et 2003
        'Ouvre la clé, affecte lui la donnée "SQLSecurityCheck" dont la valeur est = 0, ferme la clé
        If RegOpenKeyEx(HKEY_CURRENT_USER, sCheminCle, 0, KEY_ALL_ACCESS, lngHandle) = 0 Then
            If RegSetValueExLong(lngHandle, "SQLSecurityCheck", 0&, REG_DWORD, 0, 4) = 0 Then
                RegCloseKey (lngHandle)
            End If
        End If
     
            With WordDoc.MailMerge
                'Spécifie la fusion vers l'imprimante
                .Destination = wdSendToPrinter
                .SuppressBlankLines = True
                    'Prend en compte l'ensemble des enregistrements
                    With .DataSource
                        .FirstRecord = wdDefaultFirstRecord
                        .LastRecord = wdDefaultLastRecord
                    End With
                'Exécute l'opération de publipostage
                .Execute Pause:=False
            End With
     
            Application.ScreenUpdating = True
     
            'Fermeture du document Word
            WordDoc.Close False
            WordApp.Quit
     
        'Ouvre la clé, supprime la valeur "SQLSecurityCheck" , ferme la clé (Retour à la normal)
        If RegOpenKeyEx(HKEY_CURRENT_USER, sCheminCle, 0, KEY_ALL_ACCESS, lngHandle) = 0 Then
            If RegDeleteValue(lngHandle, "SQLSecurityCheck") = 0 Then
                RegCloseKey (lngHandle)
            End If
        End If
     
    End Sub
    Code de mon module:
    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
    '##### DECLARATION CONSTANTES ET API WINDOWS ######
    '-------------------------------------------------------------------------------------------------
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const REG_DWORD As Long = 4
    Public Const KEY_ALL_ACCESS = &HF003F
    '-------------------------------------------------------------------------------------------------
    'Fonction permettant d’ouvrir une clé existante de la base de registre
    'hKey                     Long        Handle d'une clé déjà ouverte ou constante d'une clé principale.
    'lpSubKey              String      Nom de la clé que vous souhaitez ouvrir.
    'ulOptions              Long        Paramètre inutilisé: Vaut 0
    'samDesired         Long        Droits que vous souhaitez utiliser pour cette clé.
    'phkResult          Long        Cette variable prendra le Handle de la clé que vous venez d'ouvrir.
    'Valeur renvoyée:   Long        Renvoi 0 (ERROR_SUCCESS)
    '(si la fonction réussi.)
    '-------------------------------------------------------------------------------------------------
    Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
        (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    '-------------------------------------------------------------------------------------------------
    'Fonction permettant de fermer une clé de la base de registre.
    'hKey                Long        Handle de la clé que vous souhaitez fermer
    'Valeur renvoyée:    Long        Renvoi 0 (ERROR_SUCCESS)
    '(si la fonction réussi.)
    Public Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
    '-------------------------------------------------------------------------------------------------
    'Fonction permettant de déterminer les données d'une valeur.
    'hKey           Long    Handle d'une clé déjà ouverte ou constante d'une clé principale.
    'lpValueName    String  Nom de la valeur à modifier. Si cette valeur n'existe pas elle est alors créée.
    'Reserved      Long    Paramètre inutilisé: Vaut 0
    'dwType         Long    Constante définissant le type de valeur à créer ou modifier.
    'lpValue         Long    Variable contenant les données de la valeur à créer ou modifier.
    'cbData          Long    Vous devez ici mettre une variable qui contient le nombre de caractères que vous avez écrit + 1 (+ caractère de fin de chaîne)
    'Valeur renvoyée:           Long    Renvoi 0 (ERROR_SUCCESS)
    '(Si la fonction réussie.)
    Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" _
        (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
    '-------------------------------------------------------------------------------------------------
    'Fonction permettant de supprimer une valeur de la base de registre.
    'hKey               Long        Handle d'une clé déjà ouverte ou constante d'une clé principale.
    'lpValueName        String      Nom de la clé que vous souhaitez supprimer.
    'Valeur renvoyée:   Long        Renvoi 0 (ERROR_SUCCESS)
    '(Si la fonction réussie.)
    Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _
        (ByVal hKey As Long, ByVal lpValueName As String) As Long
    '-------------------------------------------------------------------------------------------------
     
    Sub ReferencePieceCyclée()
     
     
        MaUserForm.Show
    End Sub
    Et vous vous en doutez, ça ne marche pas!

    L'erreur est la suivante:





    Voilà, j'espère que vous pourrez m'aider!!

    En fait, en ajoutant manuellement la clé nécessaire dans regedit, ça fonctionne mais il y a toujours une boîte de dialogue qui demande le chemin d'acces de la base de donnée... Il faudrait que je shunte également cette boîte de dialogue...

    Ou alors que je demande à mon patron de remettre office 10.0 lol!!
    Épargnez votre cerveau : éteignez votre télé !

  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
    Qu'as-tu si tu fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Application.ActivePrinter
    ?

  3. #3
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Tout d'abord, merci de la réponse!

    avec la messagebox ci dessus, il m'indique la bonne imprimante.

    Mais c'est logique...Ce n'est pas ça qui ne fonctionne pas. C'est la fusion des documents. Lorsque j'ouvre word dans mon code, il faudrait que je lui indique que le classeur excel ouvert est la source de donnée.

    Manuellement, lorsque j'ouvre le document word concerné, il me demande à l'ouverture si je veux selectionner une source données et il me demande le chemin d'accès.
    Avec vba lorsqu'on ouvre ce document, la réponse à la boîte de dialogue est "non" par défaut. Le code ci dessus est censé forcer la valeur à "oui" mais la demande du chemin d'accès est toujours là... (Mais là, ça ne marche pas du tout du tout!!)
    Ce que je voudrais, c'est que tout se fasse automatiquement:
    à l'ouverture de word, pas de boîte de dialogue, le chemin d'accès de la source de donnée serait déjà paramétré, l'impression se ferait automatiquement.

    Je ne suis pas sûr d'être suffisemment clair mais posez moi des questions (même vos questions peuvent m'aiguiller ^^)

    Encore merci!
    Épargnez votre cerveau : éteignez votre télé !

  4. #4
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Bien, en me creusant la tête dans tout les sens, j'ai enfin fini par trouver une solution.

    J'ai effacé tout le bout de code censé créer une clé temporaire dans le registre et j'ai créé une macro dans le document word de fusion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Document_Open()
     
         ThisDocument.MailMerge.OpenDataSource _
         Name:="C:/MaSourceDeDonnee.tartampion", _  '*.doc,*.xls,...
            LinkToSource:=False, AddToRecentFiles:=False, _
            Connection:="TABLE Orders"   
     
     
    End Sub
    Le code s'execute à l'ouverture du document et indique le fichier (et son chemin d'accès) de la source de données. Pour les paramètres de la fonction opendatasource, j'ai pas trop utilisé mais visiblement, on peut faire pas de choses avec ^^
    EDIT: J'ai placé le code dans ThisDocument (Microsoft Word Objets)

    Enfin bref............. CA MARCHE !!!!!
    Épargnez votre cerveau : éteignez votre télé !

  5. #5
    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
    C'est effectivement la solution que j'ai toujours adoptée... C'est bête, hein ?
    Désolé mais quand je t'ai vu citer la FAQ sur la modif de la base de registre, je n'ai pas imaginé un instant que tu voulais simplement réaliser une fusion dans Word
    La prochaine fois je poserai des questions
    A+

  6. #6
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Arf oui dsl... Ma requête n'était pas très explicite ^^
    M'enfin, merci quand même d'avoir un peu réfléchi pour mon problème!
    Ce forum est vraiment génial, j'ai déjà résolu pas mal de choses grâce a vous!!
    Merci!
    Épargnez votre cerveau : éteignez votre télé !

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

Discussions similaires

  1. Problème Publipostage Word Excel
    Par glaine dans le forum Word
    Réponses: 1
    Dernier message: 29/05/2009, 06h48
  2. Problème de publipostage word-excel 2003
    Par Spidermeu dans le forum Word
    Réponses: 4
    Dernier message: 27/01/2009, 18h36
  3. Publipostage Word Excel
    Par landi2008 dans le forum Word
    Réponses: 5
    Dernier message: 23/12/2008, 17h14
  4. Publipostage Word Excel
    Par grhum dans le forum Word
    Réponses: 5
    Dernier message: 28/09/2007, 13h43

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