XL 2021 Combiner plusieurs macros en 1 seule fonction

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous,

Je me suis un peu amusé, parce que souvent on nous demande quel version d'excel ou windows on a et l'architecture,
J'ai plusieurs macros du coup, mais je voudrais savoir s'il serait possible de les cumuler en 1 seule fonction ou simplifier.

mes macros:

VB:
Option Explicit

' Fonction pour récupérer les informations du processeur
Sub GetProcessorInfo()
    Dim objWMI As Object
    Dim objProcessor As Object
    Dim colProcessors As Object
    Dim objProcess As Object
    Dim colProcess As Object
    Dim objWMIService As Object
 
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colProcess = objWMIService.ExecQuery("SELECT Name, CurrentClockSpeed, NumberOfCores FROM Win32_Processor")
 
    Debug.Print "=== Informations du processeur ==="
    For Each objProcess In colProcess
        Debug.Print "Nom du processeur: " & objProcess.Name
        Debug.Print "Vitesse actuelle (MHz): " & objProcess.CurrentClockSpeed
        Debug.Print "Nombre de cœurs: " & objProcess.NumberOfCores
        Debug.Print "-------------------------------"
        Debug.Print ""
    Next objProcess
End Sub

' Fonction pour récupérer la quantité de mémoire RAM
Sub GetRAMInfo()
    Dim objWMIService As Object
    Dim objWMI As Object
    Dim totalMemory As Double
    Dim colMem As Object
    Dim objMem As Object
 
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colMem = objWMIService.ExecQuery("SELECT TotalVisibleMemorySize, FreePhysicalMemory FROM Win32_OperatingSystem")

    Debug.Print "=== Informations de mémoire (Ram) ==="
    For Each objMem In colMem
        Dim totalMemoryGo As Double
        Dim freeMemoryGo As Double
 
        totalMemoryGo = Application.WorksheetFunction.Ceiling(objMem.TotalVisibleMemorySize / 1048576, 1)
        freeMemoryGo = Application.WorksheetFunction.Ceiling(objMem.FreePhysicalMemory / 1048576, 1)
 
        Debug.Print "Mémoire totale (Go): " & totalMemoryGo
        Debug.Print "Mémoire libre (Go): " & freeMemoryGo
        Debug.Print "-------------------------------"
        Debug.Print ""
    Next objMem
End Sub

' Fonction pour récupérer les informations de la carte graphique
Sub GetGraphicsCardInfo()
    Dim objWMI As Object
    Dim objItems As Object
    Dim objItem As Object
    Dim strComputer As String
    Dim memory As Variant
 
    strComputer = "."
    Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objItems = objWMI.ExecQuery("SELECT * FROM Win32_VideoController")
 
    For Each objItem In objItems
    Debug.Print "=== Informations de la carte graphique ==="
        Debug.Print "Nom de la carte graphique : " & objItem.Name
        memory = objItem.AdapterRAM
        If IsNumeric(memory) And memory > 0 Then
            Debug.Print "Mémoire vidéo : " & memory / 1024 / 1024 & " Mo"  ' Convertir en Mo
        Else
            Debug.Print "Mémoire vidéo : Information non disponible"
        End If
    Next objItem
        Debug.Print "-------------------------------"
    Debug.Print ""
 
    Set objItems = Nothing
    Set objWMI = Nothing
End Sub

' Fonction pour récupérer la version de Windows et son architecture
Sub GetWindowsInfo()
    Dim wmi As Object
    Dim os As Object
    Dim strComputer As String
    Dim Architecture As String
    Dim version As String
 
    strComputer = "."
    Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set os = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem").ItemIndex(0)
    version = os.Caption
 
    If Len(Environ("ProgramFiles(x86)")) > 0 Then
        Architecture = "64 bits"
    Else
        Architecture = "32 bits"
    End If
 
    Debug.Print "=== Version windows ==="
    Debug.Print "Version : " & version
    Debug.Print "Architecture : " & Architecture
    Debug.Print "-------------------------------"
    Debug.Print ""

    Set os = Nothing
    Set wmi = Nothing
End Sub

' Fonction pour récupérer la version d'Excel et son architecture
Sub GetExcelInfo()
    Dim versionExcel As String
    Dim versionVBA As String
    Dim versionAnnee As String
    Dim Architecture As String
    Dim buildExcel As String
    Dim versionWindows As String
 
    versionExcel = Application.version
    versionVBA = Application.VBE.version
    buildExcel = Application.Build

    Select Case versionExcel
        Case "16.0"
            versionAnnee = "Excel 2016, 2019 ou Office 365"
        Case "15.0"
            versionAnnee = "Excel 2013"
        Case "14.0"
            versionAnnee = "Excel 2010"
        Case "12.0"
            versionAnnee = "Excel 2007"
        Case "11.0"
            versionAnnee = "Excel 2003"
        Case Else
            versionAnnee = "Version inconnue ou non prise en charge"
    End Select

    #If Win64 Then
        Architecture = "64 bits"
    #Else
        Architecture = "32 bits"
    #End If

    versionWindows = Environ("OS") & " " & Environ("PROCESSOR_ARCHITECTURE") & _
                     " " & Environ("OSVERSION")

    Debug.Print "=== Version excel & VBA ==="
    Debug.Print versionAnnee
    Debug.Print "Version : " & versionExcel & " (Build " & buildExcel & ")"
    Debug.Print "Architecture : " & Architecture
    Debug.Print "Version de VBA : " & versionVBA
    Debug.Print "-------------------------------"
    Debug.Print ""
End Sub

' Fonction pour obtenir l'état des disques durs
Sub GetDiskInfo()
    Dim objWMI As Object
    Dim objDisk As Object
    Dim colDisks As Object
    Dim i As Integer
 
    Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
    Set colDisks = objWMI.ExecQuery("Select * from Win32_LogicalDisk")
 
    i = 1
    For Each objDisk In colDisks
        Debug.Print "=== Informations du disque(N°" & i & ") " & objDisk.DeviceID '& " ==="
        Debug.Print "Type: " & objDisk.description
        Debug.Print "Espace libre (en Go): " & Format(objDisk.FreeSpace / 1024 ^ 3, "0.00")
        Debug.Print "Espace total (en Go): " & Format(objDisk.Size / 1024 ^ 3, "0.00")
        Debug.Print "-------------------------------"
        Debug.Print ""
    i = i + 1
    Next
End Sub

La macro d'appel:

Code:
Sub ShowSystemInfo()
    GetWindowsInfo
    GetProcessorInfo
    GetGraphicsCardInfo
    GetRAMInfo
    GetExcelInfo
    GetDiskInfo
End Sub

Le résultat:

Code:
=== Version windows ===
Version : Microsoft Windows 10 Professionnel
Architecture : 64 bits
-------------------------------

=== Informations du processeur ===
Nom du processeur: Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz
Vitesse actuelle (MHz): 2904
Nombre de cœurs: 6
-------------------------------

=== Informations de la carte graphique ===
Nom de la carte graphique : NVIDIA GeForce RTX 3070
Mémoire vidéo : Information non disponible
-------------------------------

=== Informations de mémoire ===
Mémoire totale (Go): 32
Mémoire libre (Go): 21
-------------------------------

=== Version excel & VBA ===
Excel 2016, 2019 ou Office 365
Version : 16.0 (Build 16327)
Architecture : 32 bits
Version de VBA : 7.01
-------------------------------

=== Informations du disque(N°1) C:
Type: Disque monté local
Espace libre (en Go): 468,63
Espace total (en Go): 930,91
-------------------------------

=== Informations du disque(N°2) D:
Type: Disque monté local
Espace libre (en Go): 220,17
Espace total (en Go): 465,76
-------------------------------

=== Informations du disque(N°3) E:
Type: Disque monté local
Espace libre (en Go): 318,42
Espace total (en Go): 931,51
-------------------------------

=== Informations du disque(N°4) F:
Type: Disque monté local
Espace libre (en Go): 734,11
Espace total (en Go): 931,51
-------------------------------

=== Informations du disque(N°5) I:
Type: Disque amovible
Espace libre (en Go):
Espace total (en Go):
-------------------------------

=== Informations du disque(N°6) K:
Type: Disque monté local
Espace libre (en Go): 884,38
Espace total (en Go): 931,51
-------------------------------

J'en profite au passage pour dire à Patrick que je salut, s'il passe par là, qu'il y a un petit soucis avec son indenter à ce niveau là

Capture d’écran 2024-10-28 145840.jpg



Merci à tous
Nicolas
 

Pièces jointes

  • InfoPC.xlsm
    35.2 KB · Affichages: 2
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tous deux,
Et merci pour le fil.
J'aimerais revenir sur ça :
Microsoft écrit des âneries, alors on écrit les mêmes âneries pour ne pas déranger le vulgum pecus...
En aucun cas Microsoft ne dit d'ânerie.
En fait dès le départ et pour être plus simple à exprimer, on a décidé que 1024 octets faisait 1ko.
( 1024 car le plus proche de l'unité habituelle, ce qui était très simple à comprendre lorsqu'on se parlait entre nous pour exprimer de grandes valeurs )
Donc 1Go n'est pas 10^9 octets mais bien 1024^3 octets.
Cependant les nouvelles normes assimilent les deux types, pour des raisons obscures.
Cependant en informatique ou électronique c'est bien le système binaire qui persiste.
Par exemple une célèbre mémoire 2732 de chez Intel est une 4Ko, et la description est :

