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 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
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
Et vous vous en doutez, ça ne marche pas!
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 douvrir 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
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!!
Partager