Transcodification sous Excel

Résolu
Mat -  
eriiic Messages postés 24581 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,
Configuration: Windows XP Internet Explorer 6.0

3 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. Mat
       
      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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. Mat
       
      Merci,

      Cordialement,
      0
    2. Mat
       
      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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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