1730371966556.png
 

Pièces jointes

  • Intel 2732.pdf
    183.1 KB · Affichages: 2

TooFatBoy

XLDnaute Barbatruc
En aucun cas Microsoft ne dit d'ânerie.
En réalité Microsoft se trompe bien sur la taille des volumes. 😕

Nico n'a pas répondu sur la taille de son SSD, mais je suppose que WD dit qu'il fait 1 To et non 930 Go comme le dit Microsoft.


En fait dès le départ et pour être plus simple à exprimer, on a décidé que 1024 octets faisait 1ko.
Oui, tu as raison, au départ on faisait comme ça.
Mais ça a été normalisé il y a un peu plus de 25 ans et on ne procède plus ainsi. Maintenant tous les "kilo" de la Terre font 1000, même en informatique. 😉

Je dois avoir un classeur qui explique cela, avec un tableau de conversion.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Par exemple une célèbre mémoire 2732 de chez Intel est une 4Ko
Microsoft écrit déjà une belle ânerie avec ces capacités de volumes de stockage, mais chez Intel ils font encore plus fort : ils ne mettent carrément pas d'unité de mesure ! 🤣

Leur EPROM fait "32K".
Soit.
Mais 32768 quoi ? bits, octets, choux-fleurs ?

Ce n'est qu'en lisant la description qu'on peut savoir que ce sont des bits... 🙄
 

TooFatBoy

XLDnaute Barbatruc
je vous invite à lire cet article qui fait le point sur ce problème.
Merci pour ton lien. 👍
(il comporte aussi une petite erreur : un byte n'est pas un octet, en français c'est un mot)

Comme j'ai dit plus haut, je dois avoir un classeur qui explique cela.
Si ça intéresse quelqu'un, et si je le retrouve, je le posterais quand j'aurais allumé mon PC.
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Juste pour clore la polémique :) , la réponse tout en finesse d' Aria (IA ) :
VB:
1 Ko (kilo-octet) est une unité de mesure de la taille des fichiers et de la mémoire.
Voici quelques points clés à propos de cette unité :
1 Ko est équivalent à 1 024 octets (en utilisant le système binaire).
Dans le système décimal, 1 Ko est souvent approximé à 1 000 octets,
mais cette approximation est moins courante dans le domaine informatique.
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Re tout le monde,

En fin de compte je suis revenu à ma version précédente avec le système binaire,
celui qui souhaite faire avec le fichier posé précédemment c'est comme vous voulez.

Du coup j'en ai profité pour mettre une gestion d'erreur pour les info VBA et rajouter la taille de l'écran ou des.

Capture d’écran 2024-10-31 165818.jpg


Merci à tous pour vos retours
Nico
 

Pièces jointes

  • InfoPC_V2.xlsm
    70.5 KB · Affichages: 1

TooFatBoy

XLDnaute Barbatruc
La version corrigée et rectifiée, dites-moi ce que vous en pensez.

Si vous voyez des choses à reprendre, je suis à l'écoute
Je viens enfin de regarder ton fichier de #45.


Il y a toujours l'erreur au niveau des unités avec la méthode binaire puisque tu n'as pas ajouté le "i" comme je t'ai expliqué en MP. ;)

En décimal, la taille de la partition est bonne, l'espace libre est bon, mais l'espace total est faux.

