excel-vba
Contraignant
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.