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

Liaison avec un fichier pour alimenter une combobox

2 réponses
Avatar
ats.ccs
Bonjour,

Sous Excel 2002,

Je souhaite que dans un formulaire une combobox soit alimentée par une liste
d'un autre fichier et si possible triée.
Si je n'ouvre pas préalablement à la saisie du formulaire, le fichier qui
contient la liste, j'obtiens un message d'erreur.
Grace à la contribution de JB, j'ai obtenu le code suivant qui fonctionne
parfaitement SAUF si la liste contient des chiffres.
répertoire = ThisWorkbook.Path
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _
répertoire & "\" & "ADOsource.xls"
Set rs = cnn.Execute("SELECT nom FROM MaBD WHERE nom<>'' Order By nom")
Me.ComboBox1.List = Application.Transpose(rs.GetRows)
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing

Dans l'exemple transmis par JB, si je prends les champs nom ou prenom, c'est
parfait, si je prends le champs salaire, j'obtiens :
Erreur d'exécution '-2147217913 (80040e07)
[Microsoft][Pilote ODBC Excel] Type de données incompatible dans
l'expression du critère.
Gérant des plaques d'immatriculation, je souhaiterais que ma combobox se
mette à jour sans avoir à ouvrir le fichier contenant la liste des plaques.
Quel est le code approprié ?

Merci pour votre aide.
BH.

2 réponses

Avatar
JB
Bonjour,

Private Sub UserForm_Initialize()
'Microsoft ActiveX DataObject doit être coché
' Champ nommé MaBD avec lignes vides
répertoire = ThisWorkbook.Path
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" &
_
répertoire & "" & "ADOsource.xls"
Set rs = cnn.Execute("SELECT salaire FROM MaBD WHERE salaire<>0
Order By salaire")
Me.ComboBox1.List = Application.Transpose(rs.GetRows)
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub

JB
On 11 fév, 12:29,
wrote:
Bonjour,

Sous Excel 2002,

Je souhaite que dans un formulaire une combobox soit alimentée par une l iste
d'un autre fichier et si possible triée.
Si je n'ouvre pas préalablement à la saisie du formulaire, le fichier qui
contient la liste, j'obtiens un message d'erreur.
Grace à la contribution de JB, j'ai obtenu le code suivant qui fonctionn e
parfaitement SAUF si la liste contient des chiffres.
répertoire = ThisWorkbook.Path
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ =" & _
      répertoire & "" & "ADOsource.xls"
  Set rs = cnn.Execute("SELECT nom FROM MaBD WHERE nom<>'' Order By no m")
  Me.ComboBox1.List = Application.Transpose(rs.GetRows)
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing

Dans l'exemple transmis par JB, si je prends les champs nom ou prenom, c'e st
parfait, si je prends le champs salaire, j'obtiens :
Erreur d'exécution '-2147217913 (80040e07)
[Microsoft][Pilote ODBC Excel] Type de données incompatible dans
l'expression du critère.
Gérant des plaques d'immatriculation, je souhaiterais que ma combobox se
mette à jour sans avoir à ouvrir le fichier contenant la liste des pla ques.
Quel est le code approprié ?

Merci pour votre aide.
BH.


Avatar
ats.ccs
Bonsoir,

Encore besoin de vous.

Cela fonctionne parfaitement dans un premier formulaire.

Dans un autre fichier, j'obtiens ce message d'erreur sur la ligne
Set cnn = New ADODB.Connection
Erreur de compilation / Type défini par l'utilisateur non défini
Je précise que je fais appel à la meme liaison, avec les memes noms, c'est
"un simple copier/coller" dans un formulaire légérement différent sur le meme
ordinateur.

Pourquoi ?

Un grand merci pour votre aide.

BH.


"JB" wrote:

Bonjour,

Private Sub UserForm_Initialize()
'Microsoft ActiveX DataObject doit être coché
' Champ nommé MaBD avec lignes vides
répertoire = ThisWorkbook.Path
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" &
_
répertoire & "" & "ADOsource.xls"
Set rs = cnn.Execute("SELECT salaire FROM MaBD WHERE salaire<>0
Order By salaire")
Me.ComboBox1.List = Application.Transpose(rs.GetRows)
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub

JB
On 11 fév, 12:29,
wrote:
Bonjour,

Sous Excel 2002,

Je souhaite que dans un formulaire une combobox soit alimentée par une liste
d'un autre fichier et si possible triée.
Si je n'ouvre pas préalablement à la saisie du formulaire, le fichier qui
contient la liste, j'obtiens un message d'erreur.
Grace à la contribution de JB, j'ai obtenu le code suivant qui fonctionne
parfaitement SAUF si la liste contient des chiffres.
répertoire = ThisWorkbook.Path
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _
répertoire & "" & "ADOsource.xls"
Set rs = cnn.Execute("SELECT nom FROM MaBD WHERE nom<>'' Order By nom")
Me.ComboBox1.List = Application.Transpose(rs.GetRows)
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing

Dans l'exemple transmis par JB, si je prends les champs nom ou prenom, c'est
parfait, si je prends le champs salaire, j'obtiens :
Erreur d'exécution '-2147217913 (80040e07)
[Microsoft][Pilote ODBC Excel] Type de données incompatible dans
l'expression du critère.
Gérant des plaques d'immatriculation, je souhaiterais que ma combobox se
mette à jour sans avoir à ouvrir le fichier contenant la liste des plaques.
Quel est le code approprié ?

Merci pour votre aide.
BH.