Recherche…


Reliure précoce vs liaison tardive

La liaison est le processus d'affectation d'un objet à un identifiant ou à un nom de variable. La liaison anticipée (également appelée liaison statique) se produit lorsqu'un objet déclaré dans Excel est d'un type d'objet spécifique, tel qu'une feuille de calcul ou un classeur. La liaison tardive se produit lorsque des associations d'objets générales sont créées, telles que les types de déclaration Object et Variant.

La liaison anticipée des références présente certains avantages par rapport à la liaison tardive.

  • La liaison anticipée est opérationnellement plus rapide que la liaison tardive pendant l'exécution. La création de l'objet avec une liaison tardive au moment de l'exécution prend un certain temps avant que la liaison anticipée ne soit terminée lorsque le projet VBA est initialement chargé.
  • La liaison anticipée offre des fonctionnalités supplémentaires grâce à l'identification des paires clé / article par leur position ordinale.
  • Selon la structure du code, une liaison anticipée peut offrir un niveau supplémentaire de vérification de type et réduire les erreurs.
  • La correction de la capitalisation du VBE lors de la saisie des propriétés et des méthodes d'un objet lié est active avec une liaison anticipée mais indisponible avec une liaison tardive.

Remarque: Vous devez ajouter la référence appropriée au projet VBA via la commande Outils → Références de VBE afin de mettre en œuvre la liaison anticipée.
Cette référence de bibliothèque est ensuite portée avec le projet; il n'est pas nécessaire de le référencer à nouveau lorsque le projet VBA est distribué et exécuté sur un autre ordinateur.

'Looping through a dictionary that was created with late binding¹
Sub iterateDictionaryLate()
    Dim k As Variant, dict As Object
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict.comparemode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k
    
    dict.Remove "blue"      'remove individual key/item pair by key
    dict.RemoveAll          'remove all remaining key/item pairs

End Sub

'Looping through a dictionary that was created with early binding¹
Sub iterateDictionaryEarly()
    Dim d As Long, k As Variant
    Dim dict As New Scripting.Dictionary
    
    dict.CompareMode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    dict.Add Key:="White", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k

    'iterate through the keys by the count
    For d = 0 To dict.Count - 1
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    'iterate through the keys by the boundaries of the keys collection
    For d = LBound(dict.Keys) To UBound(dict.Keys)
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    dict.Remove "blue"                         'remove individual key/item pair by key
    dict.Remove dict.Keys(0)                   'remove first key/item by index position
    dict.Remove dict.Keys(UBound(dict.Keys))   'remove last key/item by index position
    dict.RemoveAll                             'remove all remaining key/item pairs

End Sub

Toutefois, si vous utilisez une liaison anticipée et que le document est exécuté sur un système dépourvu de l'une des bibliothèques référencées, vous rencontrerez des problèmes. Non seulement les routines qui utilisent la bibliothèque manquante ne fonctionneront pas correctement, mais le comportement de tout le code dans le document deviendra erratique. Il est probable qu'aucun code du document ne fonctionnera sur cet ordinateur.

C'est là que la liaison tardive est avantageuse. Lorsque vous utilisez une liaison tardive, vous n'avez pas besoin d'ajouter la référence dans le menu Outils> Références. Sur les machines disposant de la bibliothèque appropriée, le code fonctionnera toujours. Sur les machines sans cette bibliothèque, les commandes faisant référence à la bibliothèque ne fonctionneront pas, mais tous les autres codes de votre document continueront à fonctionner.

Si vous ne connaissez pas bien la bibliothèque à laquelle vous faites référence, il peut être utile d'utiliser une liaison anticipée lors de l'écriture du code, puis de passer à la liaison tardive avant le déploiement. De cette façon, vous pouvez tirer parti du navigateur IntelliSense et Object Browser de VBE pendant le développement.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow