Excel:comparer une colonne a plusieurs autres
Medestrac
-
Medestrac -
Medestrac -
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?
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:
- Excel:comparer une colonne a plusieurs autres
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
- Excel trier par ordre croissant chiffre - Guide
6 réponses
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
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
Medestrac
wow, t'es vraiment trop fort! Non seulement tu as exactement compris ce que je voulais, mais en plus ton truc marche du tonnerre!
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?
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?
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?
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?
Bonjour,
Peut-on simplement modifier le dictionnaire afin de faire apparaître les codes qui correspondent à la même information ?
A+
pépé
Peut-on simplement modifier le dictionnaire afin de faire apparaître les codes qui correspondent à la même information ?
A+
pépé
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
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
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...
Ca c'est le principe...après pour le réaliser... j'y travaille...