À partir de VBA Excel/Word Computer name et local IP address

Résolu
go4t Messages postés 7 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 2 décembre 2004 - 27 nov. 2004 à 19:31
go4t Messages postés 7 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 2 décembre 2004 - 2 déc. 2004 à 20:39
Bonjour !
Je désire créer une macro VBA dans un document Word ou un fichier Excel qui récupérera:
1- le nom de l'ordinateur et
2- l'adresse IP local de l'ordinateur.

Le but est de permettre AUTOMATIQUEMENT l'ouverture du document Word ou du fichier Excel mais SEULEMENT en fonction d'une contrainte de "nom" et "d'adresse IP local" prédéterminés dans le programme VBA de Word ou Excel.

En passant, la commande VBA:
Shell ("command.com /k ipconfig")
n'est donc pas suffisante. Il doit y avoir un autre moyen pour ramener ces valeurs récupérées dans Word ou Excel pour fin de validation en vu d'une ouverture ou non de fichier.

Bienvenue aux fûtés. Merci bien !

9 réponses

go4t Messages postés 7 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 2 décembre 2004
2 déc. 2004 à 20:39
ReBonjour PAT,
Il faut te dire que pour avoir eu de l'inspiration, quoique non "matériel_lement" suffisante, d'autant plus que je ne suis pas programmeur, ça m'a coûté quelques maux de tête et de la transpiration.
Toutefois, j'ai fini par "catcher" (comprendre), avoir de l'inspiration, et faisant ce que tu m'as dit, les résultats ont été les mêmes sur les deux (2) systèmes réseaux indépendants, équipés de:
Windows 2000 Professionnel et Office XP (licencié)

Dans Visual Basic Editor: Fenêtre Microsoft Visual Basic
"Le contrôle n'a pas été créé parce qu'il n'est pas correctement licencié."
Et ce en cliquant sur l'aide, la fenêtre de l'aide reste vide, également sur les deux (2) réseaux indépendants.

Bien que relativement néophyte en VBA, pour le plaisir, j'ai certes apprécié et admiré tes qualités d'expert en la matière et je t'en suis reconnaissant. La solution est là pour ceux qui ont un contrôle Microsoft Winsoc control 6.0 "correctement licencié".
Merci énormément PAT !!! Au revoir, Charles.
3
pjcleder Messages postés 183 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 16 septembre 2011 11
28 nov. 2004 à 17:51
PAT

Il faut que tu utilises des API Windows.
Exemple pour récupérer le nom de l'ordinateur:
Dans un module de classe, dans l'éditeur VB, copie celà :

Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Ensuite tu peux récuperer le nom de l'ordinateur comme çà :

Dim StrMachine as string
Dim nLong as Long

strMachine = Space$(256)
n = GetComputerName(strMachine, Len(strMachine))

strMachine contient le nom de la Machine.
0
pjcleder Messages postés 183 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 16 septembre 2011 11
28 nov. 2004 à 17:52
PAT

Rectification :

La déclaration doit se faire dans un module standard.
Excuse-moi.
0
go4t Messages postés 7 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 2 décembre 2004
29 nov. 2004 à 01:39
PAT
Merci bien pour le conseil. Cependant, étant donné que je ne suis pas un fûté de la pgm, ça ne marche pas. Mais voici ce que j'ai tenté de faire:
Module ordinaire, puis de classe sous Visual Basic Editor.
Puis, sous Microsoft Srcipt Editor, Objets événements clients: Window et On load. C'est encore négatif étant donné probablement mes connaissances limitées.

Enfin, j'ai mis le tout dans un Workbook Open car si les données, nom du poste et numéro IP de l'ordinateur ne correspondent pas, le fichier ne doit pas s'ouvrir.

Je tente de récupérer ces données, par exemple dans un fichier Excel. Voici donc la programmation que j'ai fait mais qui ne marche pas: (Merci bien encore une fois PAT) Go4t, Charles.

Private Sub Workbook_Open()

Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Dim StrMachine As String
Dim nLong As Long

StrMachine = Space$(256)
n = GetComputerName(StrMachine, Len(StrMachine))

End Function

