OVH Cloud OVH Cloud

Tri table access depuis excel

9 réponses
Avatar
Sylvain
Bonjour,

Je suis en train de batailler depuis un moment sur un sujet depuis un bon
moment... Je n'arrive pas à m'en dépatouiller.

Je m'explique.
Je cherche à importer dans une listbox excel des enregistrements d'une base
de données Access. Cela fonctionne.
Le hic, c'est que je veux trier ces enregistrements en fonction d'un champ
et c'est là que ça coince.

voici mon code
_________________________________________________________________
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Cat As New ADOX.Catalog
Dim indexTri As New ADOX.Index

Dim i As Byte
Dim L As Long, C As Byte
Dim j, Msg, NumRaq, DernierNumRaq, a, k As Integer
Dim Fichier As String

On Error GoTo Fin

ListBox1.Clear

' Chargement de la liste des raquettes de la base
Conn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & "Data Source='" & Chemin &
BaseMDB & "';"

Set Cat.ActiveConnection = Conn

With indexTri
.Columns.Append "Numéro de raquette"
.Columns("Numéro de raquette").SortOrder = adSortAscending 'tri croissant
.Name = "Ascending"
.IndexNulls = adIndexNullsAllow
End With

' Ajout d'un index pour la table
'attention : renvoie une erreur si un index existe déja
Cat.Tables("Liste des raquettes").Indexes.Append indexTri

'Rst.Index = indexTri.Name
Rst.Open "Liste des raquettes", Conn, adOpenKeyset, adLockOptimistic,
adCmdTableDirect

Rst.MoveFirst
Do Until Rst.EOF
ListBox1.AddItem (Rst.Fields("Numéro de raquette"))
Rst.MoveNext
Loop

'suppression index
Cat.Tables("Liste des raquettes").Indexes.Delete indexTri.Name
_________________________________________________________________

Le code plante à la ligne
Cat.Tables("Liste des raquettes").Indexes.Append indexTri

Le pire c'est que ça marche de temps en temps mais je n'arrive pas à
identifierce qui change.

Merci pour votre aide

9 réponses

Avatar
Gilles MOUGNOZ
Bonjour, Sylvain

Il n'est pas nécessaire de créer un index sur la table, tu peux utiliser une
requête sur laquelle tu définiras ton tri.
Enlève de ta procédure ce qui concerne la création, l'ajout et la
suppression de l'index et remplace la génération du recordset par ceci:

Rst.Open "SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de raquette'
", Conn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

Si tu en as la possibilité, tu peux aussi créer une requête triée
directement dans ta base Access et remplacer la phrase "SELECT ..." par le
nom de cette requête.
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------

Bonjour,
...
Je cherche à importer dans une listbox excel des enregistrements d'une
base
de données Access. Cela fonctionne.
Le hic, c'est que je veux trier ces enregistrements en fonction d'un champ
et c'est là que ça coince.

voici mon code
...
Merci pour votre aide


Avatar
Sylvain
Merci pour ton aide Gilles.

Je viens de tester ton code mais mais j'ai une erreur à la ligne que tu m'as
indiquée. Excel ne doit pas arriver à ouvrir la table. On me dit que la
clause de la requête est incomplète.

Je veux encore un epu d'aide stp.

Merci beaucoup
Sylvain


Bonjour, Sylvain

Il n'est pas nécessaire de créer un index sur la table, tu peux utiliser une
requête sur laquelle tu définiras ton tri.
Enlève de ta procédure ce qui concerne la création, l'ajout et la
suppression de l'index et remplace la génération du recordset par ceci:

Rst.Open "SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de raquette'
", Conn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

Si tu en as la possibilité, tu peux aussi créer une requête triée
directement dans ta base Access et remplacer la phrase "SELECT ..." par le
nom de cette requête.
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------

Bonjour,
...
Je cherche à importer dans une listbox excel des enregistrements d'une
base
de données Access. Cela fonctionne.
Le hic, c'est que je veux trier ces enregistrements en fonction d'un champ
et c'est là que ça coince.

voici mon code
...
Merci pour votre aide







Avatar
Gilles MOUGNOZ
Rebonjour, Sylvain

As-tu recopié le code à l'aide d'un copier-coller ?
Si oui, attention aux retours à la ligne intempestifs !
Je remet la requête seule:
"SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de raquette'"

C'est mieux ?

--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
"Sylvain" a écrit dans le message de
news:
Merci pour ton aide Gilles.

