Remplir une cellule en fonction de la valeur d'une liste

37liste-esi.xlsm (17.06 Ko)

bonjour à tous

je cherche à programmer sous VBa le remplissage d'une cellule contenue dans une feuille en fonction de la valeur (chiffre) donnée par une liste se trouvant dans une autre feuille.

j'ai essayé cette ligne de commande : sheets(1).range("A2")=WorksheetFunction.Index(sheets(2).range("L2:L16";Q2) pour utiliser la fonction INDEX de excel mais ça ne marche pas.

j'ai également enregistrer la macro en utilisant la fonction excel mais la ligne écrite (avec ActiveCell.FormulaR1C1=...) crée un lien permanent avec la cellule cible or je veux ecrire dans cette case que quand on appui sur un bouton.

je joint un document qui reprend ma situation avec les listes pour que ce soit plus claire.

merci pour vos idées et votre aide

cordialement,

Elhadj

Bonjour

En étant aussi peu clair je ne sais pas si tu vas avoir des réponses

Expliques ce que tu veux faire

Dans ton fichier pas de macro

Dans ton message tu notes sheets(3) alors que tu n'as que 2 pages

Tu notes aussi range("AD2:AD18";AB2) alors que ces zones sont vides

Tu notes aussi range("indice_trame") ??????

Tu reprends ta copies et tu y notes ce que tu veux, où tu le veux, et fais un ou plusieurs exemples

merci banzai64 pour ton retour

effectivement je me suis emmêlé les pinceaux, la description que je donne concerne bien ma situation mais comme le ficher est trop lourd et qu'il contient d'autres macros qui marchent, j'ai crée un nouveau fichier en ne mettant que le problème que je rencontre mais en oubliant de renommer les cases.

j'ai édité le premier message pour faire correspondre les cases. n’hésitez pas à me redemander si ce n'est toujours pas claire.

Bonjour

Banzai64 a écrit :

Tu reprends ta copies et tu y notes ce que tu veux, où tu le veux, et fais un ou plusieurs exemples

Ce n'est pas pour faire beau que j'ai demandé ça

A tout hasard car pas sur de comprendre ce que tu veux faire

Sheets(1).Range("A2") = Sheets(2).Range("L1").Offset(Sheets(2).Range("Q2"))

désole de n'avoir pas été clair

Pour reprendre l'exemple de la liste avec les indices (A, B, C,...): quand on sélectionne une lettre dans cette liste, la fonction " zone de liste déroulante (contrôle de formulaire)" envoi un numéro correspondant à la position de cette lettre dans notre liste qui apparaît dans une case (Q2 dans mon exemple).

Avec la fonction Index d'excel, je peux renvoyer dans une cellule (sheets(1).range(A2)) la valeur de la liste correspondant au numéro dans Q2 mais dans vba je n'y arrive pas. c'est ça que j'ai voulu expliquer dans mes précédents posts.

mais avec la ligne de commande que vous m'avez envoyé ça fonctionne très bien par contre j'ai pas compris l'utilisation de la fonction offset sans décalage de ligne si t'as le temps de m'expliquer.

merci en tout cas pour votre réactivité.

Bonjour

Tant mieux si c'est cela que tu voulais

eseydi a écrit :

l'utilisation de la fonction offset sans décalage de ligne

Dans ce cas il y a un décalage de ligne

Cela pourrait se traduire par

Sheets(1).Range("A2") = Sheets(2).Range("L1").Offset(Sheets(2).Range("Q2"), 0)

Comme il n'y dans ce cas aucun décalage de colonne on peut l'omettre

Dans le même ordre d'idée si pas besoin de décalage de ligne, on peut omettre le 0 mais surtout pas la , (virgule)

exemple

Sheets(1).Range("A2") = Sheets(2).Range("L1").Offset( ,Sheets(2).Range("Q2"))

On récupère la cellule sur la ligne 1 située à "Q2" colonne de L

décidément je ne pensais pas être si mauvais en communication je voulais bien parler de décalage de colonne et pas de ligne. en tous cas vos réponses sont très claires encore merci.

je suis entrain de chercher à faire d'autres choses mais je vais parcourir le forum voire si je peux trouver des réponses autrement je posterez un nouveau sujet.

bonne soirée

Rechercher des sujets similaires à "remplir fonction valeur liste"