Plus simple que ca, on peut utiliser la version format présente dans VBA, qui peut se conformer à la norme iso.
Exemple:
Dim datetest, semaine
datetest = #23/7/2010#
semaine = Format(datetest, "ww", vbMonday, vbFirstFourDays)
Dans ce cas, Format renvoie 29, ce qui est la bonne réponse.
L'argument vbMonday définit le premier jour de la semaine (selon la norme, Lundi, mais dimanche par défaut pour VBA si l'argument est omis) et vbFirstFourDays définit que la semaine n°1 est la première semaine contenant au moins 4 jour (soit la semaine contenant le 1er jeudi de l'année, c'est équivalent; si l'argument est omis, VBA considère que c'est la semaine du 1er janvier, ce qui n'est pas toujours exact)
On peut bien sur utiliser des variables pour définir la date, en utilisant la fonction CDate:
Dim jour, mois, annee
Dim datetest, semaine
jour = 23
mois = 7
annee = 2010
datetest = CDate(jour & "/" & mois & "/" & annee)
semaine = Format(datetest, "ww", vbMonday, vbFirstFourDays)
On peut aussi n'utiliser que les 2 derniers chiffres de l'année, VBA considère alors que l'année est comprise entre 1930 et 2029
Note à part, la fonction Format permet de mettre en forme une date (entre autres), c'est l'argument "ww" qui fait qu'il renvoie le numéro de la semaine. En le remplacant par exemple par "dddd d mmmm yyyy", la fonction retourne dans notre exemple "vendredi 32 juillet 2010"