Je viens de tester ton code mais mais j'ai une erreur à la ligne que tu
m'as
indiquée. Excel ne doit pas arriver à ouvrir la table. On me dit que la
clause de la requête est incomplète.

Je veux encore un epu d'aide stp.

Merci beaucoup
Sylvain


Bonjour, Sylvain

Il n'est pas nécessaire de créer un index sur la table, tu peux utiliser
une
requête sur laquelle tu définiras ton tri.
Enlève de ta procédure ce qui concerne la création, l'ajout et la
suppression de l'index et remplace la génération du recordset par ceci:

Rst.Open "SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de
raquette'
", Conn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

Si tu en as la possibilité, tu peux aussi créer une requête triée
directement dans ta base Access et remplacer la phrase "SELECT ..." par
le
nom de cette requête.
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------

Bonjour,
...
Je cherche à importer dans une listbox excel des enregistrements d'une
base
de données Access. Cela fonctionne.
Le hic, c'est que je veux trier ces enregistrements en fonction d'un
champ
et c'est là que ça coince.

voici mon code
...
Merci pour votre aide









Avatar
Sylvain
Merci pour ton aide Gilles,

ça ne marche pas mieux, toujours une erreur. Est-ce que cela peut provenir
du fait que le nom de la table comporte un espace ???


Rebonjour, Sylvain

As-tu recopié le code à l'aide d'un copier-coller ?
Si oui, attention aux retours à la ligne intempestifs !
Je remet la requête seule:
"SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de raquette'"

C'est mieux ?

--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
"Sylvain" a écrit dans le message de
news:
Merci pour ton aide Gilles.

Je viens de tester ton code mais mais j'ai une erreur à la ligne que tu
m'as
indiquée. Excel ne doit pas arriver à ouvrir la table. On me dit que la
clause de la requête est incomplète.

Je veux encore un epu d'aide stp.

Merci beaucoup
Sylvain


Bonjour, Sylvain

Il n'est pas nécessaire de créer un index sur la table, tu peux utiliser
une
requête sur laquelle tu définiras ton tri.
Enlève de ta procédure ce qui concerne la création, l'ajout et la
suppression de l'index et remplace la génération du recordset par ceci:

Rst.Open "SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de
raquette'
", Conn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

Si tu en as la possibilité, tu peux aussi créer une requête triée
directement dans ta base Access et remplacer la phrase "SELECT ..." par
le
nom de cette requête.
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------

Bonjour,
...
Je cherche à importer dans une listbox excel des enregistrements d'une
base
de données Access. Cela fonctionne.
Le hic, c'est que je veux trier ces enregistrements en fonction d'un
champ
et c'est là que ça coince.

voici mon code
...
Merci pour votre aide














Avatar
Sylvain
Re,

Merci pour taon aide. J'avais bien supprimé les retours à la ligne
intempestifs mais ça ne marche toujours pas... Est-ce que cela peut prevenir
du fait que le nom de la table comporte des espaces ?

Merci
Sylvain


Rebonjour, Sylvain

As-tu recopié le code à l'aide d'un copier-coller ?
Si oui, attention aux retours à la ligne intempestifs !
Je remet la requête seule:
"SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de raquette'"

C'est mieux ?

--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
"Sylvain" a écrit dans le message de
news:
Merci pour ton aide Gilles.

Je viens de tester ton code mais mais j'ai une erreur à la ligne que tu
m'as
indiquée. Excel ne doit pas arriver à ouvrir la table. On me dit que la
clause de la requête est incomplète.

Je veux encore un epu d'aide stp.

Merci beaucoup
Sylvain


Bonjour, Sylvain

Il n'est pas nécessaire de créer un index sur la table, tu peux utiliser
une
requête sur laquelle tu définiras ton tri.
Enlève de ta procédure ce qui concerne la création, l'ajout et la
suppression de l'index et remplace la génération du recordset par ceci:

Rst.Open "SELECT * FROM 'Liste des raquettes' ORDER BY 'Numéro de
raquette'
", Conn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

Si tu en as la possibilité, tu peux aussi créer une requête triée
directement dans ta base Access et remplacer la phrase "SELECT ..." par
le
nom de cette requête.
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------

Bonjour,
...
Je cherche à importer dans une listbox excel des enregistrements d'une
base
de données Access. Cela fonctionne.
Le hic, c'est que je veux trier ces enregistrements en fonction d'un
champ
et c'est là que ça coince.

