Re
@Fipat,
@Staple1600,
Effectivement cela marche sans souci
Désolé de faire mon chiant, une constante marquée par vb ?
je ne comprends pas.
Je n'y peux rien. C'est le nom de la constante. Microsoft nomme ses constantes comme il veux.
En fait c'est plus "sioux" que ça.
Dans la bibliothèque "Scripting Runtime", la classe de l'objet dictionary comporte une propriété nommée "CompareMode" qui permet de préciser comment faire les comparaison de texte. Cette propriété peut prendre 3 valeurs : BinaryCompare (zéro), DatabaseCompare (deux), TextCompare (un).
BinaryCompare distingue les majuscules des minuscules, TextCompare ignore la casse et DatabaseCompare est généralement réservée à Access.
Ces constantes sont définies dans la classe dictionary de Scripting Runtime et sont à priori inconnues de VBA sauf si on indique à VBA où chercher.
Si on fait du "late binding" en utilisant CreateObject(...), les constantes sont inconnues de VBA.
Si on veut que VBA connaissent le dictionary et propose les propriétés et leur valeur au moment d'écrire le code, il faut le faire par un "early binding". Pour cela, dans l'environnement VBE, on sélectionne le menu Outils puis Référence... et on coche la ligne "Microsoft Scripting Runtime".
Quand on revient au code et qu'on tape" DReport.comparemode=", VBA propose la liste des trois valeurs.
J'ai utilisé ici une astuce sournoise. La constante TextCompare n'existe pas dans VBA mais il existe une constante
VBA qui s'appelle
vbTextCompare et qui a la même valeur (1).
Donc en faisant du "late binding", l'instruction
DReport.CompareMode = TextCompare ne passe pas.
Mais si à la place, on indique la constante VBA vbTextCompare et qui possède la même valeur, on gruge VBA.
Le mieux est encore d'écrire :
DReport.CompareMode = 1 .