Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 "And" sur valeur numérique entière

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 !

Olic78124

XLDnaute Nouveau
Salut à toutes et à tous,

Je ne sais pas comment exprimer/formuler le sujet de la discussion, j'ai fait ce que j'ai pu 🙂

Je reprends encore et toujours le même fichier contenant des macros développées dans un garage et je tombe sur une palanquée de tests du genre :
If (Cells(liv, 17).Value And 2) = 2 Or (Cells(liv, 17).Value And 4) = 4 Or (Cells(liv, 17).Value And 8) = 8 Or (Cells(liv, 17).Value And 16) = 16 Then "CODE" End If

Ma question, car j'ai beau faire tourner le truc dans tous les sens, je ne vois pas ce que And a comme effet sur une cellule contenant des valeurs toujours entières (pas de décimales donc) !?

J'ai extrait chaque "Cells(liv, 17).Value And X" pour récupérer les résultats dans des variables qui dans l'exemple ci-dessus contiennent des fois 0, des fois 2, des fois 4, des fois 8, des fois 16... et je ne comprends pas à quoi ça sert :-(

Une petite explication simple serait la bienvenue.

D'avance merci.
Olivier
 
Dernière édition:
bonjour
Il me semble que ca test des valeur numérique ou alphanumérique se terminant par 2 4 8 ou16
si il n'y à rien ou 0 devant le 2,le 4 ou le 8 ou le 16 d'une cellule
condition vrai si valeur=2 4 8 ou16
faux si 42 ou a2 .....
 
c'est ce que j'imaginais mais... j'ai fait quelques tests :
1 And 2 = 0 ' 1 ne se termine pas par 2 : OK
2 And 2 = 2 ' 2 se termine par 2 : OK
3 And 2 = 2 ' 3 ne se termine pas par 2 : On devrait avoir 0 ?
4 and 2 = 0 ' 4 ne se termine pas pas 2 : OK

Je n'explique pas le 3 And 2 avec cette logique
 
Bonjour Staple1600,

Message clairement reçu 😉

J'ai simplifié car il y a des dizaines de lignes de codes qui se ressemblent toutes plus les unes que les autres avec des doublons dans tous les sens.
Je laisse l'utile, à savoir l'incrémentation de la variable add_DE qui est ensuite mise dans une feuille fraîchement créée puis testée avec ces fameux And que je ne comprends toujours pas 😡

 
Dernière édition:
Bonjour le fil

Olic78124
Tu aimes bien jouer avec le feu?
Ou tu veux tester la nouvelle mesure Pole Emploi pour les démissionnaires?
😱
Relis le pavé de code que tu as posté
Et supprimes vite ce que le RGPD aurait du t'inciter à ne pas publier... 🙄

Sinon pour ton questionnement, est-ce que ce petit code éclaire ta lanterne ?
VB:
Sub PetitTest()
Dim t, i As Byte, x
t = Array(64, 23, "=TODAY()", 32, "a")
[A1].Select
For i = 0 To 4
[A1] = t(i)
[A1].NumberFormatLocal = "Standard"
On Error GoTo e_rr:
x = [A1] And 32
MsgBox x & Chr(13) & (([A1] And 32) = 32) & Chr(13) & Range("A1").FormulaLocal
Next
e_rr:
MsgBox "Valeur non numérique", vbCritical
Exit Sub
End Sub
 

J'étais persuadé d'avoir tout retiré... C'est ça de tout faire en courant !
Pour le code vu d'ici il ne me parle pas plus que ça, je regarde ce soir quand j'aurai mon PC dans le mains et je te dis quoi.
Merci
 
Bonjour à tous,

il s'agit d'un masque.
Considère tes nombres écrits en binaire, le AND est fait bit à bit.
Le faire avec une puissance de 2 (un seul bit de positionné donc) revient à masquer tous les autres bits en les passant à 0 pour tester le bit voulu.
3=2 => 11 AND 10 >= 10 => 2 => VRAI
Le bit de poids 1 (numérotés à partir de 0 de droite à gauche) est positionné.

Ta ligne teste donc si un des bits 1 à 4 est positionné : 11110
J'aurais plutôt écris ta ligne ainsi
VB:
if (Cells(liv, 17) ).Value And 2) Or (Cells(liv, 17) .Value And 4)  Or (Cells(liv, 17) .Value And 8)  Or (Cells(liv, 17) .Value And 16) then
les =x sont inutiles et embrouillent la lecture et la compréhension.

Et tant qu'on y est autant grouper tous les bits testés. Vu que 11110=30 :
Code:
if Cells(liv, 17) .Value And 30 then
donne le même résultat

Disons qu'avec les tailles mémoire qu'on a aujourd'hui, stocker plusieurs infos dans un mot binaire est un peu daté mais ça peut avoir son utilité.
eric
 
Dernière édition:

D'où le bout de code qui, en fonction de ce qui a été modifié, vient additionner les valeurs 2,4,8,16... à add_DE ! J'ai compris le principe merci Eriiiic pour ces explications claires et limpides.
 
- 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
5
Affichages
320
Réponses
4
Affichages
231
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
193
Réponses
2
Affichages
533
Réponses
9
Affichages
902
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…