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-W]Pb Alerte lors d'une fusion


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 6
    Points
    6
    Par défaut [VBA-W]Pb Alerte lors d'une fusion
    Bonjour,

    Je vous demande de l'aide car j'ai eu beau chercher, je ne vois pas comment passer un message d'alerte sur word 2003 quand j'ouvre un modèle auquel est attaché un fichier d'en-tête et de donnée.

    "L'ouverture de ce document exécutera la commande SQL suivante :
    SELECT*FROM C:\MODELE\FIC_DONNEES.txt
    Des données provenant de votre base de données seront insérées dans le document. Voulez-vous continuer ?" OUI NON

    En fait, je souhaite ouvrir un document auquel est attaché un fichier d'en-tête et de données et le fusionner en supprimant cette alerte. Mais je souhaite aussi pouvoir voir les autres alertes et messages qui peuvent s'afficher lors de l'ouverture du modèle.

    J'ai bien pensé à faire un DisplayAlerts mais la valeur par défaut du message est NON, donc plus de fichiers d'en-tête et de données attachés au modèle.
    Bon, vous auriez pu me dire : "Tu n'a qu'à les rattaché faire un OpenHeaderSource et un OpenDataSource puis tu fusionnes..." mais le souci, c'est que je serais obligé de faire un DisplayAlerts avant l'OpenHeaderSource et l' OpenDataSource pour passer la fenêtre de séparateurs d'enregistrement.

    Vous avez compris mon problème : en fait je souhaite afficher tous les messages sauf les messages relatifs aux séparateurs d'enregistrement et ce message qui m'ennuie sous Word 2003 exclusivement.

    Question : Comment répondre OUI à cette alerte ?

    FUSION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            Documents.Open FileName:=FIC_A_CHARGER, ReadOnly:=True   'Ouvre le modèle en lecture seule
            Documents(PRINCIPAL).Activate                                                 'Positionne-toi sur le modèle
            With ActiveDocument
                .MailMerge.Destination = wdSendToNewDocument                    'Définition du résultat de la fusion comme document
                .MailMerge.Execute Pause:=True                                             'Exécution de la fusion
            End With
            ActiveDocument.SaveAs FileName:=CHENOMDOC                        'Enregistre le document fusionné
    Quelqu'un saurait-il m'apporté un début de solution ?
    Je bloque réellement.

    Merci d'avance,

    Christophe

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Hum, pas évident comme problème, surtout que je n'ai pas Word 2003.
    J'ai cherché un peu sur MSDN, cet article t'aide-t'il : linkToQuery element

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 6
    Points
    6
    Par défaut HumHumm
    Bonjour,

    Merci cher ami mais, là, ça devient trop pointu, d'autant plus que j'ai quelques difficultés avec la langue de Shakespeare.

    Je sais que beaucoup de personnes ont bloquées sur ce sujet, je n'ai vu que des prises de têtes dans les différents forum pour contourner le problème. Est-ce que microsoft nous a squizzé ? A part changer le registre, comme ils l'indiquent dans leur page, je ne vois pas comment faire....

    Cf http://support.microsoft.com/?scid=kb;fr;825765

    Si vous avez une solution....

    Christophe

  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 546
    Points
    15 546
    Par défaut
    Hello,

    Comme je suis sur office97, je ne vois pas ton problème et ne comprends pas "tout" ce que tu fais.
    J'ai une base de données Excel et un modèle de lettre Word.
    Je lance la fusion par macro Auto_open. Là, pour laisser la liberté à l'utilisateur de modifier le résultat de la fusion, j'ai été contraint d'ajouter une boîte de dialogue, sinon, je n'ai aucun message annonçant la fusion...
    Si quelque chose dans mon code peut expliquer l'absence de message, j'ignore quoi...
    C'est donc à tout hasard que je te passe ce code, sans trop y croire.

    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
    Public NomLettreType
     
    Sub AutoOpen()
        Main
    End Sub
     
    Public Sub Main()
        Fusionner
    End Sub
     
    Sub Fusionner()
    Dim r, i
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .Execute
        End With
        r = MsgBox("Fusion réalisée." & Chr(13) & "Souhaitez vous examiner le document avant impression ?" & Chr(13) & "(Annuler ferme Word et renvoie sur l'application Excel)", 51, "ÉDITER LE RÉSULTAT DE LA FUSION")
        If r = 6 Then
                Exit Sub
            ElseIf r = 2 Then
                quitter
        End If
        NomLettreType = ActiveDocument.Name
        Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
            wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
            Collate:=True, Background:=False, PrintToFile:=False
        quitter
    End Sub
     
    Sub quitter()
        If NomLettreType <> "" Then
            Set MonFichier = GetObject(NomLettreType)
            MonFichier.Activate
            MonFichier.Close SaveChanges:=wdDoNotSaveChanges
        End If
     
        Set MonFichierXls = GetObject("\\pinea\comdrh\emploi\Fichier\Fichier résultat requête.xls")
        MonFichierXls.Activate
        MonFichierXls.Close SaveChanges:=False
     
        Set MonFichierXls = GetObject("\\pinea\comdrh\emploi\Demandeurs d'emploi.xls")
        MonFichierXls.Activate
     
        Set MonAppli = Application
        MonAppli.Visible = True
        MonAppli.Quit SaveChanges:=wdDoNotSaveChanges
    End Sub
    ???? dans le doute, j'essaie toujours...

    A+

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Chaud, chaud
    Merci pour ton post ouskel'n'or

    Mais, comme tu me l'avais deviné, ton code ne m'avance pas énormément.

    En fait sous Word 2003, lorsque tu ouvres un modèle auquel est déjà attaché une source de données, une alerte se produit indiquant à l'utilisateur qu'un requête permettant d'importer les données va être exécuter.(Sécurité oblige)

    Jusque là pas de pb, il suffirait de faire un DisplayAlert pour passer le message mais la valeur par défaut du message est "non"... donc les données se désolidarisent du modèle et ce denier devient un document simple.

    Y-a-t il un moyen de contourner ce message, de ne pas l'afficher ou de répondre par oui ?


    Merci de votre soutien

    Christophe

  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 546
    Points
    15 546
    Par défaut
    C'est bien ce que je craignais

    A+

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: Chaud, chaud
    Citation Envoyé par comeochris
    En fait sous Word 2003, lorsque tu ouvres un modèle auquel est déjà attaché une source de données, une alerte se produit indiquant à l'utilisateur qu'un requête permettant d'importer les données va être exécuter.(Sécurité oblige)
    Le message est déclenché par l'instruction Open, c'est bien ça ? Ou sur le MailMerge ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Sur l'instruction Open
    Sur l'instruction Open, oui

    As tu une idée ?

    Christophe

  9. #9
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: Sur l'instruction Open
    Citation Envoyé par comeochris
    As tu une idée ?
    Non, pas vraiment ...

    J'ai consulté la liste des paramètres de cette instruction, je n'ai rien trouvé qui semble répondre à ton problème, désolé ...

    A tout hasard, je le laisse l'URL de MSDN : http://msdn.microsoft.com/library/de...HV01113557.asp

  10. #10
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Merci
    Pas grave. Je vais continuer à chercher. Je vais peut-être désactiver la sécurité le temps de l'exécution de la macro en modifiant le registre....

    Merci,

    @+++

  11. #11
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 13
    Points : 6
    Points
    6
    Par défaut J'ai trouvé
    Bonjour :–)))

    Voici le résultat de plusieurs recherches destinées à supprimer l'apparition intempestive d'une alerte à l'ouverture d'un modèle auquel était lié un fichier de donnée·
    Cette alerte est la suivante :

    "L'ouverture de ce document exécutera la commande SQL suivante :"
    "SELECT * FROM C:\…\donnée.txt."
    "Des données provenant de votre base de données seront insérées dans le document?Voulez–vous continuer ? "
    Cette alerte apparaît sous Office 2002 Pack3 et Office 2003. Pour la désactiver, impossible de faire un displayalert lors de l'ouverture du modèle car la valeur par défaut du message est NON.
    Donc, il faut faire appel aux API de windows, et modifier la base de registre (comme l'indique Microsoft : http://support.microsoft.com/?scid=kb;fr;825765 ).

    Voici le code commentée que j'ai retenue pour désactiver la sécurité au début de la macro et la réactiver à la fin.

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    '##################################################### 
    '##### 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.) 
     
    Public 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 
     
    '------------------------------------------------------------------------------------------------- 
     
    '##################################################### 
    '#################### 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 = "Software\Microsoft\Office\11.0\Word\Options" 
    Else 
        If Application.Version = "10.0" Then 
            sCheminCle = "Software\Microsoft\Office\10.0\Word\Options" 
        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) 
        Else 
            Call MsgBox("L'écriture de la valeur SQLSecurityCheck a échoué" & Chr(10) & _ 
                         "Merci de contacter le service technique", vbCritical) 
            RegCloseKey (lngHandle) 
        End If 
    Else 
        Call MsgBox("L'ouverure de la clé Options a échoué" & Chr(10) & _ 
                    "Merci de contacter le service technique", vbCritical) 
    End If 
     
    '------------------------------------------------------------------------------------------------- 
     
    Code de la macro (Ouverture du modèle auquel est attaché une source de donnée, fusion) 
     
    '------------------------------------------------------------------------------------------------- 
     
    '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) 
        Else 
            Call MsgBox("La suppression de la valeur SQLSecurityCheck a échoué" & Chr(10) & _ 
                         "Merci de contacter le service technique", vbCritical) 
            RegCloseKey (lngHandle) 
        End If 
    Else 
        Call MsgBox("L'ouverure de la clé Options a échoué" & Chr(10) & _ 
                    "Merci de contacter le service technique", vbCritical) 
    End If 
     
    '-------------------------------------------------------------------------------------------------
    Merci à Anacoluthe pour mes premiers pas dans VBA et à la très utile page de Thomas HAMOU sur la manipulation de la base de registre grâce aux API Windows ( http://www.supinfo-projects.com/fr/2004/api%5Fbasederegistre%5F%5Fvb%5Ffr/1/ )

    Soyez indulgent avec moi, je n'ai que 3 mois de programmation derrière moi.

    Christophe

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

Discussions similaires

  1. [WD-2000] Erreur de calcul dans l'enregistrement lors d'une fusion ?
    Par marot_r dans le forum Word
    Réponses: 10
    Dernier message: 15/09/2010, 21h31
  2. Une alert lors d'une erreur
    Par biba2386 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/05/2008, 17h53
  3. Confirmation lors d'une fusion de cellule
    Par Iloon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/03/2008, 12h49
  4. WORD suppression d'info lors d'une fusion
    Par alainb dans le forum Word
    Réponses: 8
    Dernier message: 19/11/2007, 19h10
  5. [VBA-E]Erreur lors d'une copie de cellules
    Par illight dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2006, 12h22

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