'Pour écrire les valeurs si récupérées dans la variable plg _
ayant une référence de cellule à un nom défini comme Nom01 _
en fait, ici dans ce chiffrier, c'est à la cellule B5

Dim plg As Range

Set plg = ActiveWorkbook.ActiveSheet.Range("Nom01")

'Pour positionner le curseur au nom défini dans le _
chiffrier comme étant: Nom01
Application.Goto Reference:="Nom01"

'Pour tenter de récupérer la valeur de n dans la variable plg
plg = n

'Pour écrire la valeur de plg dans la cellule du nom de Nom01

With plg

'Changer la police de caractèes de la cellule courante

With .Font
.Name = "Arial"
.Size = 10
End With

End With

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pjcleder Messages postés 183 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 16 septembre 2011 11
29 nov. 2004 à 08:19
PAT

Tu mets UNIQUEMENT le declare dans le module standard.

La suite, tu la mets là où tu veux récupérer le nom de la machine.
0
go4t Messages postés 7 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 2 décembre 2004
30 nov. 2004 à 22:06
ReBonjour PAT,
Merci bien PAT, c'est un pas dans la bonne direction. En effet, j'ai réussi à obtenir le nom de la machine tel que désiré en mettant le declare dans un module standard et la suite dans un autre, tel que tu me l'as conseillé. J'ai utilisé le programme que je t'avais soumis pour récupérer les valeurs dans la feuille de calcul.

Ayant essayé sur deux (2) ordi. appartenant à des réseaux différents et indépendants, c'est parfait pour le nom de la machine StrMachine. Toutefois, quant à la valeur du n, le chiffre 1 un, est renvoyé dans tous les cas d'essais d'ordinateur pour l'adresse IP. Que faire PAT ? Pour récupérer l'adresse IP spécifique à l'ordinateur.

Merci bien encore une fois PAT et bravo !
0
pjcleder Messages postés 183 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 16 septembre 2011 11
1 déc. 2004 à 07:57
PAT

Voilà une piste pour l'IP.

Il faut récupérer le controle VB Winsock. Une fois que ce controle figure dans ton projet, Tu peux récupérer l'IP local de la machine.

Essaye un truc : Dans un projet standard VB.

Tu fais Projet ---> Composants --->Microsoft winsock control 6.0

Tu colles ce controle à ta form. tu y mets un label.

tu fais label1.caption = winsock1.localIP.

Ca va te donner de l'inspiration !
0
pjcleder Messages postés 183 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 16 septembre 2011 11
1 déc. 2004 à 08:03
PAT

Dans Excel, il faut une UserForm, et sur la boite à outils un clic droit pour sélectionner "Contrôles supplémentaires" et faire ce que je t'ai dit.

Il faut que tu saches aussi que TOUT ce que tu peux faires à la main sous Excel , tu peux l'écrires en VBA.
0
go4t Messages postés 7 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 2 décembre 2004
2 déc. 2004 à 20:39
ReBonjour PAT,
Il faut te dire que pour avoir eu de l'inspiration, quoique non "matériel_lement" suffisante, d'autant plus que je ne suis pas programmeur, ça m'a coûté quelques maux de tête et de la transpiration.
Toutefois, j'ai fini par "catcher" (comprendre), avoir de l'inspiration, et faisant ce que tu m'as dit, les résultats ont été les mêmes sur les deux (2) systèmes réseaux indépendants, équipés de:
Windows 2000 Professionnel et Office XP (licencié)

Dans Visual Basic Editor: Fenêtre Microsoft Visual Basic
"Le contrôle n'a pas été créé parce qu'il n'est pas correctement licencié."
Et ce en cliquant sur l'aide, la fenêtre de l'aide reste vide, également sur les deux (2) réseaux indépendants.

Bien que relativement néophyte en VBA, pour le plaisir, j'ai certes apprécié et admiré tes qualités d'expert en la matière et je t'en suis reconnaissant. La solution est là pour ceux qui ont un contrôle Microsoft Winsoc control 6.0 "correctement licencié".
Merci énormément PAT !!! Au revoir, Charles.
0
Rejoignez-nous