Probleme de remplissage d'un combo box par une procédure
methodmay31
Messages postés45Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 6 mai 2006
-
21 mars 2006 à 09:27
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
21 mars 2006 à 13:00
Bonjour a tous
J'ai un problème avec un combo box sur un formulaire plus exactement pour son remplissage
Voila le code de ma procédure
Sub Postes(ByRef TabPostes())
Dim db As ADODB.Connection
Dim ReqPostes As ADODB.Recordset
Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source='" & CheminBase & "';"
Set ReqPostes = New ADODB.Recordset
ReqPostes.Open "select distinct NomMetier from EtatCivil", db, adOpenStatic, adLockOptimistic
I = 1
While Not ReqPostes.EOF
TabPostes(I) = ReqPostes![NomMetier]
ReqPostes.MoveNext
I = I + 1
Wend
NbPostes = I - 1
End Sub
Le code du remplissage
Private Sub CmbPoste_DropDown()
CmbPoste.Clear
Call Postes(TabPostes())
For I = 1 To NbPostes
CmbPoste.AddItem (TabPostes(I))
Next I
End Sub
Public Const Max = 100
Public TabPostes(1 To Max)
il m'affiche une erreur "utilisation non autorisé du null pr le tab postes en gras et pourtant dans le pas a pas la requete de ma procédure fonctionne ....
savez vous pourquoi ???
Merci
A voir également:
Probleme de remplissage d'un combo box par une procédure
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 mars 2006 à 09:51
Ah là là, la manie de ne pas déclarer les types de ses variables provoquent forcément des erreurs un jour ou l'autre : dans ton cas, ton tableau TabPostes et de type variant, du coup, il accepte les valeur vbNull, mais pas ton combo ! Donc ca donne plutôt :
Public Const Max = 100
Public TabPostes(1 To Max) As String
While Not ReqPostes.EOF
If not isnull(ReqPostes.Fields("NomMetier").value) then
TabPostes(I) = ReqPostes![NomMetier]
else
TabPostes(I) = ""
end if
ReqPostes.MoveNext
I = I + 1
Wend
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 mars 2006 à 13:00
Normal, fais plutôt ceci :
Private Const Max = 100
Private TabPostes(1 To Max) As String
Private Function Postes() As Integer Dim db As ADODB.Connection
Dim ReqPostes As ADODB.Recordset
Dim I As Integer
Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source='" & CheminBase & "';"
Set ReqPostes = New ADODB.Recordset
ReqPostes.Open "select distinct NomMetier from EtatCivil", db, adOpenStatic, adLockOptimistic
While Not ReqPostes.EOF
If not isnull(ReqPostes.Fields("NomMetier").value) then
TabPostes(I) = ReqPostes![NomMetier]
else
TabPostes(I) = ""
end if
ReqPostes.MoveNext
I = I + 1
Wend
Postes = I - 1
End Sub
Private Sub CmbPoste_DropDown()
Dim nbPostes as integer
CmbPoste.Clear
nbPostes = Postes()
For I = 1 To nbPostes
CmbPoste.AddItem (TabPostes(I)) Next I