Bug lors du collage de la validation dans VBA - Conseils Excel

Table des matières

Si vous avez lu les premiers chapitres de VBA & Macros pour Microsoft Excel, vous savez que je me plains que l'enregistreur de macros Excel ne fait pas le plus grand travail d'enregistrement du code utilisable. Habituellement, le code fonctionne correctement, mais il est enregistré de telle manière qu'il peut ne pas être très utile pour des ensembles de données de différentes tailles. Le code pourrait bien fonctionner aujourd'hui, mais pas demain.

J'ai rencontré un problème vraiment étrange où l'enregistreur de macros a en fait enregistré un code qui ne fonctionnait pas. J'écrivais une macro qui tentait de copier la validation d'une cellule vers une plage de cellules. Dans Excel 2002, ce code était le suivant:

Range(“E5”).Copy Range(“E6:E12”).PasteSpecial Paste:=xlPasteValidation

Ce code a bien fonctionné dans Excel 2002, mais a échoué sur la machine d'un client avec Excel 2000. L'un des anciens ordinateurs du bureau a toujours Excel 2000, alors j'ai essayé le code là-bas. Le problème était avec le xlPasteValidation. Chaque fois que je rencontre quelque chose d'inhabituel, je démarre l'enregistreur de macros pour voir comment l'enregistreur de macros enregistrerait le code. J'ai configuré la validation dans E5, activé l'enregistreur de macros, copié E5 et utilisé Collage spécial - Validation. Après avoir arrêté l'enregistreur de macros, j'ai noté qu'Excel 2000 enregistrait la constante comme:

Range(“E6:E12”).PasteSpecial Paste:=xlDataValidation

Alors, je suis allé à l'application client, j'ai changé le code en xlDataValidation et l'ai exécuté à nouveau. Étrangement, cela a produit la même erreur!

Il s'avère que l'enregistreur de macros Excel 2000 a en fait un bogue. Il enregistrera la constante xlDataValidation, mais l'interpréteur de macro ne reconnaîtra ni xlDataValidation ni xlPasteValidation. L'aide d'Excel VBA dans Excel 2000 prétend qu'il n'y a aucun moyen de coller uniquement des validations.

Pour que cela fonctionne, vous devez découvrir la valeur sous-jacente de xlPasteValidation. Sur ma machine XL2002, je suis allé à l'éditeur VBA. Tapez Ctrl + G pour ouvrir la fenêtre immédiate et tapez ceci dans le volet immédiat:

Print xlPasteValidation

Appuyez sur Entrée et Excel 2002 vous dira que xlPasteValidation est une manière conviviale de dire «6». De retour sur la machine Excel 2000, j'ai essayé ce code:

Range(“E6:E12”).PasteSpecial Paste:=6

Heureusement, ça marche. Vous êtes en fait obligé d'utiliser la valeur sous-jacente au lieu de la constante. Je mets en garde contre cette pratique dans le livre car cela rend le programme vraiment difficile à lire pour la prochaine personne qui regarde le code. Dans ce cas particulier, vous n'avez vraiment pas le choix. Ajoutez un commentaire expliquant pourquoi vous l'avez codé de cette façon:

‘Bug in XL2000; need to use “6” instead of the constant Range(“E6:E12”).PasteSpecial Paste:=6

Donc, la petite leçon d'aujourd'hui est le problème très spécifique de la façon de coller une validation spéciale dans Excel 2000, mais la plus grande leçon est le travail de détective nécessaire pour comprendre ce qui se passe quand quelque chose d'étrange se produit dans Excel VBA.

Articles intéressants...