Transcodification sous Excel
Résolu
Mat
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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,
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,
A voir également:
- Table de transcodification
- Table ascii - Guide
- Table des matières word - Guide
- Table des caractères - Guide
- Table de transcodification ✓ - Forum Oracle
- Tableau croisé dynamique ou table de pilote - Guide
3 réponses
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
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
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
=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
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,
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,
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.
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.
Ci joint le lien avec le fichier Excel exemple : http://www.cijoint.fr/cjlink.php?file=cj200906/cijHgRcqap.xls
Merci pour ton aide.
Cordialement,