entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

estelle.s

XLDnaute Junior
Bonjour

Je me suis peut etre mal prise dans mes recherches mais vous allez voir il m'a été impossible de formuler ma demande sans tomber dans une autre demande classique sur les combobox ... Donc n'hésitez pas à me rediriger, et pardon d'avance si je fais un doublon de poste :$

Alors prenons une cellule d'une feuille excel. j'aimerai lier le contenu de cette cellule a la sélection faite dans une combobox associée. Jusque là vous vous dites elle a vraiment rien cherché... Si si... car le pb c'est que je ne veux pas utiliser de sub change ou afterupdate ou autre du genre.

En réalité je crée mes combobox dynamiquement au fur et à mesure de ma macro pour en avoir un nombre précis mais variable (ce nombre est en fait le nombre de lignes non vides d'une colonne sur une autre feuille du meme classeur). Je ne sais donc pas à l'avance combien j'aurai de combobox, et donc combien de sub change (ou autre) je devrais appeler. D'ou lidée d'insérer automatiquement en meme temps que je crée toutes les combobox nécessaires, une cellule associée à chaque combobox. Chaque cellule aura alors directement la valeur de la combobox qui lui est associée (et créée en meme temps). Du coup à chaque modification de la combobox associée, la valeur de la cellule liée change aussi mais sans passer par une sub du controle.
Je ne sais pas si c'est faisable, ou bien s'il faut plutot que je cherche vers une technique pour appeler autant de sub change ou afterupdate que de combobox créées.

En résumé et pour essayer d'être claire :
Je voudrais : soit écrire une formule liant le contenu d'une cellule à une valeur d'une combobox en passant par vba MAIS sans passer par les sub liées aux modifications d'une combobox (change, afterupdate, ect...)
soit trouver une autre idée pour réaliser tt ça !

Si vous avez besoin d'infos supplémentaires n'hésitez pas, je vous remercie déjà d'avance de votre aide !

Estelle
 
G

Guest

Guest
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

bonjour estelle,

le plus simple est de donner l'adresse d'une cellule liée à la propriété LinkedCell des combobox. Cela peut-etre la cellule sur laquelle est positionnée la Combobox.

MaComboBox.LinkedCell="A1" par exemple

Ainsi A1 recevra la valeur de la combobox.

A bientôt
 

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Bonjour hasco.

de nouveau ton aide m'est précieuse...
Ayant retenu le coup de main d'hier, en utilisant la propriété adress j'arrive même à utiliser linkedcell avec une variable de ligne pour la cellule que j'utilise. ^^

Merci beaucoup !!!
 

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Oupsla en fait une question dans la meme veine me vient :

et si je veux exploiter la valeur de ma combobox pr aller l'identifier à un numéro que je lui associe ... pour afficher le numéro des que la valeur de la combo change (et pas afficher la meme valeur que la combo), linkedcell n'est plus utilisable alors ???
 
G

Guest

Guest
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Re bonjour Estelle,

et si je veux exploiter la valeur de ma combobox pr aller l'identifier à un numéro que je lui associe ... pour afficher le numéro des que la valeur de la combo change (et pas afficher la meme valeur que la combo), linkedcell n'est plus utilisable alors ???

Associer un numéro à la valeur ou à la combobox?
Chaque ligne d'une combobox possède déjà un numéro qui va de 0 à n
et qui est récupérable par la propriété ListIndex. Mais là il faut passer par Click ou change, ce que tu ne veux pas.
Mais tu peux aussi créer les comboxbox avec Deux colonnes
Propriété columnCount=2
en demandant que la valeur de la combo soit la première colonne
Propriété BoundColumn=1
En cachant cette colonne
Propriété columnWidths="0pts;"
Et en remplissant cette colonne par les numéros souhaités.
A ce moment là A1 recevra le numéro de la colonne 1 puisque ce sera elle qui renverra la valeur de la combo(BoundColumn)

voili, le tour est joué.
 

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Alors ce serait plutôt pour associer un numéro à la valeur sans qu'il s'agisse de l'index. Du coup ton idée des 2 colonnes est parfaite pour ça.
Pb, je n'arrive plus à remplir ma combo. Si tu te souviens, hier tu m'as montrée ça pour définir une plage :

Set plg = Sheets("n° projets").Range("A2:A" & Sheets("n° projets").Range("A" & Rows.Count).End(xlUp).Row)

Comme je placerai mes numéros en colonne B de la meme feuille, j'ai voulu faire :
Set plg = Sheets("n° projets").Range("A2:B" & Sheets("n° projets").Range("A" & Rows.Count).End(xlUp).Row)

suit alors :
Set oListe = Worksheets(1).OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=0, Top:=h, Width:=96.75, Height:= _
17)

