Lire des données dans un classeur fermé : MICH DENIS : AU SECOURS...
1 réponse
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <goodwave@boursorama.com> a écrit dans le message de
news:a0016ee6.0405220248.34e0c782@posting.google.com...
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" <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.
'------------------------------- 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.