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

Lire des données dans un classeur fermé : MICH DENIS : AU SECOURS...

1 réponse
Avatar
goodwave
Bonjour denis,

ci dessous la réponse que tu as faite à une question qui me rend dingo
depuis trois jours : un combobox dans un classeur qui doit réccupérer
une liste dans un autre classeur sans l'ouvrir.
J'ai tout bien fait comme tu le notes (librairie activeX et tout et
tout...)
Mais voila un problème :
lorsque j'insère ton code ci dessous :
dans le thisworkbook du classeur cible (incluant l'userform contenant
le combo) :
'-------------------------------
Private Sub Workbook_Open()

MisejourCombobox

End Sub

j'ai le droit à une erreur de compilation : SUB OU FONCTION NON
DEFINIE.

Bon, c'est pour la mise à jour alors je le vire. MAIS : dans ce cas,
la liste s'inscrit bien dans mon combo lorsque le fichier source est
ouvert (je précise que j'ai rajouté dans propriétés de mon
combo:RowSource:[TEST.xls]Feuil1!MaListe, Mais elle disparaît dès que
je le ferme.
Bref, ça marche pas et c'est exactement le code qu'il me faut. Inutile
de préciser que je suis une bille en programmation (je débute grave),
mais je connais bien excel, promis je n'ai fait aucune gaffe de
"principe"
HELP HELP HELP
Merci de bien vouloir me filer un petit coup de main.
A bientôt.

Bonjour Utilisateur1,

ATTENTION AU NOM DES OBJETS dans les
procédures. Tu dois les adapter selon les noms des
objets de tes classeurs.

Voici une façon de faire :

Dans ton classeur fermé où est la source des valeurs de ton
combobox du classeur ouvert,

Transforme la colonne de données en une plage nommée : MaListe
Barre des menus / insertion / nom / définir
NOM : MaListe
fait référence à : =Feuil1!$A$1:$A$14

Tu dois t'assurer qu'elle est à jour lorsque tu ferme ton classeur,
tu peux utiliser l'événement ( il y d'autres façons)
'-----------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

With Worksheets("Feuil1")
.Range("A1:A" & Range("A65356").End(xlUp).Row).Name = "MaListe"
End With
ThisWorkbook.Save

End Sub
'-----------------------


Maintenant dans ton classeur où tu veux initialer ton combobox :

TU DOIS AJOUTER LA BIBLIOTHÈQUE SUIVANTE :

Fenêtre VBE(visual basic editor) / barre des menus / options /
références/
tu coches : "Microsoft activex data object 2.1 librairy"


dans le thisworkbook de ce classeur :
'-------------------------------
Private Sub Workbook_Open()

MisejourCombobox

End Sub
'-------------------------------



Et dans un module standard :
'--------------------------------
Sub MisejourCombobox()

Dim Chemin As String, LaListe As Variant, Nb As Long
Dim Conn As Connection, Rst As New ADODB.Recordset
Chemin = "C:\Mes documents" 'À déterminer
'le nom du document exemple est Test.xls À déterminer
'la permière de la liste est une étiquette de colonne.

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & "\test.xls;" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

'Ouvrir le "RecordSet" (Tableau des données) désiré.
Rst.Open "Select * from [Maliste]", Conn, adOpenKeyset,
adLockOptimistic

Nb = Rst.RecordCount
LaListe = Rst.GetRows
Worksheets("Feuil1").ComboBox1.Clear
For b = 0 To Nb - 1
Worksheets("Feuil1").ComboBox1.AddItem LaListe(0, b)
Next
Conn.Close
Set Rst = Nothing: Set Conn = Nothing
Worksheets("Feuil1").ComboBox1.Value = ""

End Sub
'--------------------------------


Salutations!




"Utilisateur1" <bernard.puccini@wanadoo.fr> a écrit dans le message de
news: #OR1bRxvCHA.1132@TK2MSFTNGP12...
Bonsoir à tous,

Est-ce qu'il est possible d'avoir une liste déroulante dans une
feuille d'un
classeur1 et les données de la liste dans un classeur 2 sachant que
le
classeur 2 avec la liste des données ne doit pas etre ouvert car
partagé par
n utilisateurs ayant chacun leur classeur 1

Je suis bloqué et vous remercie tous d'avance de votre précieuse
aide.

Bernard

1 réponse

Avatar
michdenis
Bonjour bisounours,



'-------------------------------
Private Sub Workbook_Open()

MisejourCombobox

End Sub

j'ai le droit à une erreur de compilation : SUB OU FONCTION NON
DEFINIE.


La seule chose que je peux te dire c'est probablement que :

A ) Soit la procédure "MisejourCombobox" n'existe pas ...
B ) Si tu as mis la procédure dans un module feuille au lieu d'un module standard, excel ne la trouve pas car dans ce
cas, il faudrait que tu utilises la syntaxe suivante : NomDeLaFeuille.NomDeLaProcédure

C ) Est-ce possible qu'il y ait seulement une faute d'orthographe dans l'appellation de la procédure ?

Au delà de cela, je ne saurais pas très bien quoi d'autre te proposer pour expliquer pourquoi excel ne voit pas la
procédure lors de sa procédure.