voici mon code
...
Merci pour votre aide














Avatar
Gilles MOUGNOZ
Essaie avec ceci:
"SELECT * FROM [Liste des raquettes] ORDER BY [Numéro de raquette]"
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
"Sylvain" a écrit dans le message de
news:
Re,

Merci pour taon aide. J'avais bien supprimé les retours à la ligne
intempestifs mais ça ne marche toujours pas... Est-ce que cela peut
prevenir
du fait que le nom de la table comporte des espaces ?

Merci
Sylvain


Avatar
Sylvain
Super !
Cela fonctionne Gilles. J'avais pensé à mettre des crochets mais je n'avais
pas enlevé les petits guillemets.

Mille mercis
Sylvain


Essaie avec ceci:
"SELECT * FROM [Liste des raquettes] ORDER BY [Numéro de raquette]"
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
"Sylvain" a écrit dans le message de
news:
Re,

Merci pour taon aide. J'avais bien supprimé les retours à la ligne
intempestifs mais ça ne marche toujours pas... Est-ce que cela peut
prevenir
du fait que le nom de la table comporte des espaces ?

Merci
Sylvain







Avatar
Gilles MOUGNOZ
Content d'avoir pu t'aider ! ;-)
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
"Sylvain" a écrit dans le message de
news:
Super !
Cela fonctionne Gilles. J'avais pensé à mettre des crochets mais je
n'avais
pas enlevé les petits guillemets.

Mille mercis
Sylvain


Avatar
JB
Bonsoir,

Voir exemples DAO/ADo dans PJ: http://cjoint.com/?kjwhNS6WAL

DAO:

Private Sub UserForm_Initialize()
'cocher Microsoft DAO 3.6 dans Outils/Références
Dim bd As Database
Dim rs As Recordset
Set bd = OpenDatabase(ActiveWorkbook.Path & "access2000.mdb")
Set rs = bd.OpenRecordset("Select * From Client Order By
Nom_Client")
Do While Not rs.EOF
Me.choix.AddItem rs!nom_client
rs.MoveNext
Loop
End Sub

ADO:

Private Sub UserForm_Initialize()
ChDir ActiveWorkbook.Path
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ¬cess2000.mdb"
Set rs = cnn.Execute("SELECT nom_client FROM Client ORDER BY
nom_client")
Do While Not rs.EOF
Me.Choix.AddItem rs!Nom_Client
rs.MoveNext
Loop
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub


Cordialement JB




Bonjour,

Je suis en train de batailler depuis un moment sur un sujet depuis un bon
moment... Je n'arrive pas à m'en dépatouiller.

Je m'explique.
Je cherche à importer dans une listbox excel des enregistrements d'une base
de données Access. Cela fonctionne.
Le hic, c'est que je veux trier ces enregistrements en fonction d'un champ
et c'est là que ça coince.

voici mon code
_________________________________________________________________
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Cat As New ADOX.Catalog
Dim indexTri As New ADOX.Index

Dim i As Byte
Dim L As Long, C As Byte
Dim j, Msg, NumRaq, DernierNumRaq, a, k As Integer
Dim Fichier As String

On Error GoTo Fin

ListBox1.Clear

' Chargement de la liste des raquettes de la base
Conn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & "Data Source='" & C hemin &
BaseMDB & "';"

Set Cat.ActiveConnection = Conn

With indexTri
.Columns.Append "Numéro de raquette"
.Columns("Numéro de raquette").SortOrder = adSortAscending 'tri c roissant
.Name = "Ascending"
.IndexNulls = adIndexNullsAllow
End With

' Ajout d'un index pour la table
'attention : renvoie une erreur si un index existe déja
Cat.Tables("Liste des raquettes").Indexes.Append indexTri

'Rst.Index = indexTri.Name
Rst.Open "Liste des raquettes", Conn, adOpenKeyset, adLockOptimistic,
adCmdTableDirect

Rst.MoveFirst
Do Until Rst.EOF
ListBox1.AddItem (Rst.Fields("Numéro de raquette"))
Rst.MoveNext
Loop

'suppression index
Cat.Tables("Liste des raquettes").Indexes.Delete indexTri.Name
_________________________________________________________________

Le code plante à la ligne
Cat.Tables("Liste des raquettes").Indexes.Append indexTri

Le pire c'est que ça marche de temps en temps mais je n'arrive pas à
identifierce qui change.

Merci pour votre aide