Comment convertir un code en clair en excel
RésoluTout 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
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.
-
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.-
ContributeurBonjour
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
-
-
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. -
Contributeureffectivement il manquait le xls
http://www.cijoint.fr/cjlink.php?file=cj200803/cij3554866966005.xls -
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. -
ContributeurN'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 -
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. -
Contributeurok, 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 -
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. -
Contributeurre 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 -
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. -
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 -
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. -
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. -
ContributeurSuper :-)
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 -
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. -
ContributeurBonsoir,
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 -
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. -
ContributeurBonjour,
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 -
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. -
Contributeurre,
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
- 1
- 2