oListe.LinkedCell = ActiveSheet.Cells(n, 2).Address
oListe.ColumnCount = 2
oListe.BoundColumn = 1
oListe.ColumnWidths = "0pts;"
oListe.ListFillRange = "'n° projets'!" & plg.Address

mais cela me renvoit une erreur : méthode ou propriété non gérée par cet objet. Comme je ne peux pas faire tourner en pas a pas (d'ailleurs ca m'intrigue) je n'arrive pas à situer où j'écris mal.

si tu pouvais encore une fois me secourir !!!!
 
G

Guest

Guest
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Re Estelle,

Pourrais-tu renvoyer le fichier d'hier avec les modification d'aujourd'hui, je ne l'ai plus, je pensais le problème résolu.(Peux pas tout conserver)

A tout à l'heure.
 

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Bonjour Hasco

Désolée de ne pas avoir pu t'envoyer le fichier hier soir, le voici donc avec un peu de retard:
 

Pièces jointes

  • essai_prg_e.zip
    27.3 KB · Affichages: 78
G

Guest

Guest
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Bonjour Estelle.

Voici la macro modifiée.
Notes:

1 - Lorsqu'il y a un problème avec une propriété lors dela création d'un objet incorporé. Essaie de voir si cette propriété ne fait pas partie des propriétés de Object. exemple: oListe.Object.BoundColumn

2 - Il apparaît parfois un problème de Type avec la propriété LinkedCell. Si pour une raison ou une autre, cela se produit. Il faut tester avant la valeur de la cellule dont l'adresse sera donnée à la propriété. Ex:
If IsError(Cellule) then Cellule.ClearContents '(ou cellule="")
oListe.LinkedCell=Cellule.Address

3 - Ne serait - il pas plus judicieux de ne créer qu'une Combobox et de la déplacer sur évènement Selection_Change de la colonne A et de modifier à ce moment là la propriété LinkedCell? Se serait peut-être moins lourd à gérer?

A bientôt

EDITION1: Je garde ton fichier sous le coude, cette fois-ci;)
 
Dernière modification par un modérateur:

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Re

Alors pour tes modifs ça marche bien. Je fais la suite pour voir si j'arrive à extraire mes infos comme je veux et si ça marche je te dis.

Par contre je en comprends pas bien

2 - Il apparaît parfois un problème de Type avec la propriété LinkedCell. Si pour une raison ou une autre, cela se produit. Il faut tester avant la valeur de la cellule dont l'adresse sera donnée à la propriété. Ex:
If IsError(Cellule) then Cellule.ClearContents '(ou cellule="")
oListe.LinkedCell=Cellule.Address

Cela signifie qu'en cas de pb de type il faut vider la cellule pour pouvoir ensuite y lier la combo ? Serait-il alors utile de vider ttes les cellules de destinations avant de définir la propriété linkedcell ?

Pourrais tu aussi m'expliquer ton idée en pt 3 ??? j'ai tendance à compliquer les choses de manière générale ... mais je suis pour la simplification qd meme ! Mais que veux tu dire ? Une seule combo au début et des que celle ci est utilisé la déplacer a la cellule en dessous et ainsi de suite c'est ca ??
 
