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

problème d'affichage de données par VBA

2 réponses
Avatar
jean59
Bonjour,

J'ai un gros probl=E8me avec du code VBA. Je r=E9cup=E9re depuis=20
Access une requ=EAte et je l'ins=E9re dans Excel.

Mon format sous Access de mes donn=E9es, champ + donn=E9es:
Nombre
110

Dans Excel je n'affiche pas le nom de mes champs de=20
Access, je n'affiche que les donn=E9es, le r=E9sultat.=20

Je souhaite ins=E9rer le r=E9sultat de ma requ=EAte(ici 110) en=20
A12 par exemple et cela marche parfaitement. Mais si je=20
souhaite ins=E9rer le r=E9sultat d'une nouvelle requ=EAte en A13=20
alors les donn=E9es en A12 disparaissent.

J'utilise ce code pour ins=E9rer mon code en A12:

Sub CopyFromRecordsetInter()
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 msoLineStyleMixed

'utilise une variable pour la feuille et la premi=E8re
'cellule o=F9 seront copi=E9es les donn=E9es...
Set Sh =3D Worksheets("Feuil1")
With Sh
Set Rg =3D .Range("A12")
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
& "\Exemple.mdb")
'D=E9finir la requ=EAte de la base de donn=E9es =E0 ouvrir
Set Rs1 =3D Db1.OpenRecordset("REPORTING: Nbre Inter",=20
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

'copie les donn=E9es du recordset vers la feuille...j'ai=20
essay=E9 plusieurs solutions et sans r=E9sultat.

'Rg.Offset(0, 0).CopyFromRecordset Rs1
'Rg.Offset(0).CopyFromRecordset Rs1
Rg.CopyFromRecordset Rs1

Else

Rg.Value =3D "Aucun enregistrement trouv=E9."
'message si aucun enregistrement n'est trouv=E9.
End If

'Lib=E8re l'espaces m=E9moire des objets utilis=E9s
Set Rg =3D Nothing: Set Sh =3D Nothing
'Ferme le recordset et la base de donn=E9es
Rs1.Close: Db1.Close
'Lib=E8re la m=E9moire des objets
Set Rs1 =3D Nothing: Set Db1 =3D Nothing
End Sub

Avez vous eu d=E9j=E0 ce probl=E8me ?.

Merci de votre aide,

Jean59

2 réponses

Avatar
isabelle
bonjour Jean,

sur la macro tu défénie l'objet plage
Set Rg = .Range("A12")

et quelque (4) lignes plus bas tu effaces le contenu de cette plage
Rg.CurrentRegion.Clear

isabelle


Bonjour,

J'ai un gros problème avec du code VBA. Je récupére depuis
Access une requête et je l'insére dans Excel.

Mon format sous Access de mes données, champ + données:
Nombre
110

Dans Excel je n'affiche pas le nom de mes champs de
Access, je n'affiche que les données, le résultat.

Je souhaite insérer le résultat de ma requête(ici 110) en
A12 par exemple et cela marche parfaitement. Mais si je
souhaite insérer le résultat d'une nouvelle requête en A13
alors les données en A12 disparaissent.

J'utilise ce code pour insérer mon code en A12:

Sub CopyFromRecordsetInter()
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 = msoLineStyleMixed

'utilise une variable pour la feuille et la première
'cellule où seront copiées les données...
Set Sh = Worksheets("Feuil1")
With Sh
Set Rg = .Range("A12")
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
& "Exemple.mdb")
'Définir la requête de la base de données à ouvrir
Set Rs1 = Db1.OpenRecordset("REPORTING: Nbre Inter",
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

'copie les données du recordset vers la feuille...j'ai
essayé plusieurs solutions et sans résultat.

'Rg.Offset(0, 0).CopyFromRecordset Rs1
'Rg.Offset(0).CopyFromRecordset Rs1
Rg.CopyFromRecordset Rs1

Else

Rg.Value = "Aucun enregistrement trouvé."
'message si aucun enregistrement n'est trouvé.
End If

'Libère l'espaces mémoire des objets utilisés
Set Rg = Nothing: Set Sh = Nothing
'Ferme le recordset et la base de données
Rs1.Close: Db1.Close
'Libère la mémoire des objets
Set Rs1 = Nothing: Set Db1 = Nothing
End Sub

Avez vous eu déjà ce problème ?.

Merci de votre aide,

Jean59


Avatar
Frédéric Sigonneau
Bonjour,

Si tu veux ajouter les résultats de tes requêtes en colonne A sans effacer les
résultats précédents, supprime cette ligne (comme signalé par Isabelle) :

Rg.CurrentRegion.Clear

et, pour définir la première cellule libre en colonne A, au lieu de

Set Sh = Worksheets("Feuil1")
With Sh
Set Rg = .Range("A12")
End With


utilise plutôt :

With Worksheets("Feuil1")
Set Rg=.Cells(Rows.Count,1).End(xlUp)(2)
End With

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

J'ai un gros problème avec du code VBA. Je récupére depuis
Access une requête et je l'insére dans Excel.

Mon format sous Access de mes données, champ + données:
Nombre
110

Dans Excel je n'affiche pas le nom de mes champs de
Access, je n'affiche que les données, le résultat.

Je souhaite insérer le résultat de ma requête(ici 110) en
A12 par exemple et cela marche parfaitement. Mais si je
souhaite insérer le résultat d'une nouvelle requête en A13
alors les données en A12 disparaissent.

J'utilise ce code pour insérer mon code en A12:

Sub CopyFromRecordsetInter()
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 = msoLineStyleMixed

'utilise une variable pour la feuille et la première
'cellule où seront copiées les données...
Set Sh = Worksheets("Feuil1")
With Sh
Set Rg = .Range("A12")
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
& "Exemple.mdb")
'Définir la requête de la base de données à ouvrir
Set Rs1 = Db1.OpenRecordset("REPORTING: Nbre Inter",
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

'copie les données du recordset vers la feuille...j'ai
essayé plusieurs solutions et sans résultat.

'Rg.Offset(0, 0).CopyFromRecordset Rs1
'Rg.Offset(0).CopyFromRecordset Rs1
Rg.CopyFromRecordset Rs1

Else

Rg.Value = "Aucun enregistrement trouvé."
'message si aucun enregistrement n'est trouvé.
End If

'Libère l'espaces mémoire des objets utilisés
Set Rg = Nothing: Set Sh = Nothing
'Ferme le recordset et la base de données
Rs1.Close: Db1.Close
'Libère la mémoire des objets
Set Rs1 = Nothing: Set Db1 = Nothing
End Sub

Avez vous eu déjà ce problème ?.

Merci de votre aide,

Jean59