Transcodification sous Excel

Résolu/Fermé
Mat - 2 juin 2009 à 12:17
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 4 juin 2009 à 07:38
Bonjour,

je souhaite affecter des valeurs à partir d'un tableau source dans une macro VBA. Cependant la recherchev ne me permet pas d'aboutir.
Ce que j'essaye de faire :
Tableau source (chaque lettre et chaque chiffre est dans une cellule);
X 1 a
X 2 b
X 3 c
Y 1 d
Y 2 g
Z 8 h

Tableau cible;
1 devient a si X
1 devient d si Y
8 devient h car Z
...

Le tout est de faire ce travail sur un grand nombre de valeurs. C'est une recherchev "conditionnelle".
Le problème c'est que les valeurs de la deuxième colonne peuvent être les mêmes pour X, Y et Z.
La plage à sélectionner pour la recherchev dépend de la première colonne (X,Y et Z).


Cordialement,

3 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
2 juin 2009 à 14:48
Bonjour,

1 devient a si X
si X où ???

et encore mieux, dépose ton fichier exemple sur cijoint.fr et colle ici le lien fourni

eric
0
Bonjour,

Ci joint le lien avec le fichier Excel exemple : http://www.cijoint.fr/cjlink.php?file=cj200906/cijHgRcqap.xls

Merci pour ton aide.

Cordialement,
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
2 juin 2009 à 16:37
en Tableau cible B4:
=INDEX('Tableau de transco'!C:C;SOMMEPROD((A4='Tableau de transco'!A3:A12)*('Tableau source'!B4='Tableau de transco'!B3:B12)*LIGNE('Tableau de transco'!A3:A12)))

à recopier vers le bas
eric
0
Merci,

Cordialement,
0
Bonsoir Eric,

La formule fonctionne mais je souhaiterais, si possible, une précision.
En effet lorsque le tableau de transcodification est incomplet, des valeurs sont quand même affectées par la formule.
Est il possible de mettre "NA" quand il n'y a pas de valeur associée dans le tableau de transcodification?
Ci dessous l'exemple (en jaune les variables qui sont affectées, de manière aléatoire?, alors qu'elles ne sont pas dans le tableau de transcodification.


http://www.cijoint.fr/cjlink.php?file=cj200906/cijNXOUWTd.xls

Cordialement,
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
4 juin 2009 à 07:38
Bonjour,

Ah ben oui, effectivement. Tu viens de me faire découvrir qcq chose sur la fonction index...
De plus, pour recopier vers le bas il faut fixer les plages avec des $ ($A$3:$A$12,....)
Et c'est quoi ce ;faux apparu à la fin ? A la limite ;1 pour le numéro de colonne...
2 possibilités :
- la saisir en matricielle en validant avec shift+ctrl+entrée, si bien fait la formule s'encadre de { }.
=INDEX('Tableau de transco'!C:C;SOMMEPROD((A4='Tableau de transco'!A3:A12)*('Tableau source'!B4='Tableau de transco'!B3:B12)*LIGNE('Tableau de transco'!A3:A12)))
si absent tu obtiendras 0

- ou le test :
=SI(SOMMEPROD((A4='Tableau de transco'!$A$3:$A$12)*('Tableau source'!B4='Tableau de transco'!$B$3:$B$12)*LIGNE('Tableau de transco'!$A$3:$A$12))=0;NA();INDEX('Tableau de transco'!C:C;SOMMEPROD((A4='Tableau de transco'!$A$3:$A$12)*('Tableau source'!B4='Tableau de transco'!$B$3:$B$12)*LIGNE('Tableau de transco'!$A$3:$A$12))))

avec une petite préférence pour la 2nde malgré sa longueur car si tu remplaces C:C par $C$3:$C$12 la première réagira comme avant.

eric

PS: nomme tes plages, tu auras qcq chose de plus lisible.
0