XL 2021 Connaître la version utilisée d'excel

  • Initiateur de la discussion Initiateur de la discussion macseb
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

macseb

XLDnaute Nouveau
Salut tt le monde,

J'ai tenté de trouver un moyen de connaître la version d'excel qu'utilise l'utilisateur afin de savoir si il tourne sur 2016-2021-365... Pourquoi? car j'utilise dans mon code un formula pour intégrer dans des cellules la formule recherchex en remplacement de index. Et comme vous le savez cette formule n'est supporté que depuis excel 2021.
J'aurais ainsi aimé pouvoir faire la distinction de ces versions, malheureusement lorsqu'on on utilise la méthode version de l'objet appli. On obtient la version 16 je crois mais qui est identique au 3 versions d'excel. J'ai bien vu quelques pistes qui tentent de puiser l'information dans le registre mais c'est plutôt fastidieux et surtout loin d'être fiable...
Y a t'il vraiment aucun moyen de distinguer ces versions avec vba?

Merci d'avance pour votre intérêt.
 
Solution
Bonjour à tous
perso a la vue que certaines fonction de 2019 ne sont pas sur certaines builds de 2021
je ne pense pas que ce soit la version qu'il faille tester mais la fonction rechercheX (XlookUp)elle même

Dans le même esprit que @Bernard_XLD
mais je le fait avec evaluate (avec gestion d'erreur dans formule )pour ne pas charger le Stack d'erreur vba
ici je vais tester rechercheX ;
je cherche 1 dans un array contient que 1(en dur dans la formule "{ 1}" et qui renvoie 1 si il trouve ou 0 si erreur
si rechercheX est dispo il renverra 1 forcement sinon ben c'est false

on a ainsi un retour simple boolean (true ou false)sans gestion d'erreur vba
c'est fluide et facile à comprendre

VB:
Sub...
re
Bonjour @macseb
et pour finir j'insisterais sur un point que j'ai cité plus haut
vu que 2 même numéros de version n'auront pas les même dispos en terme de fonctions ,le mieux c'est de tester la fonction elle même au besoin
même si on serait tenté de faire un test global passe partout comme il t'a été présenté ici
Je trouve ta solution parfaite! Elle répond totalement à mon besoin, j'ai testé et je valide cette très bonne astuce!
je te remercie, je valide comme solution!
 
Bonjour à tous

Autrement, voici quelque chose que j'utilise.

connaissant la version, j'adapte mon programme en conséquence.

VB:
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
Salutation
Jean-Paul
 
Hello,
voici une version qui utilise le code de VIARD et mon code pour distinguer les versions office "16"
VB:
Dim NumeroVersionOffice
'par: Excel-Malin.com (https://excel-malin.com) et J.P
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 = VersionOffice16
   Case Else
End Select
MsgBox "Vous utilisez " & NomVersionOffice & "."
End Sub
Function VersionOffice16() As String
 On Error Resume Next
 Err.Clear
 Call Application.WorksheetFunction.DetectLanguage("sol") ' 365
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.StockHistory("EUR:USD", "01/07/2022", , 0, 0, 1) ' 2024
 Else
    VersionOffice16 = "Excel 365": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.Sequence(1) ' 2021
  Else
    VersionOffice16 = "Excel 2024": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.TextJoin("", False, "the start", " and the end") ' 2019
 Else
    VersionOffice16 = "Excel 2021": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.Forecast_Linear(3.2, 2, 3)  ' 2016
 Else
    VersionOffice16 = "Excel 2019": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    VersionOffice16 = "Version non reconnue"
 Else
    VersionOffice16 = "Excel 2016": Exit Function
 End If
End Function
Testé OK pour Excel 2021 et Excel 2019
à tester avec Excel 2016, Excel 2024, Excel 365
Ami calmant, J.P
 
Bonjour à tous,
Bon un peu tiré par les cheveux tout cela :
Hello,
voici une version qui utilise le code de VIARD et mon code pour distinguer les versions office "16"
VB:
Dim NumeroVersionOffice
'par: Excel-Malin.com (https://excel-malin.com) et J.P
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 = VersionOffice16
   Case Else
End Select
MsgBox "Vous utilisez " & NomVersionOffice & "."
End Sub
Function VersionOffice16() As String
 On Error Resume Next
 Err.Clear
 Call Application.WorksheetFunction.DetectLanguage("sol") ' 365
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.StockHistory("EUR:USD", "01/07/2022", , 0, 0, 1) ' 2024
 Else
    VersionOffice16 = "Excel 365": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.Sequence(1) ' 2021
  Else
    VersionOffice16 = "Excel 2024": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.TextJoin("", False, "the start", " and the end") ' 2019
 Else
    VersionOffice16 = "Excel 2021": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.Forecast_Linear(3.2, 2, 3)  ' 2016
 Else
    VersionOffice16 = "Excel 2019": Exit Function
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    VersionOffice16 = "Version non reconnue"
 Else
    VersionOffice16 = "Excel 2016": Exit Function
 End If
End Function
Testé OK pour Excel 2021 et Excel 2019
à tester avec Excel 2016, Excel 2024, Excel 365
Ami calmant, J.P
Cette version renvoie 2024 alors que je suis sous 365...
 
Bonjour à tous,
Bon un peu tiré par les cheveux tout cela :

Cette version renvoie 2024 alors que je suis sous 365...
Hello Valtrase,
à essayer avec :
VB:
Function VersionOffice16() As String
 On Error Resume Next
 Err.Clear
 Call Application.WorksheetFunction.REGEXEXTRACT("Mon numéro est le 25", "\d+") ' 365
Le DETECTLANGUAGE n'était pas dans toutes les versions 365.
 
Je pense que toutes ces solutions répondent plutôt assez bien à ce sujet c'est cool. Espérons tout de même que dans les futurs versions d'excel il ne fassent plus cette même bêtise. Il aurait pu distinguer plus précisément les versions, genre 16.1, 16.2... ça aurait été tellement plus simple 😀.
 
Hello,
bon ben j'ai peut-être trouvé un moyen plus direct pour savoir la version exacte d'un Office de type 16.0 : En passant par la base de registre.
Voici le code :
VB:
Sub VersionOfficeUtilisee()
Dim NumeroVersionOffice
'par: Excel-Malin.com (https://excel-malin.com) et J.P
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 " + DetectOfficeVersion
   Case Else
End Select
MsgBox "Vous utilisez " & NomVersionOffice & "."
End Sub
Function DetectOfficeVersion() As String
Dim FullVersion As String, Version As String
DetectOfficeVersion = "16.0"
On Error Resume Next
Version = CreateObject("WScript.Shell").RegRead("HKCU\Software\Microsoft\Office\16.0\Common\ExperimentConfigs\Ecs\PerpetualLicenseInfo")
FullVersion = CreateObject("WScript.Shell").RegRead("HKCU\Software\Microsoft\Office\16.0\Common\ExperimentConfigs\Ecs\LicenseSKUInfo")
If InStr(FullVersion, "|") > 0 Then Debug.Print Mid(FullVersion, InStr(FullVersion, "|") + 1)
If InStr(Version, "|") > 0 Then
   DetectOfficeVersion = Mid(Version, InStr(Version, "|") + 1)
   Debug.Print DetectOfficeVersion
End If
End Function
Cela fonctionne chez moi sur un Office 2021 et un Office 2019. La FullVersion donne l'Edition installée. Par exemple pour mon Office 2021, j'ai
HomeStudent2021Retail
A tester avec un Office 2016, Office 2024, Office 365. J'ai un doute avec Office 365 à cause de PerpetualLicenseInfo (voir alors ce que donne la FullVersion).

Ami calmant, J.P
 
Dernière édition:
Hello,
bon ben j'ai peut-être trouvé un moyen plus direct pour savoir la version exacte d'un Office de type 16.0 : En passant par la base de registre.
Voici le code :
VB:
Sub VersionOfficeUtilisee()
Dim NumeroVersionOffice
'par: Excel-Malin.com (https://excel-malin.com) et J.P
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 " + DetectOfficeVersion
   Case Else
End Select
MsgBox "Vous utilisez " & NomVersionOffice & "."
End Sub
Function DetectOfficeVersion() As String
Dim FullVersion As String, Version As String
DetectOfficeVersion = "16.0"
On Error Resume Next
Version = CreateObject("WScript.Shell").RegRead("HKCU\Software\Microsoft\Office\16.0\Common\ExperimentConfigs\Ecs\PerpetualLicenseInfo")
FullVersion = CreateObject("WScript.Shell").RegRead("HKCU\Software\Microsoft\Office\16.0\Common\ExperimentConfigs\Ecs\LicenseSKUInfo")
If InStr(FullVersion, "|") > 0 Then Debug.Print Mid(FullVersion, InStr(FullVersion, "|") + 1)
If InStr(Version, "|") > 0 Then
   DetectOfficeVersion = Mid(Version, InStr(Version, "|") + 1)
   Debug.Print DetectOfficeVersion
End If
End Function
Cela fonctionne chez moi sur un Office 2021 et un Office 2019. La FullVersion donne l'Edition installée. Par exemple pour mon Office 2021, j'ai

A tester avec un Office 2016, Office 2024, Office 365. J'ai un doute avec Office 365 à cause de PerpetualLicenseInfo (voir alors ce que donne la FullVersion).

Ami calmant, J.P
Bonjour à tous,
@jurassic pork j'ai bien la clé donc cela devrait fonctionner je pense, maintenant reste à savoir si c'est identique sur tous les PC ?
regedit_VwMadQGJek.png
 
Bonjour à tous,
@jurassic pork j'ai bien la clé donc cela devrait fonctionner je pense, maintenant reste à savoir si c'est identique sur tous les PC ?
Merci Valtrase du retour (et merci aussi à CousinHub). J'ai fait une modification pour le cas d'Office 365 :
VB:
Function DetectOfficeVersion() As String
Dim FullVersion As String, Version As String
DetectOfficeVersion = "16.0"
On Error Resume Next
Version = CreateObject("WScript.Shell").RegRead("HKCU\Software\Microsoft\Office\16.0\Common\ExperimentConfigs\Ecs\PerpetualLicenseInfo")
FullVersion = CreateObject("WScript.Shell").RegRead("HKCU\Software\Microsoft\Office\16.0\Common\ExperimentConfigs\Ecs\LicenseSKUInfo")
If InStr(FullVersion, "|") > 0 Then
   Debug.Print Mid(FullVersion, InStr(FullVersion, "|") + 1)
   If InStr(FullVersion, "O365") > 0 Then 
         DetectOfficeVersion = "365"
         Exit Function
   End If
End If
If InStr(Version, "|") > 0 Then
   DetectOfficeVersion = Mid(Version, InStr(Version, "|") + 1)
   Debug.Print DetectOfficeVersion
End If
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour