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

Insertion automatique du code utilisateur windows

7 réponses
Avatar
rosanne4552
Bonjour,

Je souhaiterais ins=C3=A9rer dans un fichier word, de fa=C3=A7on automatiqu=
e, le code utilisateur windows.

Je le fais en excel par le code suivant :
_________________
Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA=
" _
(ByVal lpBuffer As =
String, _
nSize As Long) As L=
ong
Private Sub Workbook_Open()
=20
Dim lpBuff As String * 25
Dim ret As Long, UserName As String
ret =3D GetUserName(lpBuff, 25)
UserName =3D Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
Sheets("Inscrits").Select
Sheets("Inscrits").Unprotect "sipad"
Range("h2") =3D LCase(UserName)
Sheets("Inscrits").Protect "sipad", DrawingObjects:=3DTrue, Contents:=
=3DTrue, Scenarios:=3DTrue, AllowUsingPivotTables:=3DTrue
=20
If [h2].Value =3D "henseb0" Or [h2].Value =3D "pourox01" Then

Dim ws As Worksheet

For Each ws In Worksheets
ws.Visible =3D True
Next

For Each ws In Worksheets
ws.Unprotect "sipad"
Next

End If

End Sub
__________________

Comment le faire dans Word ?

Merci
Rosanne

7 réponses

Avatar
HB
Bonjour,
1) Je ne comprends pas trop la question car la macro Excel
utilise le contenu du classeur.
Des données sont vérifiées
puis, selon le résultat,
on cache ou pas les feuilles du classeur.
Faut-il que le document word avec macro utilise ce classeur ?
2) Je n'ai rien contre advapi32.dll
mais la variable d'environnement
USERNAME donne le nom de l'utilisateur
de façon naturelle et rapide :
Login = Environ("USERNAME")
Amicalement,
HB
PS : J'espère que le projet VBA
est lui même protégé par mot de passe
puisque le mot de passe pour les feuilles
est en clair dans le code ...
Le 11/07/2016 à 15:01, a écrit :
Bonjour,
Je souhaiterais insérer dans un fichier word, de façon automatique, le code utilisateur windows.
Je le fais en excel par le code suivant :
_________________
Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, _
nSize As Long) As Long
Private Sub Workbook_Open()
Dim lpBuff As String * 25
Dim ret As Long, UserName As String
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
Sheets("Inscrits").Select
Sheets("Inscrits").Unprotect "sipad"
Range("h2") = LCase(UserName)
Sheets("Inscrits").Protect "sipad", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowUsingPivotTables:=True
If [h2].Value = "henseb0" Or [h2].Value = "pourox01" Then
Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = True
Next
For Each ws In Worksheets
ws.Unprotect "sipad"
Next
End If
End Sub
__________________
Comment le faire dans Word ?
Merci
Rosanne

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
rosanne4552
Bonjour,
En fait, il n'y a aucun lien entre mes fichiers Word et Excel, le code Exce l était un exemple que je voulais donner.
Nous travaillons en réseau et j'ai besoin que le code utilisateur Wind ows apparaisse sur le formulaire de façon à authentifier la perso nne qui le complète. À moins que je me trompe, la variable d'envi ronnement USERNAME réfère au champ Nom de l'utilisateur dans le m enu Fichier/Option/Général ?
Malheureusement, ce champ est facilement modifiable par l'utilisateur alors que le code utilisateur Windows ne peut pas être modifié. Le cod e utilisateur Windows devient alors un peu comme la signature de la personn e qui complète le formulaire.
Si on peut aller chercher cette information dans Excel, je suis convaincue qu'il est possible de le faire dans Word...
Merci infiniment de votre aide.
P.S. Oui les codes VBA dans Excel sont également protégés, M erci
Avatar
HB
Si les utilisateurs peuvent modifier le login, j'en déduis que ce sont
des utilisateurs locaux ... car normalement, dans un domaine, ce n'est
pas possible.
Dans ce cas là, le nom du dossier de profil
(qui est donc aussi local)
n'est pas modifié
donc le nom d'origine du profil
est dans %USERPROFILE%
Par ailleurs,
Advapi32 retourne le login ... aussi ...
En local,
pour avoir qqchose de "sûr"
on peut utiliser le SID ...
Sub TEST()
Nom = Environ("USERNAME")
Set oWMI = GetObject("winmgmts:.rootcimv2")
Set oCptes = oWMI.ExecQuery( _
"Select * From Win32_UserAccount Where Name ='" & Nom & "'")
For Each oCpte In oCptes
Sid = oCpte.Sid
Next
MsgBox " Le SID de " & Nom & " est : " & Sid
End Sub
mais quand la machine sera changée et/ou "refaite",
ce SID changera même si le login est le même...
Cordialement,
Le 12/07/2016 à 15:24, a écrit :
Bonjour,
En fait, il n'y a aucun lien entre mes fichiers Word et Excel, le code Excel était un exemple que je voulais donner.
Nous travaillons en réseau et j'ai besoin que le code utilisateur Windows apparaisse sur le formulaire de façon à authentifier la personne qui le complète. À moins que je me trompe, la variable d'environnement USERNAME réfère au champ Nom de l'utilisateur dans le menu Fichier/Option/Général ?
Malheureusement, ce champ est facilement modifiable par l'utilisateur alors que le code utilisateur Windows ne peut pas être modifié. Le code utilisateur Windows devient alors un peu comme la signature de la personne qui complète le formulaire.
Si on peut aller chercher cette information dans Excel, je suis convaincue qu'il est possible de le faire dans Word...
Merci infiniment de votre aide.
P.S. Oui les codes VBA dans Excel sont également protégés, Merci

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
rosanne4552
Re-Bonjour, C'est encore moi !!!
Je suis relativement débutante en VBA et j'apprends par des essais et erreurs.
Dans ton code, il y a exactement ce que je veux mais je ne parviens pas à   l'écrire comme je le veux. C'est le résultat du & Nom &, je l 'ai mis entre crochets [ ]
______________________
Sub TEST()
Nom = Environ("USERNAME") .....
....
...
...
Next
MsgBox " Le SID de [" & Nom & "] est : " & Sid
End Sub
______________________
Voici ce que je veux :
À l'ouverture du fichier : Private Sub Document_open()
Dans le champ texte qui se nomme UserID : FormFields("userID")
Inscrire le résultat que donne & Nom & dans ton code (c'est exactement le login que je veux, mon code utilisateur Windows)
Fin de la macro : End Sub
MERCI, MERCI, MERCI
Avatar
HB
Donc et si j'ai bien compris ...
Ne serait-ce simplement
Private Sub Document_Open()
nom = Environ("USERNAME")
ThisDocument.FormFields("UserID").Result = nom
End Sub
Ce qui suppose qu'il existe effectivement
dans ce document
un champ de formulaire nommé UserID ...
voir là ...
https://msdn.microsoft.com/fr-fr/library/office/dn320670.aspx
Attention :
La traduction automatique modifie à tort de nombreuses choses ...
Par exemple, la propriété Result devient "Résultat" !!!
Il faut donc rester "en anglais"
Cordialement,
HB
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
rosanne4552
OUI !!!!
C'est exactement ce que je voulais !!!
Mille Mercis !!!
Avatar
HB
Parfait ;o)
et donc ... nul d'advapi32.dll ;o)
amicalement,
HB
Le 13/07/2016 à 18:24, a écrit :
OUI !!!!
C'est exactement ce que je voulais !!!
Mille Mercis !!!

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus