Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Re: Pb : Alerte Commande SQL sur ouverture Modèle pour fusion

1 réponse
Avatar
comeochris
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;82576
)

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

'####################################################
'##### DECLARATION CONSTANTES ET API WINDOWS ################
'####################################################
'------------------------------------------------------------------------------------------------
Public Const HKEY_CURRENT_USER = &H8000000
Public Const REG_DWORD As Long =
Public Const KEY_ALL_ACCESS = &HF003
'------------------------------------------------------------------------------------------------
'Fonction permettant d’ouvrir une clé existante de la base de registr
'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
'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 Lon
'------------------------------------------------------------------------------------------------
'Fonction permettant de fermer une clé de la base de registre
'hKey Long Handle de la clé que vous souhaitez ferme
'Valeur renvoyée: Long Renvoi 0 (ERROR_SUCCESS
'(si la fonction réussi.
Public Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Lon
'------------------------------------------------------------------------------------------------
'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
'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 Lon
'------------------------------------------------------------------------------------------------
'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)
End If
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)
End If
End If

'-------------------------------------------------------------------------------------------------


--
comeochris

------------------------------------------------------------------------
Voir theme: http://www.frbox.net/viewtopic-490083.html

Envoyé de http://www.frbox.net

1 réponse

Avatar
Geo

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.


Je me mets ça de côté, surtout que tu as prévu les deux cas : 2002 et 2003
Plutôt que d'effacer la clef, on pourrait la mettre à 1 (hypothèse)
comme ça la modifier à la main est plus facile si on en a besoin un jour.
Si tu as d'autres questions avec les réponses, c'est avec plaisir qu'on te
lira :-)


--

A+