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

Problème de recordset

3 réponses
Avatar
Anthony
Bonjour,

J'ai un probl=E8me dans un recordset. Je r=E9cup=E9re des=20
donn=E9es depuis Access et j'ins=E9re mes donn=E9es dans Excel.=20
Je place mes donn=E9es en A11 par exemple et imaginons que=20
mes donn=E9es vont de A11 =E0 R51. A chaque fois, dans ma=20
colonne A au dernier enregistrements il ne m'ins=E9re pas=20
les donn=E9es mais le num=E9ro de la ligne c'est =E0 dire dans=20
ce cas 51. J'ai uniquement ce probl=E8me que dans une=20
cellule et dans la premi=E8re colonne de mon dernier=20
enregistrement. Pourriez vous m'aider?.


Voici mon Code

Public Sub CopyFromRecordset()
Dim Db1 As Database
Dim Rs1 As Recordset, Nb As Long
Dim Sh As Worksheet, Rg As Range, Nl As Range
Dim Chemin As String, Fichier As String

'Cette variable te permet de d=E9terminer
'le type de bordure d=E9sir=E9...
Dim bordure As MsoLineStyle
'efface le signe =E9gal...et lorsque tu
'le remplace, tu auras la liste des
'constantes disponibles
bordure =3D msoLineSingle

'utilise une variable pour la feuille
'et la premi=E8re cellule o=F9 seront copi=E9es les
'donn=E9es...Ceci permet =E0 ta proc=E9dure de s'ex=E9cuter
'sans avoir =E0 pr=E9selectionner la feuille....
Set Sh =3D Worksheets("Test")
With Sh
Set Rg =3D .Range("A10")
End With

'D=E9finir le chemin de la base de donn=E9es "ici en chemin=20
absolu et non relatif " =E0 ouvrir
Set Db1 =3D DBEngine.OpenDatabase(ThisWorkbook.Path=20
& "\GeneralReport.mdb")
'D=E9finir la requ=EAte de la base de donn=E9es =E0 ouvrir
Set Rs1 =3D Db1.OpenRecordset("REPORT", dbOpenDynaset)

'Efface toutes les donn=E9es se trouvant dans la plage
'de cellules devant recevoir les nouvelles donn=E9es.
Rg.CurrentRegion.Clear

'Teste pour savoir si La table contient au moins 1=20
enregistrement
If Rs1.EOF =3D False Then
'Place dans une variable Nb le nombre
'champs que contient le recordset
Nb =3D Rs1.Fields.Count - 1

'Boucle pour inscrire le nom des champs dans
'la premi=E8re ligne de ta plage de cellule
'Rg repr=E9sente la premi=E8re cellule...
For a =3D 0 To Nb
Rg(, 1 + a) =3D Rs1.Fields(a).Name
Next
'Met en gras, le texte de la ligne de titres...
Rg.Resize(, Nb + 1).Font.Bold =3D True
Rg.Resize(, Nb + 1).Interior.ColorIndex =3D 15

'copie les donn=E9es du recordset vers la feuille...
Rg.Offset(1).CopyFromRecordset Rs1
...

Merci de votre aide.

Anthony

3 réponses

Avatar
Denis Michon
Bonjour Anthony,


En principe, ta procédure devrait fonctionner. Tu dois regarder du côté de ta base de données Access.

Est-ce qu'il y a des enregistrements vides dans ta table ?

Est-ce que le nombre d'enregistrements importés est exact ?

Le champ 1 de ta table correspondant à la colonne A dans excel contient quel type de données ?


Et si tu ne trouves pas et que l'informations contenues dans ta table ne sont pas "secrètes", tu peux me l'envoyer en
bal perso. (Seulement cette table que tu copies vers une nouvelle base de données vierges.)


Salutations!




"Anthony" a écrit dans le message de
news:099401c3a12f$4831e470$

Bonjour,

J'ai un problème dans un recordset. Je récupére des
données depuis Access et j'insére mes données dans Excel.
Je place mes données en A11 par exemple et imaginons que
mes données vont de A11 à R51. A chaque fois, dans ma
colonne A au dernier enregistrements il ne m'insére pas
les données mais le numéro de la ligne c'est à dire dans
ce cas 51. J'ai uniquement ce problème que dans une
cellule et dans la première colonne de mon dernier
enregistrement. Pourriez vous m'aider?.


Voici mon Code

Public Sub CopyFromRecordset()
Dim Db1 As Database
Dim Rs1 As Recordset, Nb As Long
Dim Sh As Worksheet, Rg As Range, Nl As Range
Dim Chemin As String, Fichier As String

'Cette variable te permet de déterminer
'le type de bordure désiré...
Dim bordure As MsoLineStyle
'efface le signe égal...et lorsque tu
'le remplace, tu auras la liste des
'constantes disponibles
bordure = msoLineSingle

'utilise une variable pour la feuille
'et la première cellule où seront copiées les
'données...Ceci permet à ta procédure de s'exécuter
'sans avoir à préselectionner la feuille....
Set Sh = Worksheets("Test")
With Sh
Set Rg = .Range("A10")
End With

'Définir le chemin de la base de données "ici en chemin
absolu et non relatif " à ouvrir
Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path
& "GeneralReport.mdb")
'Définir la requête de la base de données à ouvrir
Set Rs1 = Db1.OpenRecordset("REPORT", dbOpenDynaset)

'Efface toutes les données se trouvant dans la plage
'de cellules devant recevoir les nouvelles données.
Rg.CurrentRegion.Clear

'Teste pour savoir si La table contient au moins 1
enregistrement
If Rs1.EOF = False Then
'Place dans une variable Nb le nombre
'champs que contient le recordset
Nb = Rs1.Fields.Count - 1

'Boucle pour inscrire le nom des champs dans
'la première ligne de ta plage de cellule
'Rg représente la première cellule...
For a = 0 To Nb
Rg(, 1 + a) = Rs1.Fields(a).Name
Next
'Met en gras, le texte de la ligne de titres...
Rg.Resize(, Nb + 1).Font.Bold = True
Rg.Resize(, Nb + 1).Interior.ColorIndex = 15

'copie les données du recordset vers la feuille...
Rg.Offset(1).CopyFromRecordset Rs1
...

Merci de votre aide.

Anthony
Avatar
Anthony
Merci Denis pour ta réponse,

- Concernant le type de données c'est du string dans
access
- J'ai le même nombre de données entre Access et Excel
- Je n'ai pas d'enregistrements vides

Voici mon code dans intégralité, est ce que tu peux faire
un test chez toi?.

Je viens d'vaoir une idée, jen'aurais peut être pas le
problème si je passe par une requête à la place d'une table
OpenTable et OpenDynaset!!. Je vais essayer.

Public Sub CopyFromRecordsetInterDepan()
Dim Db1 As Database
Dim Rs1 As Recordset, Nb As Long
Dim Sh As Worksheet, Rg As Range, Nl As Range
Dim Chemin As String, Fichier As String

Dim bordure As MsoLineStyle

bordure = msoLineSingle

Set Sh = Worksheets("Parc")
With Sh
Set Rg = .Range("A10")
End With

Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path
& "GeneralReport.mdb")

Set Rs1 = Db1.OpenRecordset("Tbl: Graphique Parc",
dbOpenTable)

Rg.CurrentRegion.Clear

If Rs1.EOF = False Then

Nb = Rs1.Fields.Count - 1

For a = 0 To Nb
Rg(, 1 + a) = Rs1.Fields(a).Name
Next

Rg.Resize(, Nb + 1).Font.Bold = True
Rg.Resize(, Nb + 1).Interior.ColorIndex = 15

Rg.Offset(1).CopyFromRecordset Rs1

Else
Rg.Value = "Aucun enregistrement trouvé."
End If


Set Rg = Nothing: Set Sh = Nothing

Rs1.Close: Db1.Close

Set Rs1 = Nothing: Set Db1 = Nothing
End Sub

Anthony
-----Message d'origine-----
Bonjour Anthony,


En principe, ta procédure devrait fonctionner. Tu dois
regarder du côté de ta base de données Access.


Est-ce qu'il y a des enregistrements vides dans ta table ?

Est-ce que le nombre d'enregistrements importés est
exact ?


Le champ 1 de ta table correspondant à la colonne A dans
excel contient quel type de données ?



Et si tu ne trouves pas et que l'informations contenues
dans ta table ne sont pas "secrètes", tu peux me l'envoyer

en
bal perso. (Seulement cette table que tu copies vers une
nouvelle base de données vierges.)



Salutations!




"Anthony" a écrit
dans le message de

news:099401c3a12f$4831e470$

Bonjour,

J'ai un problème dans un recordset. Je récupére des
données depuis Access et j'insére mes données dans Excel.
Je place mes données en A11 par exemple et imaginons que
mes données vont de A11 à R51. A chaque fois, dans ma
colonne A au dernier enregistrements il ne m'insére pas
les données mais le numéro de la ligne c'est à dire dans
ce cas 51. J'ai uniquement ce problème que dans une
cellule et dans la première colonne de mon dernier
enregistrement. Pourriez vous m'aider?.


Voici mon Code

Public Sub CopyFromRecordset()
Dim Db1 As Database
Dim Rs1 As Recordset, Nb As Long
Dim Sh As Worksheet, Rg As Range, Nl As Range
Dim Chemin As String, Fichier As String

'Cette variable te permet de déterminer
'le type de bordure désiré...
Dim bordure As MsoLineStyle
'efface le signe égal...et lorsque tu
'le remplace, tu auras la liste des
'constantes disponibles
bordure = msoLineSingle

'utilise une variable pour la feuille
'et la première cellule où seront copiées les
'données...Ceci permet à ta procédure de s'exécuter
'sans avoir à préselectionner la feuille....
Set Sh = Worksheets("Test")
With Sh
Set Rg = .Range("A10")
End With

'Définir le chemin de la base de données "ici en chemin
absolu et non relatif " à ouvrir
Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path
& "GeneralReport.mdb")
'Définir la requête de la base de données à ouvrir
Set Rs1 = Db1.OpenRecordset("REPORT", dbOpenDynaset)

'Efface toutes les données se trouvant dans la plage
'de cellules devant recevoir les nouvelles données.
Rg.CurrentRegion.Clear

'Teste pour savoir si La table contient au moins 1
enregistrement
If Rs1.EOF = False Then
'Place dans une variable Nb le nombre
'champs que contient le recordset
Nb = Rs1.Fields.Count - 1

'Boucle pour inscrire le nom des champs dans
'la première ligne de ta plage de cellule
'Rg représente la première cellule...
For a = 0 To Nb
Rg(, 1 + a) = Rs1.Fields(a).Name
Next
'Met en gras, le texte de la ligne de titres...
Rg.Resize(, Nb + 1).Font.Bold = True
Rg.Resize(, Nb + 1).Interior.ColorIndex = 15

'copie les données du recordset vers la feuille...
Rg.Offset(1).CopyFromRecordset Rs1
....

Merci de votre aide.

Anthony



.



Avatar
michdenis
Bonjour Anthony,

J'ai testé cette procédure avec une de mes bases de données. Elle fonctionne correctement. La difficulté selon moi ne
provient pas de la procédure mais de ta table access.

Si tu veux faire un petit test supplémentaire concernant la valeur du dernier enregistrement dans le champ 1 avant de
copier le recordset vers Excel, Modifie ton code en ajoutant ces 2 lignes juste avant la ligne de code qui copie les
données du recordset vers Excel.

Est-ce que le message affiché correspond à la valeur du champ 1 du dernier enregistrement ?



Rs1.MoveLast
MsgBox Rs1(0).Value

Rg.Offset(1).CopyFromRecordset Rs1



Salutations!




"Anthony" a écrit dans le message de
news:0a2401c3a151$873a6580$
Merci Denis pour ta réponse,

- Concernant le type de données c'est du string dans
access
- J'ai le même nombre de données entre Access et Excel
- Je n'ai pas d'enregistrements vides

Voici mon code dans intégralité, est ce que tu peux faire
un test chez toi?.

Je viens d'vaoir une idée, jen'aurais peut être pas le
problème si je passe par une requête à la place d'une table
OpenTable et OpenDynaset!!. Je vais essayer.

Public Sub CopyFromRecordsetInterDepan()
Dim Db1 As Database
Dim Rs1 As Recordset, Nb As Long
Dim Sh As Worksheet, Rg As Range, Nl As Range
Dim Chemin As String, Fichier As String

