Comment convertir un code en clair en excel

Résolu
Bonjour,

Tout d'abord je débute en excel, et je vois pas trop comment m'y prendre.

Je reçois des feuilles excel dont les certaines cellules sont remplies avec des codes.

Ces codes correspondent à un nom en clair. J'ai environ 100 codes.

j'ai une liste de correspondance de chaque code avec son nom en clair.

je voudrai lorsque que je copie la cellule de la feuille source dans ma feuille et dans sa cellule que le code et le nom en clair s'inscrive dans ma cellule.

Un petit exemple : Je reçois une feuille et dans la cellule A1 il y a "MATH"

Si je copie cette cellule de la feuille et que je la colle dans la cellule de ma feuille je voudrai que dans ma cellule il y ait MATH Mathématique.

Merci d'avance à toutes et tous qui vont m'aider.
Configuration: Windows XP
Internet Explorer 7.0

31 réponses

Résumé de la discussion

Un besoin pratique en Excel consiste à afficher automatiquement le nom associé à un code saisi, en utilisant une liste de correspondances entre codes et libellés pour éviter les saisies manuelles répétitives. Plusieurs répondants proposent une macro VBA exécutée sur l’événement SheetChange: elle utilise des zones nommées (codes et zoneValidation) pour détecter la saisie, rechercher le libellé correspondant et remplacer la valeur saisie. La solution recommande d’afficher le code et le libellé en clair dans la cellule ciblée, en assurant que les codes et libellés se trouvent dans une plage de référence nommée. En pratique, la mise en œuvre implique de nommer des plages (codes et zoneValidation) et d’ajouter des protections pour éviter les boucles d’événements lors du remplacement.

