Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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à




Merci à tous
Nicolas
 

Pièces jointes

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

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
j'esserai de voir sur mon pc portable demain mais quand tu n'as pas le souci c'est pas évident de trouver une solution

essai ça pour voir:

  • Dans Excel, allez dans Fichier > Options.
  • Sélectionnez Centre de gestion de la confidentialité > Paramètres du Centre de gestion de la confidentialité.
  • Dans le Centre de gestion de la confidentialité, allez dans Paramètres des macros.
  • Cochez l'option Faire confiance à l'accès au modèle d'objet du projet VBA.
 

TooFatBoy

XLDnaute Barbatruc
Effectivement, en cochant son équivalent pour ma version d'Excel je n'ai plus le message d'erreur.

Mais vu que c'est une option de sécurité et que je ne comprends pas sa portée, je l'ai de nouveau décochée.
 

TooFatBoy

XLDnaute Barbatruc
Il y a toujours le pb des unités, et à cela s'est ajouté un truc bizarre concernant le bouton dans la feuille : après l'exécution de la macro, Excel ne revient pas en mode normal, c'est comme si le bouton restait "actif" (les menus de l'onglet "Accueil" du Ruban restent grisés).
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Excel ne revient pas en mode normal, c'est comme si le bouton restait "actif" (les menus de l'onglet "Accueil" du Ruban restent grisés).
C'est le copié qui fait ça, suffit de cliqué sur n'importe quel cellule et ça revient en normal.

Il y a toujours le pb des unités
J'ai du mal à comprendre ce que tu veux dire sur les unitées
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Suffit de rajouter un select à la fin et plus de grisée

VB:
Sub InfosPC()
    Dim Tablo, Taille%, i, Tablo2, Ligne%, Num%
    Dim DerniereLigne As Long
    
    Chaine = ""
    
    With ActiveSheet
    If .CheckBox1.Value = True Then GetWindowsInfo
    If .CheckBox2.Value = True Then GetProcessorInfo
    If .CheckBox3.Value = True Then GetRAMInfo
    If .CheckBox4.Value = True Then GetGraphicsCardInfo
    If .CheckBox5.Value = True Then GetExcelInfo
    If .CheckBox6.Value = True Then GetDiskInfo
    End With

    [A2:B1000].Clear
    
    Application.ScreenUpdating = False

    Tablo = Split(Chaine, Chr(10))
    For i = 1 To UBound(Tablo)
        Tablo2 = Split(Tablo(i), ":")
            Range("A" & i + 1) = " " & Tablo2(0)
            
            If Left(Tablo2(0), 14) = "Informations d" Then Range("A" & i + 1).Font.Bold = True
            If Left(Tablo2(0), 9) = "Version w" Then Range("A" & i + 1).Font.Bold = True
            If Left(Tablo2(0), 9) = "Version e" Then Range("A" & i + 1).Font.Bold = True
            
            On Error Resume Next
            Range("B" & i + 1) = " " & Trim(Tablo2(1))
    Next i
    Columns("A:B").EntireColumn.AutoFit
    Columns("A:B").HorizontalAlignment = xlLeft

    Application.CutCopyMode = False
    DerniereLigne = Cells(Rows.Count, "A").End(xlUp).Row
    Range("A1:B" & DerniereLigne).Copy
    Range("A1").Select
    
    Application.ScreenUpdating = True
End Sub
 

TooFatBoy

XLDnaute Barbatruc
J'ai du mal à comprendre ce que tu veux dire sur les unitées
Je te l'ai pourtant expliqué en #7, mais tu as dû lire entre les lignes.
Si tu veux donner certaines capacités en gigaoctets, il faut diviser par un milliard.



Et si on veut chipoter un peu plus, la dénomination de "disque" est fausse. Ce serait plutôt des partitions ou des volumes logiques, me semble-t-il.
 
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
C'est la même chose que #24. Nan ?

Tu lies entre les lignes toi aussi

Je suppose que les unités ne sont toujours pas bonnes, mais ce n'est pas grave, je corrigerais dans la version que je garderais.

Je vais m'en occuper, j'ai compris, enfin je pense

Rem. : les lignes "État d'espace" et "Espace total" ne sont pas utiles.

Je trouvais que ça faisait une séparation pour être plus compréhensible, je c'est pas.

Je fignole tout ça et j'envois le code
Je vais revoir d'autres petit truc aussi
 

TooFatBoy

XLDnaute Barbatruc
on joue au jeu des 7 erreurs ???
Y en a pas 7 mais bon
Il n'y en a peut-être pas 7, mais en tout cas j'espère que ce ne sont pas vraiment des erreurs...

À part l'espace libre qui a changé, c'est la même chose.



L'espace total, c'est l'espace total de quoi ???
Si c'est de la partition, alors la ligne est inutile car elle fait doublon.
Si c'est celui du volume physique, alors je pense que le résultat est faux.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…