64 bit ne peut être que le nombre de bits du système d'exploitation de ton ordinateur et non de la version Office vu que la version 64 bit d'Office n'est disponible que depuis 2010.Écran non tactile HP avec Excel 2007 - 64Bits
, je pense que là encore tu me fournis le nombre de bits du système d'exploitation de ton ordinateur et non de la version Office installée sur ton ordinateur.Portable Acer avec Excel 2010 64Bits.
, c'est que la version 2010 d'Office installée sur ton ordinateur est celle en 32 bits (celles installée "par défaut" lors de l'installation), et non la version 64 bits."Le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits.
Vérifiez et mettez à jour les instruction Declare, puis marquez-les avec l'attribut PtrSafe."
Private Sub UserForm_Initialize()
Dim objWMIService, objOS, colOSes, ObjC
Dim StrResults$, TotRam&
Application.ScreenUpdating = False
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
Set colProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")
Set colSettings = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
On Error Resume Next
For Each objProcessor In colProcessors
For Each objOS In colOSes
For Each ObjC In colSettings
TotRam = Round(((ObjC.TotalVisibleMemorySize / 1024) / 1024), 0)
StrResults = StrResults & " Nom de l'ordinateur : " & objOS.CSName & vbCrLf & vbCrLf
StrResults = StrResults & " Edition : " & objOS.Caption & vbCrLf & vbCrLf
StrResults = StrResults & " Copyright " & Chr(169) & " 2009 " & objOS.Manufacturer & "." & " Tous droits réservés." & vbCrLf & vbCrLf
StrResults = StrResults & " Version : " & objOS.Version & vbCrLf & vbCrLf
StrResults = StrResults & " Processeur : " & objProcessor.Name & Chr(32) & " - " & objOS.OSArchitecture & vbCrLf & vbCrLf
StrResults = StrResults & " Mémoire (RAM) installée: " & TotRam & ".00" & " Go" & vbCrLf & vbCrLf
StrResults = StrResults & " Service Pack : " & " Service Pack " & objOS.ServicePackMajorVersion
Next
Next
Next
Me.Lb_WMI.Caption = StrResults
Application.ScreenUpdating = False
End Sub
Je n'est pas testé ton code et je ne connaissais pas WMI avant l'ouverture de ce fil (je remercie d'ailleurs staple pour les liens qui mon faits découvrir WMI) donc je ne sais pas si je pourrai t'aider.ces lignes: Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") et TotRam = Round(((ObjC.TotalVisibleMemorySize / 1024) / 1024), 0) sont erronées, puisque j'utilise du 32bits.
Ou c'est tout le code qui est faux??
Sub RAM()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer In colSettings
MsgBox "Total Physical Memory: " & _
objComputer.TotalPhysicalMemory & " octets"
Next
End Sub
Sub RAM()
Dim TotRam&
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer In colSettings
TotRam = Round((((objComputer.TotalPhysicalMemory / 1024) / 1024) / 1000), 0)
MsgBox "Total Physical Memory: " & TotRam & " Go"
Next
End Sub
réponse : 6 Go.Qu'est-ce que ça donne en 64bits?
Le fichier fonctionne sans plantage avec mon 2003.
Comme tu m'as dit qu'il fonctionnait chez toi avec 2010 en 64Bits; tout est parfait.
A+Donc, en utilisant la constante VBA7 pour régler le problème de compatibilité entre les versions 2010 64 bits et les versions Office antérieures, ta déclaration des API donnerait :
Code :
#If VBA7 Then
Declare PtrSafe Function GetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare PtrSafe Function SetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare PtrSafe Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare PtrSafe Function DrawMenuBar Lib "User32" (ByVal hWnd As Long) As Long
#Else
Declare Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
#End If
Chez moi cela fonctionne.
A toi de faire de même pour l'autre API placée dans RECHERCHE_OS et de compléter si nécessaire avec la constante Win64.
Option Explicit
Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
Declare Function GetComputerName& Lib "kernel32" Alias "GetComputerNameA" (ByVal lbbuffer As String, nSize As Long)
Function GetRamSize() As String
Dim RamStats As MEMORYSTATUS
GlobalMemoryStatus RamStats
'pour compatibilité Excel 97
GetRamSize = Application.WorksheetFunction.Round(((RamStats.dwTotalPhys / 1024) / 1024) + 1, 0)
'sinon :
GetRamSize = Round((RamStats.dwTotalPhys / 1024) / 1024) + 1
End Function
Le code de départ est fait pour obtenir des Mégaoctets à partir du résultat initial ramené en octets, donc ok , mais comme tu voulais obtenir directement des Gigaoctets, je pense qu'il y a plus simple mais l'important est que cela fonctionne (et puis peut-être que j'ai tort...).Le code que tu m'a proposé m'affiche plus de 4 milliards d'octets. En incluant cette opération, on divise ceux-ci pour avoir des Go.
Par contre c'est vrai que le traitement est sûrement plus lent via WMI.WMI permet d'accéder aux ressources d'un ordinateur sous Windows, les configurer, les gérer et les interroger.
Ce qui sous entend la possibilité de gérer une machine, y faire exécuter un programme, arrêter un service, la rebooter ou l'arrêter, voir les ressources system, vous abonner à un événement et recevoir une alerte, interroger le service WMI d'une application (vous pouvez aussi écrire une application offrant un serveur WMI) etc.
Avec WMI vous accédez à tout ceci sans passer par les API, ainsi les développeurs n'ont pas besoin de connaître plusieurs API pour créer des applications puissantes ou interroger les composants de la machine hôte de leur application.
Combien de fois avez-vous vu sur les news group la question : " Comment connaître le numéro de série d'un disque dur " ?
De plus l'accès ne se limite pas à la machine où s'exécute le logiciel ou le script.
On peut aussi interroger un ordinateur situé sur le réseau ou tous les ordinateurs d'un même groupe de travail.
Pratique pour un administrateur réseau pour suivre son parc machine, le surveiller, recevoir des alertes, diagnostiquer, rebooter une machine distante ou même la stopper etc..
ReDim Temp(1 To Host.hLength)
et en modifiantFonctionne sous MSO 14 en 32 bits sauf la recherche de l'adresse IP. Debug sur :
ReDim Temp(1 To Host.hLength)
parDim Temp() As Byte
cela donne quoi ?Dim Temp() As Long