none
VBA Compilation Conditionnelle RRS feed

  • Question

  • Bonjour,

    J'ai plusieurs appplications qui doivent fonctionner sur Offcie excel 2003 et 2007. Le problème c'est que lors de l'ouverture du fichier j'ai du code qui s'exécute. Ce code contient une condition qui se trouve être la version d'excel. Le problème c'est que le code excel 2007 ne se compile pas sous excel 2003 ce qui provoque une erreur à l'ouverture. J'ai trouvé la compilation conditionnelle, mais les conditions doivent être des constantes. Ce qui n'est pas mon cas.

    J'aimerais qqch qui ressemble à cela:

    #if Application.version<12 then  
        'Code 2003  
    #else  
        'Code 2007  
    #end if 

    Malheureusement, ca ne fonctionne pas. Est qu'il y a un moyen de le faire? Ca m'éviterais de faire 2 versions pour chaque application.

    merci d'avance

    seba_stien
    mercredi 4 mars 2009 14:40

Toutes les réponses

  • Bonjour,

    Qu'utilisez-vous donc de si particulier pour avoir besoin de 2 versions considérant que 2003 et 2007 restent à un grand pourcentage compatible au niveau du VBA ?

    Une solution consisterait pour votre cas à exploiter une propriété publique qui renverrai True ou False selon qu'Excel est en 2003 ou 2007  et de toute façon le Mode de compatibilté pour être certain de l'ouverture sur l'une ou l'autre version...

    Private m_blnExcelIs2007 As Boolean
    Public Property Get p_blnExcelIs2007() As Boolean m_blnExcelIs2007 = (Val(Application.Version) >= 12) p_blnExcelIs2007 = m_blnExcelIs2007 End Property

    avec comme mode d'usage, par exemple

    If p_blnExcelIs2007 Then
    '[...] Else
    '[...] End If
    Mais si vous exploitez des fonction typique VBA 2007, vous risquez de lever une erreur.

    La compilation conditionnelle telle que vous la visez ne peut pas s'appliquer à ma connaissance.
    Argy
    mardi 28 avril 2009 15:05
    Modérateur
  • Bonjour,

    En effet, les 2 versions sont dans les cas les plus simples compatibles. Par contre prenons par exemple les graphiques, la migration ne se fait pas sans peine. Je pourrais aussi vous parler des labels,... mais nous sommes pas là pour débattre de la compatibilité d'Excel 2003-2007.

    Après plusieurs jours de recherche, j'ai pu constater qu'il était impossible d'avoir une variable à la place d'une constante pour la compilation conditionnelle et aucune autre possibilité existe à ma connaissance.

    J'aurais donc 2 versions. Une version pour les utilisateurs 2003 et une version pour les utilisateurs 2007.

    Car votre exemple ne change rien lors de la compilation. Tout le code est compilé quelque soit la version d'excel.

    Merci quand même

    seba_stien

    mercredi 29 avril 2009 08:17