L'UDF qui suit m'a été inspirée d'une formule donnant la composante bleue d'un numéro de couleur, trouvée sur le web et formulée comme suit:
Blue = NbColor \ 65536 Mod 256
L'idée m'est venue (je n'ai pas réussi à trouver de solution pareille sur le web) de l'étendre à d'autres bases que la 256. Je l'ai écrit comme ça puis testée OK mais je ne saurais pas expliquer en bon jargon mathématique ce qu'elle fait ni lui donner un nom plus évocateur. Y'aurait-il un matheux qui pourrait contribuer ? De même avez-vous connaissance d'une telle fonction dans un quelconque langage ?
Merci à Steelson qui m'a mis un like et permis d'élaborer la version 32bits
' Version 64bits, pour une version 32bits remplacer LongLong par Long
Function sfDigit&(ByVal NbDecimal As LongLong, ByVal Rang As Byte, Optional ByVal Base& = 10)
sfDigit = Int((NbDecimal Mod (Base ^ Rang)) / (Base ^ (Rang - 1)))
End Function
L'argument Base est optionnel ce qui rend cette fonction pratique pour extraire un chiffre d'un nombre entier en base 10:
Unité= sfDigit(nombre,1)
Dizaine= sfDigit(nombre,2)
Centaine= ... ,3)
...
En base 2 il faudra renseigner en plus la base
BitParité= sfDigit(nombre,1,2)
Pour extraire une couleur on utilise la base 256
Rouge= sfDigit(NoCouleur,1,256)
Vert= sfDigit(NoCouleur,2,256)
Bleu= sfDigit(NoCouleur,3,256)
Je vous invite à tester mes classeurs, j'y utilise les conventions suivantes:
- les variables à ajuster sont sur fond jaune vif
- les constantes sont sur fond bleu foncé
- les formules standard Excel sont sur fond vert clair
- les formules impliquant une UDF sont sur fond bleu clair
Nota: en 64 bits pour un nombre décimal supérieur à 9E+15 la formule est susceptible de se tromper sans se mettre en erreur