Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liste deroulante avec données dans un autre classeur

2 réponses
Avatar
luc c
bonjour

les données (rowsource) sont dans le classeur "donnée"
la macro est appellé dans le classeur "estimation"
la valeur (controlsource) doit etre transferer dans la feuille estimation
dans la cellule "b4"

donc je tape "result" dans le controlsource de la liste.
de cette facon la données choisi se transgert dans la cellule "b4" que j'ai
nommé par vba "result"

sub userform1_click(()
'je desactive l'ecran
'j'active la feuille données
'j'appel le userform1.show
'la liste est donc active
'lors du click je souhaite que userform.value s'inscrive dans la cellule
result

end sub

cela ne fonctionne pas ?
existe-t-il un truc pour les liste deroulant dont les données sont dans un
autre classeur ?

luc
découragé, je suis au desespoir,,,,

2 réponses

Avatar
JB
Bonjour,

-Avec Insertion/Nom/Définir, définir un nom (Maliste) vers les données
du classeur (Donnees.xls) qui doit être OUVERT.
-Dans Rowsource du menu:Maliste

Si le classeur Donnees.xls est fermé, utiliser ADO:

Private Sub UserForm_Initialize()
' dans Outils/Références cocher
' Microsoft ActivexDataObject 2.8 Library
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=Donnees.XLS"
Set rs = cnn.Execute("SELECT nom FROM MaListe")
Do While Not rs.EOF
Me.Choix.AddItem rs("nom")
rs.MoveNext
Loop
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub

JB

On 10 mai, 04:39, "luc c" wrote:
bonjour

les données (rowsource) sont dans le classeur "donnée"
la macro est appellé dans le classeur "estimation"
la valeur (controlsource) doit etre transferer dans la feuille estimation
dans la cellule "b4"

donc je tape "result" dans le controlsource de la liste.
de cette facon la données choisi se transgert dans la cellule "b4" que j'ai
nommé par vba "result"

sub userform1_click(()
'je desactive l'ecran
'j'active la feuille données
'j'appel le userform1.show
'la liste est donc active
'lors du click je souhaite que userform.value s'inscrive dans la cell ule
result

end sub

cela ne fonctionne pas ?
existe-t-il un truc pour les liste deroulant dont les données sont dans un
autre classeur ?

luc
découragé, je suis au desespoir,,,,


Avatar
LSteph
Bonjour *Luc C*,

Si tu mets les instructions que tu as utilisées au lieu de commentaires
on te dira plus facilement ce qui cloche.
A priori déjà
'lors du click ... userform.value
un userform n'est pas normalement porteur de cette propriété .value


l'événement click du userform doit être appelé en Private Sub dans le
module de code propre à ce Userform

la valeur (controlsource) doit etre transferer dans la feuille estimation
dans la cellule "b4"



on est pas obligé dans ce cas d'utiliser un controlSource exemple

Private Sub CommandButton1_Click()
Workbooks("estimation.xls").Worksheets("estimation").[b4]=Combobox1
unload me
end sub

De même pour le rowsource si par exemple on a comme
propriété rowsource de combobox1
indiqué c2:c10
Lorsqu'on est sur le classeur donnée, on a bien ce qui faut en c2:c10
donc lorsqu'on affiche le userform les valeurs sont bien dans combobox1
et suite auchoix leclick sur commandbutton1 renvoie bien
la valeur de combobox1 dans la référence indiquée par
Workbooks("estimation.xls").Worksheets("estimation").[b4]

En revanche si on appellle depuis "estimation.xls" une macro de
donnée.xls qui affiche le userform de donnée.xls, on affiche alors
dans combobox1 c2:c10 de la feuille active dans estimation.xls
Ce qui n'est sans doute pas l'effet voulu!

Il sera donc préfèré , (s'agissant de transiter des données d'un
classeur à un autre) d'alimenter combobox1 par une macro lors de
l'affichage de userform1, ainsi par exemple
(toujours dans le module privé du userform de donnée.xls):

Private Sub UserForm_Initialize()
Dim c As Range
For Each c In ThisWorkbook.Worksheets("données").[c2:c10].Cells
ComboBox1.AddItem c
Next
End Sub

'Cordialement.

'LSteph
'(un retour sur tes précédents posts serait probablement apprécié,
'au moins de savoir en quoi cela répond ou non)


bonjour

les données (rowsource) sont dans le classeur "donnée"
la macro est appellé dans le classeur "estimation"
la valeur (controlsource) doit etre transferer dans la feuille estimation
dans la cellule "b4"

donc je tape "result" dans le controlsource de la liste.
de cette facon la données choisi se transgert dans la cellule "b4" que j'ai
nommé par vba "result"

sub userform1_click(()
'je desactive l'ecran
'j'active la feuille données
'j'appel le userform1.show
'la liste est donc active
'lors du click je souhaite que userform.value s'inscrive dans la cellule
result

end sub

cela ne fonctionne pas ?
existe-t-il un truc pour les liste deroulant dont les données sont dans un
autre classeur ?

luc
découragé, je suis au desespoir,,,,