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...
Bonjour Macseb, Bernard,
Quel intérêt d'utiliser une formule si elle doit être utiliser sur un XL n'en disposant pas ?
Passer directement par du Index Equiv ou une fonction personnalisée, au moins vous serez sur que tous vos utilisateurs pour exploiter votre fichier.
 
Bonjour Sylvanu, jean-eric
Quel intérêt d'utiliser une formule si elle doit être utiliser sur un XL n'en disposant pas ?
la réponse est contenue dans la question, et il utilise déjà un index dans le fichier originel, il veut en changer uniquement sur les versions qui supportent la nouvelle fonction
Pourquoi? car j'utilise dans mon code un formula pour intégrer dans des cellules la formule recherchex en remplacement de index
 
Bonjour macseb, le forum

cette petite fonction fera peut être l'affaire.

Cordialerment
VB:
Function Test_RechercheX() As Boolean
On Error Resume Next
Test_RechercheX = WorksheetFunction.XLookup(1, 1, 1)
End Function
Salut Bernard,
Pour ta fonction il ne me semble pas que vba génére d'erreurs de code lorsqu'il rencontre XLookup. Il inscrits simplement l'erreur dans les cellules concernées soit un #NOM. Cependant ça me donne une idée, peut être utilise la fonction qui existe pour les cellules ESTERREUR(), son équivalent en VBA un style is_error(). Je regarderai dans la doc, ça doit exister sûrement...
Merci à tt le monde de vous penchez sur ma question.
@ plus tard
 
Bonjour à tous,
Personnellement j'utilise celle-ci qui n'a pas été testée sur toutes les versions.
VB:
'@Description "Récupère la version d'Office"
Public Function AppVersion() As Long
    ' // Test the Office application version
    ' // Written by Ken Puls (www.excelguru.ca)
    Select Case val(Application.Version)
        Case Is = 16
            ' // Check for existence of Licensing key
            Dim keyPath As String
            keyPath = "Software\Microsoft\Office\" & CStr(Application.Version) & "\Common\Licensing\LicensingNext"
            
            Dim rootDirectory As String
            rootDirectory = "."
            
            Dim registryObject As Object
            Set registryObject = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & rootDirectory & "\root\default:StdRegProv")
            
            Dim arrEntryNames As Variant
            Dim arrValueTypes As Variant
            registryObject.EnumValues &H80000001, keyPath, arrEntryNames, arrValueTypes

            On Error GoTo ErrorExit
            Dim x As Long
            For x = 0 To UBound(arrEntryNames)
                If InStr(arrEntryNames(x), "365") > 0 Then
                    AppVersion = 365
                    Exit Function
                End If
                If InStr(arrEntryNames(x), "2019") > 0 Then
                    AppVersion = 2019
                    Exit Function
                End If
                If InStr(arrEntryNames(x), "2021") > 0 Then
                    AppVersion = 2021
                    Exit Function
                End If
            Next x
        Case Is = 15
            AppVersion = 2013
        Case Is = 14
            AppVersion = 2010
        Case Is = 12
            AppVersion = 2007
        Case Else
            ' // Too old to bother with
            AppVersion = 0
    End Select

    Exit Function

ErrorExit:
    ' // Version 16, but no licensing key. Must be Office 2016
    AppVersion = 2016

End Function

Bonne programmation.
 
Salut Valtrase,
J'avais effectivement trouvé ce genre de code pour lire dans le registre mais ça ne marche pas systématiquement. Sur mon ordi ça n'est pas exactement le même chemin de registre. Ce qui est donc peu fiable pour fonctionner je trouve, mais merci qd même. C'est dommage qu'il n'ont pas prévu une distinction entre les 3 versions ou une propriété permettant de les distinguer :-/
 
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.
Bonsoir,
Il me semble bien que la seule solution 100% fiable soit de consulter le compte Microsoft, par exemple :
Compte Microsoft.png

Cordialement,
 
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 testXlookUp()
MsgBox IsAvailableXlookUp
End Sub

Function IsAvailableXlookUp()
IsAvailableXlookUp = CBool(Val(Evaluate("IFERROR(XLOOKUP(1, {1}, {""1""}), 0)")))
End Function
patrick
 
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 testXlookUp()
MsgBox IsAvailableXlookUp
End Sub

Function IsAvailableXlookUp()
IsAvailableXlookUp = CBool(Val(Evaluate("IFERROR(XLOOKUP(1, {1}, {""1""}), 0)")))
End Function
patrick
Hi,
Pour continuer dans l'excellente idée de @Bernard_XLD
VB:
Sub test()
'à partir de 2021
x = Evaluate([Filter(1,1)])
'à partir de 2024
y = [TEXTAFTER("a_b","_")]
End Sub
N'ayant pas 365, il faudrait un autre contributeur, et le tour pourrait être complet?
 
- 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