VBA: connaître la version d’Excel

Dans certains cas, il est nécessaire au bon fonctionnement de votre application/macro de connaître la version d'Excel dans laquelle elle est exécutée. Ceci peut servir pour déterminer les limites de lignes et colonnes disponibles ou encore la gestion des couleurs dans les Feuilles.

La fonction décrite ci-dessous va vous fournir cette information.

VersionExcel = Application.Version

 

Les différentes versions d'Excel

Comment interpréter le résultat? Le numéro que vous obtenez correspond à une version d'Excel (et donc de MS Office). Dans le tableau suivant, vous pouvez voir l'énumération de ces versions.

Version de MS Office (d'Excel)La valeur renvoyée par Application.Version
Office 977.0
Office 988.0
Office 20009.0
Office XP10.0
Office 200311.0
Office 200712.0
Office 201014.0
Office 201315.0
Office 201616.0
Office 201916.0 (!)
Office 36516.0 (!)
Remarque: comme vous pouvez le remarquer dans le tableau, la version "13.0" manque… Comme quoi, même les ingénieurs de Microsoft peuvent être superstitieux 🙂

Code VBA qui retourne l'intégrale de numéro de version

Function VersionExcel() As Integer
'par: Excel-Malin.com (https://excel-malin.com)
  VersionExcel = Replace(Application.Version, ".", Application.DecimalSeparator)
End Function

Remarque: attention au format retournée par la fonction (avec séparateur "."). Pour éviter des erreurs, mieux vaut remplacer ce "." par le séparateur de décimales – comme c'est le cas dans le code ci-dessus.

 

Code VBA pour afficher le nom de la version d'Excel dans un MessageBox

Sub VersionOfficeUtilisee()
'par: Excel-Malin.com (https://excel-malin.com)
NumeroVersionOffice = CStr(Application.Version)

Select Case NumeroVersionOffice
   Case "7.0": NomVersionOffice = "Office 97"
   Case "8.0": NomVersionOffice = "Office 98"
   Case "9.0": NomVersionOffice = "Office 2000"
   Case "10.0": NomVersionOffice = "Office XP"
   Case "11.0": NomVersionOffice = "Office 2003"
   Case "12.0": NomVersionOffice = "Office 2007"
   Case "14.0": NomVersionOffice = "Office 2010"
   Case "15.0": NomVersionOffice = "Office 2013"
   Case "16.0": NomVersionOffice = "Office 2016 / 2019 / 365"
   Case Else 
End Select

MsgBox "Vous utilisez " & NomVersionOffice & "."
End Sub

Comme vous pouvez le constater, cette fonction simple et utilisée depuis longtemps ne sait malheureusement pas distinguer les nouvelles version d'Excel (à partir de la version 2016). Si vous voulez pouvoir distinguer Excel 2016 de l'Excel 2019 et de l'Excel 365, vous devrez utiliser la fonction VBA qui suit…

Les versions modernes d'Excel: 2016, 2019 et 365

La fonction précédente donne le même résultat pour ces 3 différentes versions d'Excel (d'Office). Si vous voulez donc par exemple connaître si l'utilisateur dispose de la fonction Excel RECHERCHEX (disponible uniquement dans Excel 365), vous devrez utiliser une fonction VBA plus sophistiquée.

Je me suis permis de traduire la fonction Ken Puls (www.excelguru.ca) pour vous la proposer en français.

Cette fonction traite les anciennes versions d'Excel comme la fonction basique plus haut. Pour les nouvelles versions d'Excel, elle va vérifier les informations sur la licence Office dans les registres de Windows.

Function VersionExcel() As Long
'par Excel-Malin.com (
'basé sur la fonction de Ken Puls (www.excelguru.ca)

Dim ObjetRegistre As Object
Dim RepertoireRacine As String
Dim CheminCle As String
Dim ArrayNomsEntrees As Variant
Dim ArrayTypesValeurs As Variant
Dim i As Long

Select Case Val(Application.Version)

    Case Is = 16 'Office 2016 et plus
        'Vérifie la licence dans les registres
        CheminCle = "Software\Microsoft\Office\" & CStr(Application.Version) & "\Common\Licensing\LicensingNext"
        RepertoireRacine = "."
        Set ObjetRegistre = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & RepertoireRacine & "\root\default:StdRegProv")
        ObjetRegistre.EnumValues &H80000001, CheminCle, ArrayNomsEntrees, ArrayTypesValeurs
        
        On Error GoTo ErrorExit
        For i = 0 To UBound(ArrayNomsEntrees)
        If InStr(ArrayNomsEntrees(i), "365") > 0 Then
        VersionExcel = 365
        Exit Function
        End If
        If InStr(ArrayNomsEntrees(i), "2019") > 0 Then
        VersionExcel = 2019
        Exit Function
        End If
        Next i
    
    Case Is = 15
        VersionExcel = 2013
    Case Is = 14
        VersionExcel = 2010
    Case Is = 12
        VersionExcel = 2007
    Case Else
        'autres versions plus anciennes
        VersionExcel = 0
End Select

Exit Function

ErrorExit:
    'Version 16 mais pas de licence, c'est donc Excel 2016
    VersionExcel = 2016
End Function

Et voilà… Maintenant vous êtes sûrs de connaître à 100% la version d'Excel installée sur l'ordinateur où vous lancez ce code.

Pour aller plus loin en VBA

Et pour finir, quelques autres articles qui pourraient vous servir…

29 0

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée.

4 commentaires sur “VBA: connaître la version d’Excel”