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.
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 97 | 7.0 |
Office 98 | 8.0 |
Office 2000 | 9.0 |
Office XP | 10.0 |
Office 2003 | 11.0 |
Office 2007 | 12.0 |
Office 2010 | 14.0 |
Office 2013 | 15.0 |
Office 2016 | 16.0 |
Office 2019 | 16.0 (!) |
Office 365 | 16.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
1 2 3 4 |
Function VersionExcel() As Integer 'par: Excel-Malin.com (https://excel-malin.com) VersionExcel = Replace(Application.Version, ".", Application.DecimalSeparator) End Function |
Code VBA pour afficher le nom de la version d'Excel dans un MessageBox
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
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…
- Liste de toutes les fonctions disponibles en VBA
- Trouver la langue d'Excel avec VBA
- Manipulation basique des fichiers en VBA
- La bibliothèque des CODES SOURCES VBA
- Utiliser la fonction RECHERCHEV dans VBA
4 commentaires sur “VBA: trouver la version d’Excel”
Bojour,
Merci pour votre travail, je souhaiterais savoir comment copier le résultat de la MsgBox dans la cellule A1 de la feuille 1
Merci d'avance.
Cordialement.
Alain.
Bonjour Alain,
vous remplacez la ligne
MsgBox "Vous utilisez " & NomVersionOffice & "."
par
Sheets("Feuil1").Range("A1").Value = "Vous utilisez " & NomVersionOffice & "."
Bien à vous, Martin
Petit souci avec office 365 qui renvoie un numéro de version 16.0 comme office 2016. cependant l'implémentation xlookup, peut créer des problèmes sur office 2016.
Bonjour FRED,
tu as tout à fait raison.
Je suis déjà au courant de la solution (trouvée par Ken Puls) et qui passe par les registres pour vérifier si une licence de Office 365 existe.
Dès que j'ai un peu de temps, je vais la traduire et je la publierai ici.
Martin