G

Guest

Guest
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Bonne matinée Estelle,

Serait-il alors utile de vider ttes les cellules de destinations avant de définir la propriété linkedcell ?

Oui se serait une sécurité pour prévenir d'éventuels problèmes utltérieurs.

des que celle ci est utilisé la déplacer a la cellule en dessous et ainsi de suite

Oui c'est une bonne solution.
Une autre est de tester la selection de l'utilisateur.
S'il se position en colonne A, déplacer la combo et valoriser LinkedCell à la nouvelle adresse de cellule. Comme cela l'utilisateur ne pourra pas entrer de valeurs qui ne sont pas dans la liste (à par bien-sûr par la barre de formule).

Ce peut-être une mélange des deux solution aussi.

A toi de voir se qui te convient le mieux.

A bientôt
 
G

Guest

Guest
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Autre idée:

Si tu ne crée qu'une combo, tu peux le faire directement sur la feuille sans passer par VBA.
tu nommes de façon dynamique la plage source des données de la Combo qui s'ajustera automatiquement aux nouvelles Valeur de N° de projets.

Si tu choisis cela et que tu as du mal à le réaliser, n'hésite pas...
 

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

A toi aussi Hasco bonne matinée

Je suis impressionnée par la ferveur des programmeurs de vba comme toi qui savent se rendre indispensables ;)

citation :
S'il se position en colonne A, déplacer la combo et valoriser LinkedCell à la nouvelle adresse de cellule. Comme cela l'utilisateur ne pourra pas entrer de valeurs qui ne sont pas dans la liste (à par bien-sûr par la barre de formule).

Je fais le déroulement du fonctionnement que je me représente de ta sol. Si j'ai tt faux dis moi. A clic sur nouveau, on efface ttes les cells que lon va renouveller. Apparait ensuite une seule combo, de 2 colonnes contenant la plage de la feuille n° projet. Qd l'utilsateur fait son choix ds cette combo qui ne figure visuellement que le nom du projet, je fais suivre le numéro du projet ac la propriété linkedcell vers la cellule de la colonne voisine. Puis la combo disparaitrait ? Laissant alors la valeur du nom ds la cellule ou était placée la combo peut etre ? Puis la combo se déplacerait a la cellule du dessous.
Mais dans ce cas la, comment l'utilsateur en cas d'erreur de choix peut revenir sur la combo d'avant sa manip ?
Et est ce qu'il faut détecter s'il se positionne sur une cellule de la conne A pr faire apparaitre la combo ? ou s'il est sur la seule combo présente ?

en te remerciant encore de m'aider à paufiner tt ça...

PS : moi qui suis novice sur ce forum, comment fais tu pr faire tes citations ??? moi je fais du copier coller mais dois yavoir uen autre technique ...
 

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

Bon j'ai mis trop longtemps à m'expliquer dans le message davant du coup j'ai raté ta nouvelle idée...

J'y avais pensé, mais je ne sais pas utiliser les controles sans passer par le vba. enfin si mais pas de maniere dynamique. Et dc je ne sais pas s'il est possible de déplacer cette combo au fur et a mesure sans passer par vba. J'imagine quavec top c'est faisable, mais il existe une maniere de faire un test sur l'utilisation de la combo sans passer par vba ?
Et puis reste mon pb en cas de mauvaise manip et souhait de retour ...
 

estelle.s

XLDnaute Junior
Re : entrer la valeur d'une combobox ds une cellule SANS sub change (ou autre)

re.

Alors la tte 1ere sol de départ avec la création de ttes les combo fonctionne bien pour obtenir le résultat que je veux. Merci bcp ^^

Mais je veux bien tenter de réduire tt ca a une seule combo ...
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 511
Membres
103 239
dernier inscrit
wari