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...
Hello,
dans le même style , à tester (et à corriger si besoin) :
VB:
Sub DetectionVersionExcel()
Dim Func
 On Error Resume Next
 Err.Clear
 Call Application.WorksheetFunction.DetectLanguage("sol") ' 365
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.image("https://example.com/image.jpg") ' 2024
 Else
    Debug.Print "Excel 365": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Sequence(1) ' 2021
  Else
    Debug.Print "Excel 2024": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.TextJoin("", False, "the start", " and the end") ' 2019
 Else
    Debug.Print "Excel 2021": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Forecast_Linear(3.2, 2, 3)  ' 2016
 Else
    Debug.Print "Excel 2019": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Base(1, 2) ' 2013
 Else
    Debug.Print "Excel 2016": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Asc("toto") ' 2010
 Else
    Debug.Print "Excel 2013": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.IfError(B1, "error value") ' 2007
 Else
    Debug.Print "Excel 2010": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Debug.Print "Excel version < 2007"
 End If
 Debug.Print "Excel 2007"
End Sub
je ne l'ai testé que sur mon Excel 2021. Le code se base sur les nouvelles fonctions apparues dans les nouvelles versions.
Ami calmant, J.P
 
Hello,
dans le même style , à tester (et à corriger si besoin) :
VB:
Sub DetectionVersionExcel()
Dim Func
 On Error Resume Next
 Err.Clear
 Call Application.WorksheetFunction.DetectLanguage("sol") ' 365
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.image("https://example.com/image.jpg") ' 2024
 Else
    Debug.Print "Excel 365": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Sequence(1) ' 2021
  Else
    Debug.Print "Excel 2024": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.TextJoin("", False, "the start", " and the end") ' 2019
 Else
    Debug.Print "Excel 2021": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Forecast_Linear(3.2, 2, 3)  ' 2016
 Else
    Debug.Print "Excel 2019": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Base(1, 2) ' 2013
 Else
    Debug.Print "Excel 2016": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.Asc("toto") ' 2010
 Else
    Debug.Print "Excel 2013": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.IfError(B1, "error value") ' 2007
 Else
    Debug.Print "Excel 2010": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Debug.Print "Excel version < 2007"
 End If
 Debug.Print "Excel 2007"
End Sub
je ne l'ai testé que sur mon Excel 2021. Le code se base sur les nouvelles fonctions apparues dans les nouvelles versions.
Ami calmant, J.P
Hello,
Ayant 2024, je n'obtiens pas ma version.
Regarde mon test (basé sur la fonction "Fractionner.Texte", non dispo 2021, mais dispo 2024)
Re-, j'ai pourtant la fonction "Image"
 
et avec :
VB:
    Call Application.WorksheetFunction.TextAfter("Le chien", " ") ' 2024
Cela fonctionne ?
Non,
Vraiment bizarre...
J'ai l'impression que les nouvelles fonctionnalités (compatibles 2024) ne sont pas implémentées dans les Functions
1747749136692.png
 
Non,
Vraiment bizarre...
J'ai l'impression que les nouvelles fonctionnalités (compatibles 2024) ne sont pas implémentées dans les Functions
Hello,
j'ai une explication :
Limitations avec VBA
Certaines des nouvelles fonctions, telles que TEXTAFTER, TEXTBEFORE, TEXTSPLIT, TOCOL, TOROW, UNIQUE, VSTACK, HSTACK, LAMBDA, et LET, ne sont pas accessibles via VBA. Par exemple, la fonction TEXTAFTER n'est pas disponible dans la classe WorksheetFunction de VBA .
Pour contourner cette limitation, il est possible d'utiliser la méthode Application.Evaluate pour appeler ces fonctions directement dans une cellule, comme suit :
Dim result As Variant
result = Application.Evaluate("TEXTAFTER(A1, ""@"")")

et pour l'histoire que je croyais que certaines fonctions apparues seulement dans Excel 2024 et je les voyais quand même en autocomplétion de WorksheetFunction dans le VBA de mon Excel 2021 en fait elles ne sont pas implémentées dans Excel 2021 et d'ailleurs on ne les voit pas dans les fonctions de formule des feuilles. Par exemple StockHistory.
Donc avec :
VB:
Sub ListAllFunctions()
 On Error Resume Next
 Err.Clear
 Call Application.WorksheetFunction.DetectLanguage("sol") ' 365
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.StockHistory("EUR:USD", "01/07/2022", , 0, 0, 1) ' 2024
 Else
    Debug.Print "Excel 365": Exit Sub
 End If
 If Err.Number = 438 Or Err.Number = 1004 Then
    Err.Clear
    Call Application.WorksheetFunction.Sequence(1) ' 2021
  Else
    Debug.Print "Excel 2024": Exit Sub
 End If
 If Err.Number = 438 Then
    Err.Clear
    Call Application.WorksheetFunction.TextJoin("", False, "the start", " and the end") ' 2019
 Else
    Debug.Print "Excel 2021": Exit Sub
 End If

sur StockHistory j'ai une erreur 1004.

Chez moi cela fonctionne avec mon Excel 2021.

Ami calmant, J.P
 
Yep super merci pour l'ensemble de ces pistes. Je suis plus tenté par la solution courte evaluate qui est davantage plus parlant pour mon objectif car effectivement je souhaite simplement m'assurer que la fonction rechercheX fonctionne sur la version Excel de mon utilisateur. Merci Patrick, cousinhub et jurassik_pork.
Je vais tester ça quand j'aurai le temps 😉
 
- 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