Excel:comparer une colonne a plusieurs autres

Fermé
Medestrac - 27 mars 2012 à 09:58
 Medestrac - 28 mars 2012 à 08:39
Bonjour,

Une machine me renvoit un code dans Excel sous forme de 0 et de 1 placés dans des cellules adjacentes, mais que je peux éventuellement concatener.
Je dispose d'un "dictionnaire" m'indiquant les codes correspondant à différentes phases. Par exemple 0000 signifie "arrêt", et 1111 "marche".

Mon idée première était de concatener les 0 et 1 dans une cellule, puis de faire une recherche dans le tableau "dictionnaire" à l'aide de la fonction recherchev ou de l'excellente fonction recherchev-polyvalente (http://www.commentcamarche.net/faq/12543-vba-recherchev-polyvalente).

Seulement voilà: la machine me renvoit toujours 50 cellules composées de 0 ou de 1.
Par contre les codes du dictionnaires sont formés également de 50 cellules, dont certaines sont vides, car elles peuvent être des 0 OU des 1. Si je concatene, ça me donnera 0 01 ou 0x01 si je met un x à cette place. Dans les deux cas la fonction recherchev ne fonctionnera pas. Comment faire pour qu'Excel comprenne que 01x0 correspond à 0100 et à 0110?
A voir également:

6 réponses

eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
Modifié par eriiic le 27/03/2012 à 16:55
Bonjour,

une proposition par formule

Avec un dictionnaire (limité pour l'exemple) en J2:N5, mettre en E2 :
=INDEX($N$1:$N$5;MAX((((A2=$J$2:$J$5)+($J$2:$J$5=""))*((B2=$K$2:$K$5)+($K$2:$K$5=""))*((C2=$L$2:$L$5)+($L$2:$L$5=""))*((D2=$M$2:$M$5)+($M$2:$M$5=""))>0)*LIGNE($2:$5)))
formule matricielle à valider avec shift+ctrl+entrée

à recopier vers le bas.

Pour un dictionnaire plus grand remplacer tous les $5 par $'n° de la dernière ligne du dict.'
fichier exemple

eric
1
wow, t'es vraiment trop fort! Non seulement tu as exactement compris ce que je voulais, mais en plus ton truc marche du tonnerre!
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 398
Modifié par Vaucluse le 27/03/2012 à 10:06
Bonjour
pas
tout compris....!

à tout hasard:

pour concaténer l'édition

=SI(A1=1;1;0)&SI(B1=1;1;0)&SI(C1=1;1;0)&SI(D1=1;1;0)
qui vous renvoie 0000 si toutes les cellules sont vides.

et entrez vos codes de dictionnaires avec une apostrophe en tête de façon à ce qu'ils soient pris comme du texte:
='0000 affiche bien 0000, l'apostrophe n'apparaît que dans la barre de formule.
crdlmnt
Demandons nous si nous ne sommes pas seuls à comprendre ce que l'on explique?
0
Submin Messages postés 382 Date d'inscription vendredi 2 mars 2012 Statut Membre Dernière intervention 1 avril 2016 226
27 mars 2012 à 10:11
Je pense que tu va être obligé de passer par VBA. Par ailleur, je n'ai pas le temps ce matin de prendre 30 minutes pour t'aider a réaliser ce code.
Je repasserai donc plus tard dans la journée pour t'aider si personne ne l'a fait avant.

Si tu t'y connais en VBA, tu devrai y arrivé facilement.

Te as une boucle for qui va scruter tes 50 cellule 1 à 1.
Tu recherche ensuite si ton code contient un x, si non tu recherche directement la valleur exact mais si oui ...... (c'est la que le code devient difficile)

L'idée est la maintenant reste a faire le code...

Ce sont toujours des code de 4bits? pour alors cela dépend?
0
pépé35530 Messages postés 2942 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 19 mars 2016 1 382
27 mars 2012 à 11:12
Bonjour,

Peut-on simplement modifier le dictionnaire afin de faire apparaître les codes qui correspondent à la même information ?

A+

pépé
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci Submin, je pense également que je vais devoir passer par VBA, mais il me faudra optimiser au maximum le code pour ne pas perdre trop de temps, car les codes font en fait 50 bits, longueur fixe, et dictionnaire me donne 60 étapes.

Mon problème de numéro manquant est expliqué par l'exemple suivant:
"arrêt" est 0011 et "marche" est 1111
Lors du passage à l'étape "nettoyage", la deuxième position va devenir un 1 et la troisième un 0, matérialisé dans le dictionnaire par x10x.
Si avant cela on était en arrêt, on aura alors 0101, et si on était en marche on aura 1101
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 398
27 mars 2012 à 16:32
0
je sais déjà concaténer mes cellules, mais je pense que ça en m'aidera pas. Je suis en train de voir pour créer une fonction avec VBA dans laquelle je passe comme paramètre mon dictionnaire et mon code. Pour chaque colonne, je compare mon bit de code à celui du dictionnaire. Si celui du dico est non-vide et différent du bit de code, "supprimez" cette ligne là pour ne plus l'étudier lors du passage à la colonne suivante, puis passer à la colonne suivante. Quand j'arrive à la dernière colonne, toutes les lignes du dictionnaires incompatible avec le code ont été supprimées, il ne reste que celle(s) qui concordent.

Ca c'est le principe...après pour le réaliser... j'y travaille...
0