Bobot (l’IA à votre service)
  1. Bonsoir Furtif,

    Non pas du tout, c'était juste un exemple.

    En fait je peux reformuler ma demande.

    je voudrai lorsque que je saisi ce que j'appelle un code en fait qui est généralement composé de 3 lettres et de 2 chiffres que la cellule se remplisse du code saisi ainsi que le nom en clair.

    Exemple :

    je saisi dans ma celulle VIL01

    je fais ENTER

    et dans ma celulle j'ai VIL01 Marseille

    je saisi TRU60

    et dans ma cellule j'ai TRU60 Saint quentin en yvelines.

    Donc le code n'est pas le début des noms en clair.

    J'espère que c'est plus clair pour tout le monde.

    Je rappelle que j'ai une centaine de code et donc une centaine de nom en clair associé que j'ai en liste sur une feuiille excel.

    Merci de vos réponses.

    Bonne soirée.
    2
    1. Contributeur
      Bonjour

      Difficile de modifier le libellé d'un cellule selon l'entrée

      une seule solution à mon sens, mais je ne suis pas le meilleur sur le sujet:

      Faire une liste des codes+libellé(voir ci après) au dessus de la 1° ligne de code à rentrer, dans la même colonne et masquer les lignes correspondantes selon:
      Sélectionner les lignes, barre des taches / Format / Ligne / Masquer
      Ensuite
      Barre des tâches / Outil / Option/ Onglet modification/
      Cocher la case:saisie semi automatique de cellule

      Avec cette option Excel, ira chercher dans la liste supérieure l'appelation complète dés que vous aurez écrit la partie
      du texte complet correspondante à une seule option de cette liste et l'inscrira automatiquement

      Par ailleurs
      Je pense que vous pourriez, sur une feuille masquée ou dans deux colonnes loin du champ utilisé, rentrer:

      une colonne avec la liste des codes
      une colonne avec en correspondance la liste des nlibellés

      Vous avez ensuite deux options pour votre tableau, mais il vous faudra toujours trois colonnes.

      Donc, admettons:
      Votre entrée sur Colonne A,B,C,
      En colonne X:
      liste des codes
      En colonne Y
      le tout à partir de la ligne 1jusqu'à la ligne 100
      Correspondance des libellés

      1° Solution
      Colonne A, vous rentrez les codes
      Encolonne B,B1 la formule
      =A1&RECHERCHEV(A1;$X$1:$Y$100;2;0)
      dans ce cas vous avez le code en A1 et le code + le libellé en colonne B

      2° solution
      en A1 le code
      En B1:
      =RECHERCHEV(A1;$X$1:$X$100;2;0)
      dans ce cas, vous avez le code en A et le libellé seulement en B
      Bien entendu ces formules sont à tirer sur la hauteur de votre champ
      Attention aux signes: ( & ; $ : )

      En dernier lieu vous pouvez aussi:
      créer une liste en regroupant les codes et les libellés, simplement avec la formule:=Cellule code& cellule libellé
      La nommer:
      Sélectionner le champ / barre des tâches / Insertion / Nom / metter le nom souhaité (admettons:liste)
      Dans votre colonne de code à remplir:
      "autoriser":liste
      Source:rentrez le nom de vote liste:LISTE
      OK
      Ainsi quand vous sélcetionnerez une cellule de ce champ, une liste déroulante des codes completés s'affiche et vous n'avez plus qu'à cliquer sur la réf choisie

      0
  2. re Eriiiccccc,

    Bon ca roule ce coup ci, c'est nikel, ca marche super.

    on se moque pas pour le If Sh.Name = "nom_de_ta_feuille_ou_est_ta_liste" Then Exit Sub

    voilà ce que c'est que de faire du copier coller lollll.

    encore merci et excellente soirée.

    et là le problème est bien résolu.
    0
    1. Contributeur
      effectivement il manquait le xls
      http://www.cijoint.fr/cjlink.php?file=cj200803/cij3554866966005.xls
      0
      1. re Eriiiiiic,

        Merci pour tout le mal que tu te donnes.

        Je crois que je vais devoir sortir les gris gris lollllll

        j'ai fichier non accessible sur ton url

        http://www.cijoint.fr/cjlink.php?file=cj200803/cij3554866966005.

        bonne soirée et merci.
        0
        1. Contributeur
          N'aie pas peur petit être, ta macro est bien dedans... :-)
          Et que tu ne la vois pas c'est normal, il s'agit d'une macro 'évènement' (qui réagit à un événement dans le classeur ou une feuille), en l'occurence une cellule qui change de valeur (sub Private Sub Workbook_SheetChange()) et ces macros sont 'private'.
          Pour être visible dans le menu une macro doit être publique.
          Il faut regarder dans ThisWorkbook pour la voir.

          D'ailleurs je sens la fatigue te gagner... ;-)
          Quand j'écris remplace ... par If Sh.Name = "nom_de_ta_feuille_ou_est_ta_liste" Then Exit Sub
          il ne faut pas écrire nom_de_ta_feuille_ou_est_ta_liste tel que... mais "références"... hummm
          Et c'est mieux de laisser la déclaration des variables avant toute ligne de code.
          Voici la version (peu) corrigée
          http://www.cijoint.fr/cjlink.php?file=cj200803/cij3554866966005.

          Mais non, ne perd pas espoir, tu te débrouilles très bien pour une débutante :-)
          eric
          0
          1. re eric,

            plus le m'acharne et moins ca marche.

            je comprend plus rien

            j'ai bien une macro dans mon classeur ??????

            quand j'ouvre mon fichier il me demande bien d'activer les macros

            mais quand je l'ouvre et que je fais outils macro macros je devrai voir le nom de ma macro ???

            l'exemple ici

            http://www.cijoint.fr/cjlink.php?file=cj200803/cij3529993486057.xls

            là je suis perdue !!!!!!!!!!! snif snif je perd espoir lollllll.

            au secours.
            0
            1. Contributeur
              ok, merci pour ce ralenti avec arret sur image
              et bien essaie en remplaçant
              If Sh.Name <> "Feuil1" Then Exit Sub
              par
              If Sh.Name = "nom_de_ta_feuille_ou_est_ta_liste" Then Exit Sub
              et tu gardes en commentaire le contrôle de la zone de saisie...
              dis moi ce que ça donne

              eric
              0
              1. Re Eriiiiiiccccc,

                je te remercie bcp de d'aider peut être que j'abuse.

                je récapitule mes problèmes, et ou j'en suis.

                tu m'avais fournis une solution ou tu disais que les codes et le libellé pouvait etre sur une autre feuille que j'appelle références.

                dans ce cas là quand on voulais rentrer un nouveau code dans la feuille références ca faisait une erreur 1004.

                Tu avais solutionné le problème en me répondant celà :

                Le 1er pb me laisse dubitatif, à-priori excel ne sait pas calculer une intersection sur 2 feuilles différentes.
                Tu peux le parer en mettant
                If Sh.Name <> "Feuil1" Then Exit Sub
                en 1ère ligne de code. "Feuil1" étant le nom de la feuille où tu fais la saise, il faudra penser à modifier ici si tu renommes ta feuille.

                et effectivement le problème etait résolu et tout fonctionné correctement.

                en ce qui concerne les zones de validation discontinues on a aussi réglé le problème et tout allait bien.

                Seulement voilà j'ai plusieurs feuilles dans le meme classeur à valider, feuilles Nom1 Nom2 à Nomx .

                Donc de nouveau si je supprime " If Sh.Name <> "Nom1" Then Exit Sub " j'ai une erreur quand je rentre de nouveaux codes et en plus quand je suis sur une autre feuille que Nom1 ca plante aussi.

                donc voilà je suis désolée grrrrrrrrrrrrrrr pas facile excel.

                Bonne journée.
                0
                1. Contributeur
                  re débutante :-)

                  pas bcp le temps d'approfondir mais non il n'y a pas de référence au nom de la feuille, juste à la zone nommée zoneValidation.
                  A la limite si tu veux simplifier met une apostrophe simple ' devant
                  ' If Intersect(Target, Range("zoneValidation")) Is Nothing Then Exit Sub pour le mettre en commentaire.
                  Plus de nécessité de definir ce nom, et la macro réagira sur toutes les cellules de toutes les feuilles du classeur. En sachant que si la chaine exacte est trouvée elle sera remplacée.
                  Par contre il faudra que le code soit quand même présent dans tous les classeurs, tu peux utiliser un classeur modèle et l'enrregistrer sous un autre nom ensuite.

                  eric
                  0
                  1. Re eriiicccccc,

                    au fait j'ai un pti souci lolllllll.

                    du fait qu'il faille mettre le nom de la feuille excel dans la macro ca veut dire que pour chaque feuille de mon classeur je dois modifier la macro lui donner un autre nom et changer le nom de la feuille dans le code.

                    ah nonnnn ne me dit pas ca eriicccccc

                    dis moi que excel et bon et fort et qu'il y a une astuce.

                    bonne journée et merci encore à toi Ericccccccc.
                    0
                    1. re eric,

                      au fait ca pose un vrai problème de devoir mettre le nom de la feuille excel dans ou code ou se trouve la zone à validier, car dans mon cas j'ai plusieurs feuilles mdrrrrrrrrrrrr.

                      il y a je suis certaine une astuce a trouver lolllll
                      0
                      1. Re eric,

                        encore merci pour tout.

                        tout est ok maintenant.

                        j'ai mis en résolu.

                        et merci aussi à tous les autres pour leur aide.

                        Bonne journée.
                        0
                        1. Re eric,

                          bon tout est Ok ca marche impec donc je mets en résolu.

                          et j'ouvre un autre post avec une autre tite demande.

                          Bonne journée.
                          0
                          1. Contributeur
                            Super :-)
                            Pas de soucis, tu ne m'as pas embeté
                            N'oublie pas de mettre en résolu quand ça te paraitra ok.
                            Bonne continuation et bonne journée
                            eric
                            0
                            1. Hellooooo,

                              Super Eric ca marcheeeeeeee.

                              Je deviens une Pro d'excel, macro VBA lolllll et ca marche.

                              Je continue et reviendrai surement t'embeter.

                              encore merci pour ton aide.
                              0
                              1. Contributeur
                                Bonsoir,

                                Si si, c'est bien ça.
                                Essaie encore... ;-)
                                Si excel t'embete supprime d'abord ton ancienne définition et recrée la en 2 zones.
                                Ou sinon tu l'édites sous ce format =Feuil1!$C$8:$C$17;Feuil1!$K$8:$K$16 et tu valides par ok
                                eric
                                0
                                1. Bonsoir Ericccccc,

                                  Me revoilàààà.

                                  Bon ok ca marche en rajoutant la ligne au début du code.

                                  Par contre concernant mes zones de validation, ca ne marche pas.

                                  C'est peut etre que je ne sais pas sélectionner correctement 2 zones qui sont discontinues.

                                  je grise la première colonne et ensuite j'appuie sur CTRL pour griser la 2 eme colonne .

                                  Aie aie je sens que c'est pas ca, pfffff je suis vraiment nulle.

                                  Mais bon j'avance quand meme.

                                  Allez encore un pti coup de main.

                                  Merci d'avance.
                                  0
                                  1. Contributeur
                                    Bonjour,

                                    Pour le 2nd pb tu selectionnes l'ensemble de tes zones avant de définir ton nom, elles peuvent être discontinues.
                                    Le 1er pb me laisse dubitatif, à-priori excel ne sait pas calculer une intersection sur 2 feuilles différentes.
                                    Tu peux le parer en mettant
                                    If Sh.Name <> "Feuil1" Then Exit Sub
                                    en 1ère ligne de code. "Feuil1" étant le nom de la feuille où tu fais la saise, il faudra penser à modifier ici si tu renommes ta feuille.
                                    Bonne journée
                                    eric
                                    0
                                    1. Bonsoir,

                                      grrrr ca fait 3 fois que je poste et que ca amrche pas.

                                      me revoilààààààà.

                                      Bon, Eric merci bcppppp ca avance bien mais encore des soucis.

                                      Dans ton exemple ca plante quand on veut rajouter des codes dans la liste.

                                      Et autre problème, aie aie aie j'ai 2 zones dites zoneValidation.

                                      un exemple.

                                      http://www.cijoint.fr/cjlink.php?file=cj200802/cij1170539325903.xls

                                      encore merci pour votre aide.
                                      0
                                      1. Contributeur
                                        re,
                                        heuuuu, en fait j'ai eu un pb en déplaçant le code... il n'avait pas bougé
                                        Voilà ce que c'est de faire en 2 min... :-)
                                        Je laisse ton ajout qui effectivement peut servir, merci.

                                        Donc, débutante, ton code à coller dans thisworkook :
                                        Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
                                            Dim s As String, i As Long
                                            Dim codes()
                                            If Intersect(Target, Range("zoneValidation")) Is Nothing Then Exit Sub
                                            If Target.Count > 1 Then Exit Sub
                                            If TypeName(Target.Value) <> "String" Then Exit Sub
                                            s = UCase(Target.Value)
                                            codes = Range("codes").CurrentRegion
                                            For i = 2 To UBound(codes)
                                                If s = UCase(codes(i, 1)) Then
                                                    Application.EnableEvents = False
                                                    Target.Value = codes(i, 2)
                                                    Beep
                                                    Application.EnableEvents = True
                                                    Exit For
                                                End If
                                            Next i
                                        End Sub
                                        


                                        et l'exemple:
                                        http://www.cijoint.fr/cjlink.php?file=cj200802/cij7907429105854.xls

                                        eric
                                        0
                                        • 1
                                        • 2