Tu devrais utiliser cette procédure .... si ta liste est importante, le traitement sera plus rapide.
Attention, tu dois modifier plusieurs variables de la procédure pour qu'elle corresponde à ton environnement de travail
comme :
A ) chemin où se trouve ton fichier
B ) Nom du fichier où sont situés tes données
C ) Dans la procédure suivante : le combobox était situé dans une feuille, en conséquence, tu dois modifier soit le nom
de la feuille, soit le remplacer par le nom de ton formulaire(userform), de même tu dois adapter le nom de ton combobox
si nécessaire.

'--------------------------------
Sub MisejourCombobox()

Dim Chemin As String, LaListe As Variant, Nb As Long
Dim Conn As Connection, Rst As New ADODB.Recordset
Chemin = "C:Mes documents" 'À déterminer
'le nom du document exemple est Test.xls À déterminer
'la permière de la liste est une étiquette de colonne.

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & "test.xls;" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

'Ouvrir le "RecordSet" (Tableau des données) désiré.
Rst.Open "Select * from [Maliste]", Conn, adOpenKeyset, adLockOptimistic

If Rst.RecordCount > 0 Then
LaListe = Rst.GetRows
Worksheets("Feuil1").ComboBox1.Clear
Worksheets("Feuil1").ComboBox1.List = Application.Transpose(LaListe)
Else
MsgBox "La Source de des données ne contient pas de données"
End If

Conn.Close
Set Rst = Nothing: Set Conn = Nothing
Worksheets("Feuil1").ComboBox1.Value = ""

End Sub
'--------------------------------


Salutations!








"bisounours" a écrit dans le message de
news:
Bonjour denis,

ci dessous la réponse que tu as faite à une question qui me rend dingo
depuis trois jours : un combobox dans un classeur qui doit réccupérer
une liste dans un autre classeur sans l'ouvrir.
J'ai tout bien fait comme tu le notes (librairie activeX et tout et
tout...)
Mais voila un problème :
lorsque j'insère ton code ci dessous :
dans le thisworkbook du classeur cible (incluant l'userform contenant
le combo) :
'-------------------------------
Private Sub Workbook_Open()

MisejourCombobox

End Sub

j'ai le droit à une erreur de compilation : SUB OU FONCTION NON
DEFINIE.

Bon, c'est pour la mise à jour alors je le vire. MAIS : dans ce cas,
la liste s'inscrit bien dans mon combo lorsque le fichier source est
ouvert (je précise que j'ai rajouté dans propriétés de mon
combo:RowSource:[TEST.xls]Feuil1!MaListe, Mais elle disparaît dès que
je le ferme.
Bref, ça marche pas et c'est exactement le code qu'il me faut. Inutile
de préciser que je suis une bille en programmation (je débute grave),
mais je connais bien excel, promis je n'ai fait aucune gaffe de
"principe"
HELP HELP HELP
Merci de bien vouloir me filer un petit coup de main.
A bientôt.

Bonjour Utilisateur1,

ATTENTION AU NOM DES OBJETS dans les
procédures. Tu dois les adapter selon les noms des
objets de tes classeurs.

Voici une façon de faire :

Dans ton classeur fermé où est la source des valeurs de ton
combobox du classeur ouvert,

Transforme la colonne de données en une plage nommée : MaListe
Barre des menus / insertion / nom / définir
NOM : MaListe
fait référence à : þuil1!$A$1:$A$14

Tu dois t'assurer qu'elle est à jour lorsque tu ferme ton classeur,
tu peux utiliser l'événement ( il y d'autres façons)
'-----------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

With Worksheets("Feuil1")
.Range("A1:A" & Range("A65356").End(xlUp).Row).Name = "MaListe"
End With
ThisWorkbook.Save

End Sub
'-----------------------


Maintenant dans ton classeur où tu veux initialer ton combobox :

TU DOIS AJOUTER LA BIBLIOTHÈQUE SUIVANTE :

Fenêtre VBE(visual basic editor) / barre des menus / options /
références/
tu coches : "Microsoft activex data object 2.1 librairy"


dans le thisworkbook de ce classeur :
'-------------------------------
Private Sub Workbook_Open()

MisejourCombobox

End Sub
'-------------------------------



Et dans un module standard :
'--------------------------------
Sub MisejourCombobox()

Dim Chemin As String, LaListe As Variant, Nb As Long
Dim Conn As Connection, Rst As New ADODB.Recordset
Chemin = "C:Mes documents" 'À déterminer
'le nom du document exemple est Test.xls À déterminer
'la permière de la liste est une étiquette de colonne.

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & "test.xls;" & _
"Extended Properties=""Excel 8.0;HDR=NO;"""

'Ouvrir le "RecordSet" (Tableau des données) désiré.
Rst.Open "Select * from [Maliste]", Conn, adOpenKeyset,
adLockOptimistic

Nb = Rst.RecordCount
LaListe = Rst.GetRows
Worksheets("Feuil1").ComboBox1.Clear
For b = 0 To Nb - 1
Worksheets("Feuil1").ComboBox1.AddItem LaListe(0, b)
Next
Conn.Close
Set Rst = Nothing: Set Conn = Nothing
Worksheets("Feuil1").ComboBox1.Value = ""

End Sub
'--------------------------------


Salutations!




"Utilisateur1" a écrit dans le message de
news: #
Bonsoir à tous,

Est-ce qu'il est possible d'avoir une liste déroulante dans une
feuille d'un
classeur1 et les données de la liste dans un classeur 2 sachant que
le
classeur 2 avec la liste des données ne doit pas etre ouvert car
partagé par
n utilisateurs ayant chacun leur classeur 1

Je suis bloqué et vous remercie tous d'avance de votre précieuse
aide.

Bernard