IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Philippe Tulliez

VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding

Note : 2 votes pour une moyenne de 1,00.
par , 26/01/2020 à 15h42 (3224 Affichages)
Préambule
Avec le VBA, lorsque l’on pilote une autre application que celle où l’on développe, il y a lieu de passer par le référencement de la bibliothèque utilisée.
Exemple pour Word : Microsoft Word xx.n Object Library (remplacer xx.n par 14.0 pour Word 2010)

Cependant, le référencement peut poser problème lorsque des versions différentes cohabitent ou si l’on sauve l’application avec un référencement de version plus récente que celle avec laquelle va tourner l’application
Pour pallier ce problème, il est donc préférable de livrer l’application sans ce référencement et utiliser le LateBinding

Je renvoie vers cette fiche Early et Late Binding pour en savoir plus sur le sujet

Pour profiter des avantages du EarlyBinding lors du développement (IntelliSense) et profiter de ceux du LateBinding (indépendance vis-à-vis des versions), on utilisera la compilation conditionnelle.

C’est le but de ce billet

Exemple d'une procédure utilisant la compilation conditionnelle
Cette procédure doit être enclenchée avant d’utiliser l’objet Word
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
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
Sub StartWord()
  ' Compilation conditionnelle
  #If IsLateBinding Then
      Dim appWrd As Object
      Dim wrdDoc As Object
      Set appWrd = CreateObject("Word.Application")
   #Else
      ' Phase de test
      ' Nécessite le référencemant de Microsoft Word xx.n Object Library
      Dim appWrd As Word.Application
      Dim wrdDoc As Word.Document
      Set appWrd = New Word.Application
      MsgBox "Phase de test EarlyBinding"
  #End If
  ' Début du programme
  With appWrd: .Visible = True: .Activate: End With
  Set wrdDoc = appWrd.Documents.Add
  ' Ecriture dans le nouveau document Word
  With appWrd.Selection
  .TypeText Text:="Bonjour,"
  .TypeParagraph
  .TypeText Text:="Ceci est une phase de test"
  .TypeParagraph
   #If IsLateBinding Then
       .TypeText Text:="Utilise le Late Binding"
     #Else
       .TypeText Text:="Utilise le Early Binding"
   #End If
  End With
  Set appWrd = Nothing: Set wrdDoc = Nothing
End Sub

Comment affecter une valeur à la constante
Pour l’exemple la constante se nomme IsLateBinding
Pour affecter une valeur à la constante deux possibilités. La première est connue dans le module où elle est placée, la seconde est valable pour l'ensemble du projet

1 - Par code VBA en tête de module
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Option Explicit
#Const IsLateBinding = True

2 - A l'aide de la boîte de dialogue [VBAProject – Propriétés du projet]
Pour afficher cette boîte de dialogue, il y a lieu de cliquer sur la commande Propriétés de VBAProject... du menu Outils

Entrer NomConstante = Valeur dans la zone de texte Arguments de compilation conditionnelle de la boîte de dialogue VBAProject – Propriétés du projet comme illustré ci-dessous
Attention : Si la valeur de la constante est booléenne, il faut entrer sa valeur numérique (-1 pour True, False étant la valeur par défaut, il n’y a pas de raison de le définir)

Nom : Compilation conditionnelle.png
Affichages : 964
Taille : 15,7 Ko

Comment utiliser les constantes des autres applications
A partir du moment où l'on choisi de faire tourner l'application en Late binding, les constantes de l'application tierce que l'on utilise ne sont plus reconnues.

Pour rappel : Les constantes préfixées vb (vbCrLf, vbTab, etc.) sont connues dans toutes les applications VBA, xl (xlCenter, xlBottom) sont propres à Excel, wd à Word, pp à PowerPoint, ac pour Access, etc.

Donc pour conserver une transparence totale entre Late et Early Binding, il y a lieu de déclarer ces constantes et de leurs attribuer la même valeur dans une structure décisionnelle #If... #End If

Exemple à placer en tête du module
Il est possible de prévoir un module dédié à la déclaration des constantes mais dans ce cas la constante conditionnelle (IsLateBinding pour notre exemple) doit être dans ce même module ou la déclarer à l'aide de la boîte de dialogue VBAProject – Propriétés du projet comme expliqué plus haut afin qu'elle soit publique pour le projet.
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Option Explicit
#Const IsLateBinding = True
'
#If IsLateBinding Then
   Public Const wdGoToBookmark As Long = -1
   Public Const wdAlignParagraphCenter As Long = 1
   Public Const wdListNumberStyleBullet As Long = 23
#End If
A consulter
Liste des constantes énumérées pour Word

Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog Viadeo Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog Twitter Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog Google Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog Facebook Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog Digg Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog Delicious Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog MySpace Envoyer le billet « VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding » dans le blog Yahoo

Mis à jour 04/04/2022 à 06h59 par Philippe Tulliez

Catégories
VBA Excel

Commentaires

  1. Avatar de Qwazerty
    • |
    • permalink
    Salut

    Simple et efficace, merci pour ce partage de méthode.

    ++
    Qwaz
  2. Avatar de Philippe Tulliez
    • |
    • permalink
    Bonjour Qwaz,
    Merci pour ton sympathique message
    J'ai ajouté le chapitre que tu m'as suggéré d'ajouter sur la méthode à utiliser pour la déclaration des constantes
    Philippe

    Citation Envoyé par Qwazerty
    Salut

    Simple et efficace, merci pour ce partage de méthode.

    ++
    Qwaz
  3. Avatar de Vlad_2821
    • |
    • permalink
    Bonjour,

    Merci Philippe pour ce tutoriel bien utile !

    Pour résumer, en Early ou en Late le code peut être identique, à l'exception des déclarations d'objets ?
    Il suffit simplement de déclarer les constantes utilisées en début de module (ou via l'onglet propriétés) ?