Dim bordure As MsoLineStyle

bordure = msoLineSingle

Set Sh = Worksheets("Parc")
With Sh
Set Rg = .Range("A10")
End With

Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path
& "GeneralReport.mdb")

Set Rs1 = Db1.OpenRecordset("Tbl: Graphique Parc",
dbOpenTable)

Rg.CurrentRegion.Clear

If Rs1.EOF = False Then

Nb = Rs1.Fields.Count - 1

For a = 0 To Nb
Rg(, 1 + a) = Rs1.Fields(a).Name
Next

Rg.Resize(, Nb + 1).Font.Bold = True
Rg.Resize(, Nb + 1).Interior.ColorIndex = 15

Rg.Offset(1).CopyFromRecordset Rs1

Else
Rg.Value = "Aucun enregistrement trouvé."
End If


Set Rg = Nothing: Set Sh = Nothing

Rs1.Close: Db1.Close

Set Rs1 = Nothing: Set Db1 = Nothing
End Sub

Anthony
-----Message d'origine-----
Bonjour Anthony,


En principe, ta procédure devrait fonctionner. Tu dois
regarder du côté de ta base de données Access.


Est-ce qu'il y a des enregistrements vides dans ta table ?

Est-ce que le nombre d'enregistrements importés est
exact ?


Le champ 1 de ta table correspondant à la colonne A dans
excel contient quel type de données ?



Et si tu ne trouves pas et que l'informations contenues
dans ta table ne sont pas "secrètes", tu peux me l'envoyer

en
bal perso. (Seulement cette table que tu copies vers une
nouvelle base de données vierges.)



Salutations!




"Anthony" a écrit
dans le message de

news:099401c3a12f$4831e470$

Bonjour,

J'ai un problème dans un recordset. Je récupére des
données depuis Access et j'insére mes données dans Excel.
Je place mes données en A11 par exemple et imaginons que
mes données vont de A11 à R51. A chaque fois, dans ma
colonne A au dernier enregistrements il ne m'insére pas
les données mais le numéro de la ligne c'est à dire dans
ce cas 51. J'ai uniquement ce problème que dans une
cellule et dans la première colonne de mon dernier
enregistrement. Pourriez vous m'aider?.


Voici mon Code

Public Sub CopyFromRecordset()
Dim Db1 As Database
Dim Rs1 As Recordset, Nb As Long
Dim Sh As Worksheet, Rg As Range, Nl As Range
Dim Chemin As String, Fichier As String

'Cette variable te permet de déterminer
'le type de bordure désiré...
Dim bordure As MsoLineStyle
'efface le signe égal...et lorsque tu
'le remplace, tu auras la liste des
'constantes disponibles
bordure = msoLineSingle

'utilise une variable pour la feuille
'et la première cellule où seront copiées les
'données...Ceci permet à ta procédure de s'exécuter
'sans avoir à préselectionner la feuille....
Set Sh = Worksheets("Test")
With Sh
Set Rg = .Range("A10")
End With

'Définir le chemin de la base de données "ici en chemin
absolu et non relatif " à ouvrir
Set Db1 = DBEngine.OpenDatabase(ThisWorkbook.Path
& "GeneralReport.mdb")
'Définir la requête de la base de données à ouvrir
Set Rs1 = Db1.OpenRecordset("REPORT", dbOpenDynaset)

'Efface toutes les données se trouvant dans la plage
'de cellules devant recevoir les nouvelles données.
Rg.CurrentRegion.Clear

'Teste pour savoir si La table contient au moins 1
enregistrement
If Rs1.EOF = False Then
'Place dans une variable Nb le nombre
'champs que contient le recordset
Nb = Rs1.Fields.Count - 1

'Boucle pour inscrire le nom des champs dans
'la première ligne de ta plage de cellule
'Rg représente la première cellule...
For a = 0 To Nb
Rg(, 1 + a) = Rs1.Fields(a).Name
Next
'Met en gras, le texte de la ligne de titres...
Rg.Resize(, Nb + 1).Font.Bold = True
Rg.Resize(, Nb + 1).Interior.ColorIndex = 15

'copie les données du recordset vers la feuille...
Rg.Offset(1).CopyFromRecordset Rs1
....

Merci de votre aide.

Anthony



.