Recherche fonction XOR pour Excel

P

Philippe

Guest
Bonsoir,

je fais aussi la factrice :


Bonjour,
Je cherche un code VBA pour introduire la fonction logique XOR (= ou
exclusif booléen) dans Excel.
Pourriez vous me dire si vous avez développé cette fonction, ou me dire

je pourrais la trouver.
Cordialement

Philippe


Celeda
 
M

Michel_M

Guest
Bonsoir Celeda,

Il y avait bien longtemps que j'avais eu l'avantage et l'honneur de papoter Excel avec vous, ma Chère.

Pour votre ami Philippe, ce galant homme, ci joint une modeste contribution utilisant XOR en VBA pour la vérification d'un mot de passe

Tu as 2 fichiers: admistrateur.xls et utilisateur.xls

Tu rentre un identifiant dans administrateur qui te délivre un mdp

dans utilisatezur tu écris l'identifiant et le mdp


c'est naîf comme systeme: si tu mets le nom dans le désordre, ca marche (zaza=zzaa) car on additionne la valeur ascii des lettres

Bisous

Michel
 

Pièces jointes

  • XORvouszavezditXOR.zip
    37.5 KB · Affichages: 308
C

Celeda

Guest
Bonsoir,


My darling, cela faisait en effet quelques temps,
(depuis ce fameux post où quelqu'un a eu la triste pensée
que nous nous n'étions point heureux en amour tous les deux!!!lol!!
que nenni que ce personnage se trompât sur notre aura personnelle!!!)

alors cela veut dire cela XOR, car tu t'en doutes bien
que je n'ai point voulu batailler le vba de ma pointe de mon épée
et que j'ai préféré laisser la question telle que posée,

et je te remercie d'y avoir répondu,

je ne sais si ce Philipppe (qui j'espère lui, sera un galant homme)
appréciera ta réponse mais je m'en vais de ce pas lui coller
le numéro du fil surlequel il pourra retrouver ce classeur que
j'enverrai aussi par email.

Et je te fais une révérence, soulignée de mon grand chapeau de campagne en osier accompagné de son ruban orange !!

Bien à vous mon cher et que la nuit soit aussi douce que la mienne,
toute étoilée.

Celeda
 
P

philippe

Guest
Merci à vous d'avoir pris en considération ma demande. malheureusement, ce n'est pas exactement ce que j'attendais. Pour être plus clair dans ma demande, je vais essayer devous faire un résumé du contexte. Je suis médecin généraliste d'une part, et d'autre part médecin dans un département d'information médicale pour médecin généraliste (visitez notre site www.sfmg.org et surtout http://omg.sfmg.org/ pour voir ce que nous faisons). Dans ce département, nous menons actuellement une recherche sur le dépistage des cancers, et j'ai la tâche d'écrire des tables référentielles sur les facteurs de risque et leur interaction. Si la science est capable de dire que, pour un certain niveau de risque, plusieurs facteurs sont en cause, elle est incapable de dire si la réunion de ces facteurs augmente ce niveau de risque. Donc dans mes tables il me faut une fonction "Xor" plutôt que 'Or". Or Excel ne propose pas dans la liste des fonctions disponibles au sein d'une feuille de calcul cette fonction logique. C'est pourquoi je cherche à implémenter cette fonction dans la liste des fonctions que propose Excel.
Merci d'avoir pris le temps de lire ce long discours !
Meilleures salutations et encore merci
Philippe
 
M

Michel_M

Guest
Bonjour,

ci dessous une fonction XOR qui compare 2 entiers (ne marche pas avec des réels ou du texte

Function non_ou1(dataA As integer, dataB As integer) As integer
non_ou = dataA Xor dataB
End Function

123 XOR 124 donne 7

mais...

Il faudrait plus de renseignements sur les types de données à traiter et surtout comment les traiter

cela peut être des comparaisons logiques dans le genre:
Alpha>beta XOR delta<=epsilon qui retournera vrai ou faux

ect...

la solution serait donc très différente et plus ou moins simple suivant la diversité des cas

Une maquette jointe (<50ko) serait la bienvenue.

Je vais aller regarder votre site tout à l'heure;

Si je peux aider un tant soit peu votre action, je le ferai de bon coeur. J'avais été heureux début 2004 sur ce forum de réaliser une appli pour une fac effectuant des recherches sur la leucémie. Donc, n'hésitez pas à me demander.

A+

Michel
 
P

philippe

Guest
C'est effectivement une comparaison logique que je cherche. Par exemple, si les facteurs A,B,C,D, E sont chacun de leur côté à l'origine d'une augmentation du risque dans un cancer, qui font passer ce risque d'un niveau moyen (celui d'une population de base) à un niveau majoré nécessitant une surveillance particulière, je ne sais pas dire si la présence de 2 ou plus de ces risques fait encore monter le niveau de risque d'un cran (au niveau dit "Elevé" ou encore "Très Elevé").
Je n'ai pas donc le droit d'écrire que :
risque majoré= OR(A;B;C;D;E) mais que
risque majoré= XOR(A;B;C;D;E)

Je teste cela sur un feuille Excel avec une table de vérité constituée de 0 et de 1 notant l'absence ou la présence d'un facteur de risque. Si le risque A est en A2, le risque B est en B2, etc... et que le calcul du niveau de risque est porté en F2, j'écrirai la formule suivante en F2:
=SI(XOR(A2:F2);"Risque Moyen";"autre risque")

En espérant avoir été assez clair...
En tous les cas merci de vous intéresser à mon problème !
Je dois m'absenter 48 heures, et je tacherai à mon retour de vous fournir la maquette que vous demandez.
A+
Philippe
 
S

Sylvain

Guest
bonjour,

comme vu ci-dessus on a :

Function x_or(a As Boolean, b As Boolean) As Boolean
x_or = a Xor b
End Function

après la fonction est disponible dans les feuilles de calculs (un peu plus lent qu'une fonction native).

Quand les tables de vérité ne sont pas vrai ou faux mais quelque chose entre les deux, je pense qu'il faut se tourner vers une autre logique :
<http://sn1.chez.tiscali.fr/floue/floue.html>
Il y a un classeur exemple à télécharger.

A+
 
C

Celeda

Guest
Bonjour,

C'est gentil Sylvain, ta démo (comme d'habitude d'ailleurs)
Très sincèrement, me concernant, j'ai du mal à me retrouver
dans le Floue, et c'est vraiment cas de le dire c'est d'un
flou complet, noir. Mais je ne suis pas une référence,
je préfère les choses terre à terre, du style, noir c'est noir,
c'est le desespoir chez moi si 2 + 2 ne font pas 4!! lol!!

Néanmoins, tu me donnes l'occasion de travailler sur ce
Floue et je t'en remercie et peut-être que pour Philippe
et Michel_M se sera plus explicit que pour moi.

On apprend tout le temps sur XLD.

Celeda
 
S

Sylvain

Guest
bonjour,

oui c'est vrai, pour tout dire, j'ai trouvé que le classeur est un peu difficile à regarder.

J'en ai un autre un peu moins complexe et plus généraliste sans macro.

C'est un peu moins ludique.


A+
 

Pièces jointes

  • floue.zip
    22.6 KB · Affichages: 108
P

Philippe

Guest
Bonjour,
Je reviens vers vous un peu plus tardivement que prévu et avec la maquette commandée par Michel. Je remercie aussi Sylvain de sa participation, même s'il présume un peu trop de mes compétences dans Excel et le VBA.
Je résume : je cherche une fonction Xor qui me permette de traiter un plage de cellule comme la fonction OR déjà implémentée dans Excel afin que je puisse écrire dans une cellule une fonction du type :
XOR(A1:E1)
Dans l'Excel joint, vous trouverez dans la première feuille pour info une liste des facteurs de risque du cancer du colon. Dans le deuxième onglet, un extrait de la table de vérité que je suis en train de construire. Je n'ai gardé que certaine des combinaisons qui pourraient caractériser la notion de risque Elevé pour le cancer du colon qui peut s'énoncer comme suit : Il faut que le facteur de risque 11 (colonne L) soit PRESENT, ET que UN des facteurs 4 à 8 (colonnes E à I) soit présent. La science a donc repéré que les associations suivantes de facteur de risque sont susceptible de faire passer un patient en situation de risque très elevé :
(11,4)
(11,5)
(11,6)
(11,7)
(11,8)
Par contre dans l'état actuel des connaissances, nous ne sommes pas capable de dire si une associaion telle que (11,4,6) fait passer du statut de risque Elevé à un autre statut, ou si ce statut reste inchangé.
Pour répondre à cette exigence je dois donc écrire que le risque Elevé correspond à la situation :
(11) ET [ (4) XOR (5) XOR (6) XOR (7) XOR (8)]
Autrement dit sur une feuille Excel :
=SI(ET($L6;XOR($E6;$F6;$G6;$H6;$I6));"Risque Elevé";"Niveau inconnu")
Malheureusement je ne dispose pas de cette fonction XOR et sachant que :
A XOR B = (A ET NonB) OU (NonA ET B)
j'écris donc dans ma feuille Excel (exemple cellule Q6) :
=SI(ET($L11;OU(ET($E11;NON($F11);NON($G11);NON($H11);NON($I11));ET(NON($E11);$F11;NON($G11);NON($H11);NON($I11));ET(NON($E11);NON($F11);$G11;NON($H11);NON($I11));ET(NON($E11);NON($F11);NON($G11);$H11;NON($I11));ET(NON($E11);NON($F11);NON($G11);NON($H11);$I11)));"Risque Elevé";"Niveau inconnu")
J'espère que tout le monde aura compris que j'en ai un peu marre de me brûer les yeux à vérifier les paranthèses et autres incohrences dans la formule, alors qu'un petit XOR me permettrait de l'écrire en UNE ligne !!!
Help !
Merci à tous d'avoir pris le temps de lire ces lignes pour le moins indigestes...
Dernière précision, si je me débrouille pas trop mal en analyse de données et autre tableaux croisés dynamiques, je suis nullissime en VBA. Je ne sais même pas comment on fait pour écrire du code.
A vous lire
Philippe
 

Pièces jointes

  • XorColon.zip
    3.4 KB · Affichages: 70
  • XorColon.zip
    3.4 KB · Affichages: 69
  • XorColon.zip
    3.4 KB · Affichages: 67
M

Michel_M

Guest
Bonsoir Philippe, Sylvain, Celeda

Ci joint une proposition sans utiliser XOR en basant sur les 2 lectures

Lecture du comité scientifique:

Si 11 est égal à 1 et que il y a AU MOINS un résultat égale à 1 entre 4 et 8 alors "risque élevé"
=SI(ET(L6=1;SOMME(E6:I6)>0);"risque élevé";"")

lecture DIM

Si 11 est égal à 1 et qu'il y plus d'un résultat égal à 1 entre 4 et 8 alors "risque inconnu",
sinon, si il y en a 1 et 1 seul, alors risque élevé.
=SI(L6<>1;"";SI(SOMME(B6:I6)>1;"niveau inconnu";SI(SOMME(B6:I6)=1;"risque élevé";"")))

Ce que je ne comprends pas c'est "99" sur la ligne 6 (2 résultats=1) et "niveau inconnu" sur la ligne 11 avec les m^mes résultats

A+

Michel
 

Pièces jointes

  • Colon_retour.zip
    4.4 KB · Affichages: 63
P

Philippe

Guest
Merci pour vos réponses si promptes !
Je vais prendre le temps de les étudier.
Pour répondre à Michel, le "99" est un terme générique utilisé par notre département lorsqu'une chaîne de traitement algorithmique arrive en Erreur ou en "inconnu" etc.
Compte tenu de vos deux propositions convergentes qui consistent à traiter le problème de façon numérique, je vais probablement me résoudre à utiliser cette méthode.
Bonsoir à tous, je vous tiens au courant de ce que je peux faire de vos réponses, et encore merci !
Philippe
 

Discussions similaires

Statistiques des forums

Discussions
312 322
Messages
2 087 274
Membres
103 503
dernier inscrit
maison