Extraire un chiffre, un bit ou une composante couleur d'un nombre

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

19sfdigit-32bits.xlsm (32.50 Ko)
18sfdigit-64bits.xlsm (32.55 Ko)

Très intéressant ! à mettre dans la section applications sans doute.

J'ai eu une erreur sur LongLong (je suppose que c'est lié à une version 64bits).

Pourquoi des formules matricielles ? elles n'en ont pas besoin ou est-ce une spécificité mac ?

Bonjour Steelson,

Merci pour ce retour d'expérience, j'espère que tu seras suivi par d'autres utilisant des OS ou versions d'Excel différentes.

Effectivement j'utilise une version 64 bits (PC Windows 10)

Je ne suis pas un informaticien très aguerri et je ne vois pas ce que tu veux dire par: "formule matricielle" (dans le code VBA ou dans les formules de mon classeur ?) . Si tu pouvais me préciser comment tu reformulerais les choses cela m'intéresserais

En effet, dans les formules de ton classeur on voir ={______} ce qui voudrait dire que la formule a été validée par Ctrl+maj+Entrée.

Bon cela ne donne pas de résultat erroné, mais ce n'est pas utile non plus.

Essaie en reprenant la formule et en validant simplement par Entrée et tu verras la différence dans la formule

Ah oui je vois, ça c'était vrai quand j'utilisais Excel 2003. Avec Excel 2016 la conversion en formule matricielle se fait automatiquement et les crochets n'apparaissent pas dans cette version. Je n'ai donc jamais eu a employer la combinaison de touches Ctrl+maj+Entrée

Bonjour, Je ne sais pas si c'est d'une grande utilité mathématique mais pour les superstitieux voici une technique utilisée par les plus éminents numérologues pour extraire le chiffre qui se cache derrière un nombre. Voici en quoi ça consiste:

Prenez par exemple le nombre: 999 999 299 et vous additionnez tous les chiffres:

9+9+9 +9+9+9 +2+9+9 = 74

répéter la même opération avec le résultat

7+4 = 11

1+1 = 2

Et voilà vous avez ce résultat définitif: 2 est le chiffre qui se cache derrière 999 999 299

' Version 64bits, pour une version 32bits remplacer LongLong par Long
Function NumMystic(ByVal Nombre As LongLong) As Byte
    Dim i As Byte, addition As Byte
    Do
        For i = 1 To Len(CStr(Nombre))
            addition = addition + sfDigit(Nombre, i)
        Next
        Nombre = addition: addition = 0
    Loop While Nombre > 9

    NumMystic = CByte(Nombre)
End Function

Nota: contrairement à ce que permettent les formules standards cette UDF dans sa version 32bits ne sait gérer que 9 chiffres au maximum au lieu des 15 possibles dans Excel

Rechercher des sujets similaires à "extraire chiffre bit composante couleur nombre"