Il y a un problème qu'il n'y avait pas sur les versions précédentes : mes volumes physiques sont nommés avec la lettre de la première partition. :(
 

TooFatBoy

XLDnaute Barbatruc
En fin de compte je suis revenu à ma version précédente avec le système binaire,
Je viens de tester : good job. 👍

- Il reste toujours le problème des unités de mesure (ou plus exactement des préfixes).
- Il y a toujours l'espace total qui fait doublon avec la taille de la partition.
- Il y a aussi le problème introduit avec la version de #45 au niveau de la dénomination des partitions.
- La gestion de l'erreur est parfaite ! 🤩
- La nouvelle fonctionnalité marche parfaitement ! Elle voit bien mon moniteur et sa définition. 😅
 

Jacky67

XLDnaute Barbatruc
Bonjour à tous,

Je me suis un peu amusé, parce que souvent on nous demande quel version d'excel ou windows on a et l'architecture,
J'ai plusieurs macros du coup, mais je voudrais savoir s'il serait possible de les cumuler en 1 seule fonction ou simplifier.

mes macros:

VB:
Option Explicit

' Fonction pour récupérer les informations du processeur
Sub GetProcessorInfo()
    Dim objWMI As Object
    Dim objProcessor As Object
    Dim colProcessors As Object
    Dim objProcess As Object
    Dim colProcess As Object
    Dim objWMIService As Object
 
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colProcess = objWMIService.ExecQuery("SELECT Name, CurrentClockSpeed, NumberOfCores FROM Win32_Processor")
 
    Debug.Print "=== Informations du processeur ==="
    For Each objProcess In colProcess
        Debug.Print "Nom du processeur: " & objProcess.Name
        Debug.Print "Vitesse actuelle (MHz): " & objProcess.CurrentClockSpeed
        Debug.Print "Nombre de cœurs: " & objProcess.NumberOfCores
        Debug.Print "-------------------------------"
        Debug.Print ""
    Next objProcess
End Sub

' Fonction pour récupérer la quantité de mémoire RAM
Sub GetRAMInfo()
    Dim objWMIService As Object
    Dim objWMI As Object
    Dim totalMemory As Double
    Dim colMem As Object
    Dim objMem As Object
 
    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colMem = objWMIService.ExecQuery("SELECT TotalVisibleMemorySize, FreePhysicalMemory FROM Win32_OperatingSystem")

    Debug.Print "=== Informations de mémoire (Ram) ==="
    For Each objMem In colMem
        Dim totalMemoryGo As Double
        Dim freeMemoryGo As Double
 
        totalMemoryGo = Application.WorksheetFunction.Ceiling(objMem.TotalVisibleMemorySize / 1048576, 1)
        freeMemoryGo = Application.WorksheetFunction.Ceiling(objMem.FreePhysicalMemory / 1048576, 1)
 
        Debug.Print "Mémoire totale (Go): " & totalMemoryGo
        Debug.Print "Mémoire libre (Go): " & freeMemoryGo
        Debug.Print "-------------------------------"
        Debug.Print ""
    Next objMem
End Sub

' Fonction pour récupérer les informations de la carte graphique
Sub GetGraphicsCardInfo()
    Dim objWMI As Object
    Dim objItems As Object
    Dim objItem As Object
    Dim strComputer As String
    Dim memory As Variant
 
    strComputer = "."
    Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objItems = objWMI.ExecQuery("SELECT * FROM Win32_VideoController")
 
    For Each objItem In objItems
    Debug.Print "=== Informations de la carte graphique ==="
        Debug.Print "Nom de la carte graphique : " & objItem.Name
        memory = objItem.AdapterRAM
        If IsNumeric(memory) And memory > 0 Then
            Debug.Print "Mémoire vidéo : " & memory / 1024 / 1024 & " Mo"  ' Convertir en Mo
        Else
            Debug.Print "Mémoire vidéo : Information non disponible"
        End If
    Next objItem
        Debug.Print "-------------------------------"
    Debug.Print ""
 
    Set objItems = Nothing
    Set objWMI = Nothing
End Sub

' Fonction pour récupérer la version de Windows et son architecture
Sub GetWindowsInfo()
    Dim wmi As Object
    Dim os As Object
    Dim strComputer As String
    Dim Architecture As String
    Dim version As String
 
    strComputer = "."
    Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set os = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem").ItemIndex(0)
    version = os.Caption
 
    If Len(Environ("ProgramFiles(x86)")) > 0 Then
        Architecture = "64 bits"
    Else
        Architecture = "32 bits"
    End If
 
    Debug.Print "=== Version windows ==="
    Debug.Print "Version : " & version
    Debug.Print "Architecture : " & Architecture
    Debug.Print "-------------------------------"
    Debug.Print ""

    Set os = Nothing
    Set wmi = Nothing
End Sub

' Fonction pour récupérer la version d'Excel et son architecture
Sub GetExcelInfo()
    Dim versionExcel As String
    Dim versionVBA As String
    Dim versionAnnee As String
    Dim Architecture As String
    Dim buildExcel As String
    Dim versionWindows As String
 
    versionExcel = Application.version
    versionVBA = Application.VBE.version
    buildExcel = Application.Build

    Select Case versionExcel
        Case "16.0"
            versionAnnee = "Excel 2016, 2019 ou Office 365"
        Case "15.0"
            versionAnnee = "Excel 2013"
        Case "14.0"
            versionAnnee = "Excel 2010"
        Case "12.0"
            versionAnnee = "Excel 2007"
        Case "11.0"
            versionAnnee = "Excel 2003"
        Case Else
            versionAnnee = "Version inconnue ou non prise en charge"
    End Select

    #If Win64 Then
        Architecture = "64 bits"
    #Else
        Architecture = "32 bits"
    #End If

    versionWindows = Environ("OS") & " " & Environ("PROCESSOR_ARCHITECTURE") & _
                     " " & Environ("OSVERSION")

    Debug.Print "=== Version excel & VBA ==="
    Debug.Print versionAnnee
    Debug.Print "Version : " & versionExcel & " (Build " & buildExcel & ")"
    Debug.Print "Architecture : " & Architecture
    Debug.Print "Version de VBA : " & versionVBA
    Debug.Print "-------------------------------"
    Debug.Print ""
End Sub

' Fonction pour obtenir l'état des disques durs
Sub GetDiskInfo()
    Dim objWMI As Object
    Dim objDisk As Object
    Dim colDisks As Object
    Dim i As Integer
 
    Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
    Set colDisks = objWMI.ExecQuery("Select * from Win32_LogicalDisk")
 
    i = 1
    For Each objDisk In colDisks
        Debug.Print "=== Informations du disque(N°" & i & ") " & objDisk.DeviceID '& " ==="
        Debug.Print "Type: " & objDisk.description
        Debug.Print "Espace libre (en Go): " & Format(objDisk.FreeSpace / 1024 ^ 3, "0.00")
        Debug.Print "Espace total (en Go): " & Format(objDisk.Size / 1024 ^ 3, "0.00")
        Debug.Print "-------------------------------"
        Debug.Print ""
    i = i + 1
    Next
End Sub

La macro d'appel:

Code:
Sub ShowSystemInfo()
    GetWindowsInfo
    GetProcessorInfo
    GetGraphicsCardInfo
    GetRAMInfo
    GetExcelInfo
    GetDiskInfo
End Sub

Le résultat:

Code:
=== Version windows ===
Version : Microsoft Windows 10 Professionnel
Architecture : 64 bits
-------------------------------

=== Informations du processeur ===
Nom du processeur: Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz
Vitesse actuelle (MHz): 2904
Nombre de cœurs: 6
-------------------------------

=== Informations de la carte graphique ===
Nom de la carte graphique : NVIDIA GeForce RTX 3070
Mémoire vidéo : Information non disponible
-------------------------------

=== Informations de mémoire ===
Mémoire totale (Go): 32
Mémoire libre (Go): 21
-------------------------------

=== Version excel & VBA ===
Excel 2016, 2019 ou Office 365
Version : 16.0 (Build 16327)
Architecture : 32 bits
Version de VBA : 7.01
-------------------------------

=== Informations du disque(N°1) C:
Type: Disque monté local
Espace libre (en Go): 468,63
Espace total (en Go): 930,91
-------------------------------

=== Informations du disque(N°2) D:
Type: Disque monté local
Espace libre (en Go): 220,17
Espace total (en Go): 465,76
-------------------------------

=== Informations du disque(N°3) E:
Type: Disque monté local
Espace libre (en Go): 318,42
Espace total (en Go): 931,51
-------------------------------

=== Informations du disque(N°4) F:
Type: Disque monté local
Espace libre (en Go): 734,11
Espace total (en Go): 931,51
-------------------------------

=== Informations du disque(N°5) I:
Type: Disque amovible
Espace libre (en Go):
Espace total (en Go):
-------------------------------

=== Informations du disque(N°6) K:
Type: Disque monté local
Espace libre (en Go): 884,38
Espace total (en Go): 931,51
-------------------------------

J'en profite au passage pour dire à Patrick que je salut, s'il passe par là, qu'il y a un petit soucis avec son indenter à ce niveau là

Regarde la pièce jointe 1206040


Merci à tous
Nicolas
Bonjour à tous
Perso j'utilise "Speecy" qui donne pas mal d'information sur le pc
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous
Perso j'utilise "Speecy" qui donne pas mal d'information sur le pc

Bonjour Jacky67,

Oui, je connais ce genre d'application gratuite ou payante,
le but pour moi était juste de faire une petite appli gratuite avec ce qui est le plus fréquemment demandé sur le forum, principalement la version excel et son architecture et la version windows et son architecture.

Après, j'ai poussé un peu sur des compléments, aussi les résolutions écrans qui apparaissent souvent sur les positions userform etcs ....

Mais le but était juste de sélectionner ce qu'on te demande et tu n'as plus qu'à coller le résultat sans te prendre la tête.

Nico
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 450
Messages
2 109 731
Membres
110 553
dernier inscrit
loic55