VBA : Compréhension d'une méthode And 1

  • Initiateur de la discussion Initiateur de la discussion Kiseki
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Re : VBA : Compréhension d'une méthode And 1

Bonjour Pierrot93,

Le résultat renvoi 1 si NB est impair et 0 s'il est pair, c'est plus rapide que d'utiliser le modulo.

Donc j’aurai aimer comprendre cette logique, pour éventuellement m'en servir de différentes manières.
 
Re : VBA : Compréhension d'une méthode And 1

Je pense avoir trouvée :

Notre nouvelle fonction IsNumberEven est certes plus performante que la première, mais est-elle pour autant la meilleure ? Hélas, la réponse est non. Il est en effet plus rapide encore de tirer parti de la propriété mathématique suivante : « tout nombre pair écrit en binaire se termine par un zéro ». C'est simple : 2 s'écrit 10, 4 s'écrit 100, 6 s'écrit 110, etc... (et cela se généralise). Allons-y donc franchement et savourons notre victoire (même dérisoire, une victoire est toujours une victoire) :

'Détermine si un nombre est impair

Public Function
IsNumberEven (Number As Long) As Boolean

IsNumberEven = ((Number
And 1) = 0)

End Function

Mais de là à saisir comment ce servir de ce genre de comparaison ^^.
 
Re : VBA : Compréhension d'une méthode And 1

Re,

regarde également ce que l'on peut lire dans l'aidfe vba à propos de l'opérateur "And"..

L'opérateur And permet également d'effectuer une comparaison au niveau du bit des bits occupant la même position dans deux expressions numériques et définit le bit correspondant dans l'argument result selon le tableau ci-dessous :

Bit dans expression1 Bit dans expression2 Argument result
0 0 0
0 1 0
1 0 0
1 1 1
 
Re : VBA : Compréhension d'une méthode And 1

Bonjour à tous

Futé. Mais un peu abscons il faut bien le dire.
Une jolie page en anglais ou McGimpsey a compilé des astuces d'Harlan Grove
McGimpsey & Associates : Excel : Bitwise Logical Operations

cela dit utiliser le modulo est quand même plus simple à comprendre (et à retenir)
Certains disent que utiliser nombre and 1 est bien plus rapide...
C'était peut être vrai il y a quelques années mais en tous cas sur mon PC c'est vraiment du kif :

Code:
Sub test1()
    Dim i As Long, n As Long, res As Boolean
    n = Timer
    For i = 0 To 1000000000
        res = (i And 1) = 0
    Next
    MsgBox Timer - n
End Sub
Sub test2()
    Dim i As Long, n As Long, res As Boolean
    n = Timer
    For i = 0 To 1000000000
       res = (i Mod 2) = 0
    Next
    MsgBox Timer - n
End Sub
 
Re : VBA : Compréhension d'une méthode And 1

Bonjour Misange,

Je n'arrive pas au même résultat après chaque utilisation.

Sinon il suffit de faire :
not (i And 1)

Pour inverser, ce qui enlève la comparaison à 0, tu à tenter ce genre de variante aussi ?
 
Re : VBA : Compréhension d'une méthode And 1

Salut Kiseki,
oui pour tester il faut faire le test au moins une dizaine de fois et faire la moyenne des valeurs obtenues. C'est une histoire de mémoire mais j'ai oublié l'explication complète.
l'idée dans les deux bouts de macro c'était de faire les codes les plus proches possibles pour comparer leur rapidité. Je n'ai pas testé not(i and 1) mais je serai surprise que ce soit beaucoup plusr apide !
En tous cas j'ai lu de ci de là que i and 1 est beaucoup plus rapide que i mod 2... Je suis plus que sceptique sur ce point et en général je déteste les codes qui "font chic", qui sont incompréhensibles aux communs des programmeurs. En gros les informaticiens parlent aux informaticiens c'est pas trop mon truc, surtout quand il y a une autre façon de faire tout aussi efficace (évidemment, il y a des cas ou l'optimisation est vraiment nécessaire)
 
Re : VBA : Compréhension d'une méthode And 1

Ok, merci,

Oui, je pense que c'est plus rapide dans le sens où c'est plus proche de la machine et que le modulo doit encore calculer.

Je comprend parfaitement ce que tu pense, d'un point de vue compréhension ça aide beaucoup, mais j'aime quand même être performant et cherche à prendre de bonnes habitudes, une fois compris que "ça" vérifie si c'est pair ou non, aucun besoin de savoir le comprendre, on sait dès lors utiliser une méthode plus performante.

Du moindre du point de vue d'une personne à l'aise (pas forcément un expert) apprendre une chose en plus ce n'est pas grand chose, tandis qu'une personne qui n'est pas encore à l'aise ce n'est pas terrible de rajouter encore quelque chose.

C'est surtout intéressant de savoir que ça existe afin d'accélérer une longue procédure, je l'admets, entre optimiser et une procédure habituel la différence de temps d'exécution n'est sans doute pas importante.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
683
Retour