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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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, rosanne4552@gmail.com 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
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
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
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, rosanne4552@gmail.com 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
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
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
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
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
rosanne4552
OUI !!!! C'est exactement ce que je voulais !!! Mille Mercis !!!