OVH Cloud OVH Cloud

importer champ access

10 réponses
Avatar
isabelle
bonjour à tous,

est il possible d'importer sur excel 2002 le champ d'une table access
(type de données :Mémo) sans perdre une partie du texte.

merci pour vos bon conseils !
isabelle

10 réponses

Avatar
Dédé
Salut Isabelle !

Oui, cela est tout à fait possible mais, il me semble avoir vu quelques
chose sur la KDB de microsoft à ce sujet qui disait que l'importation de
champs texte d'Access vers Excel était limitée à un certains nombre de
caractères ... Mais va regarder à l'adresse suivante pour plus de
renseignements ;-))

http://support.microsoft.com/default.aspx?scid=kb;fr;467073&Product¬cFra
http://support.microsoft.com/default.aspx?scid=kb;fr;461718&Product¬cFra

ou bien plus généralement :
http://support.microsoft.com/search/default.aspx?QuerySource=gASr_Query&Catalog=LCID%3D1036%26CDID%3DFR-KB%26PRODLISTSRC%3DON&Product¬cFra&Queryc=Excel+importation&Query=Excel+importation&KeywordType=ANY&maxResults%&Titlesúlse&numDays

Salutations
Dédé
--
Pour répondre, enlever le NOSPAM
"isabelle" a écrit dans le message de
news:
bonjour à tous,

est il possible d'importer sur excel 2002 le champ d'une table access
(type de données :Mémo) sans perdre une partie du texte.

merci pour vos bon conseils !
isabelle


Avatar
Denis Michon
Bonjour Isabelle,


Si tu utilises ADO, la longueur du champ mémo importé dans excel sera de 1823 caractères.

Si tu utilises un ODBC, la longueur du champ sera de 32765 caractères soit le maximum de caractères que peut contenir
une cellule dans une feuille de calcul.


Salutations!



"isabelle" a écrit dans le message de news:
bonjour à tous,

est il possible d'importer sur excel 2002 le champ d'une table access
(type de données :Mémo) sans perdre une partie du texte.

merci pour vos bon conseils !
isabelle
Avatar
Vincent.
Il me semble également qu'Excel limite l'importation à 256
caractères...

-----Message d'origine-----
Salut Isabelle !

Oui, cela est tout à fait possible mais, il me semble
avoir vu quelques

chose sur la KDB de microsoft à ce sujet qui disait que
l'importation de

champs texte d'Access vers Excel était limitée à un
certains nombre de

caractères ... Mais va regarder à l'adresse suivante pour
plus de

renseignements ;-))

http://support.microsoft.com/default.aspx?
scid=kb;fr;467073&Product¬cFra

http://support.microsoft.com/default.aspx?
scid=kb;fr;461718&Product¬cFra


ou bien plus généralement :
http://support.microsoft.com/search/default.aspx?
QuerySource=gASr_Query&Catalog=LCID%3D1036%26CDID%3DFR-KB%

26PRODLISTSRC%
3DON&Product¬cFra&Queryc=Excel+importation&Query=Excel+im
portation&KeywordType=ANY&maxResults%&Titlesúlse&numDay
s=


Salutations
Dédé
--
Pour répondre, enlever le NOSPAM
"isabelle" a écrit dans le
message de

news:
bonjour à tous,

est il possible d'importer sur excel 2002 le champ
d'une table access


(type de données :Mémo) sans perdre une partie du texte.

merci pour vos bon conseils !
isabelle



.




Avatar
Denis Michon
Bonjour isabelle,

L'Originale de cette procédure est de : Ole P. Erlandsen

Voici un exemple avec DAO où tu peux importer un champ mémo directement d'Access vers Excel . Évidemment excel ne peut
recevoir plus de 32765 caractères.

La ligne de code va comme suit :

DAOFromAccessToExcel "Chemin&Table","NomDeLaTable", "NomDuChampÀImporter", "PlageExcel"

Évidemment, tu dois ajouter la référence

"Microsoft DAO 3.6 objects librairy"

'----------------------
Sub ImporterUnChampMémo()

DAOFromAccessToExcel "C:excelcomptoir.mdb", _
"Employés", "Notes", Range("B1")

End Sub
'--------------------

'------------------------------
Sub DAOFromAccessToExcel(DBFullName As String, TableName As String, _
FieldName As String, TargetRange As Range)

Dim db As DAO.Database, rs As DAO.Recordset
Dim lngRowIndex As Long
Set TargetRange = TargetRange.Cells(1, 1)
Set db = OpenDatabase(DBFullName)
Set rs = db.OpenRecordset(TableName, dbOpenTable)

lngRowIndex = 0
With rs
If Not .BOF Then .MoveFirst
While Not .EOF
TargetRange.Offset(lngRowIndex, 0) = Left(.Fields(FieldName), 32700)
.MoveNext
lngRowIndex = lngRowIndex + 1
Wend
End With
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
'------------------------------


Salutations!



"isabelle" a écrit dans le message de news:
bonjour à tous,

est il possible d'importer sur excel 2002 le champ d'une table access
(type de données :Mémo) sans perdre une partie du texte.

merci pour vos bon conseils !
isabelle
Avatar
isabelle
merci à tous pour votre aide.
ps/ Denis, j'ai utilisé ta méthode elle fonctionne très bien. j'essaie
de l'adapter pour réduire à un nombre d'enregistrement précis
je voudrais récupérer les enregistrements du champ "Description" pour
seulement quelques numéro inscrit dans une plage excel, ces numéros
correspondent au champ "Formulaire" de la même table.
c'est tu comme le faire ?
isabelle


Bonjour isabelle,

L'Originale de cette procédure est de : Ole P. Erlandsen

Voici un exemple avec DAO où tu peux importer un champ mémo directement d'Access vers Excel . Évidemment excel ne peut
recevoir plus de 32765 caractères.

La ligne de code va comme suit :

DAOFromAccessToExcel "Chemin&Table","NomDeLaTable", "NomDuChampÀImporter", "PlageExcel"

Évidemment, tu dois ajouter la référence

"Microsoft DAO 3.6 objects librairy"

'----------------------
Sub ImporterUnChampMémo()

DAOFromAccessToExcel "C:excelcomptoir.mdb", _
"Employés", "Notes", Range("B1")

End Sub
'--------------------

'------------------------------
Sub DAOFromAccessToExcel(DBFullName As String, TableName As String, _
FieldName As String, TargetRange As Range)

Dim db As DAO.Database, rs As DAO.Recordset
Dim lngRowIndex As Long
Set TargetRange = TargetRange.Cells(1, 1)
Set db = OpenDatabase(DBFullName)
Set rs = db.OpenRecordset(TableName, dbOpenTable)

lngRowIndex = 0
With rs
If Not .BOF Then .MoveFirst
While Not .EOF
TargetRange.Offset(lngRowIndex, 0) = Left(.Fields(FieldName), 32700)
.MoveNext
lngRowIndex = lngRowIndex + 1
Wend
End With
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
'------------------------------

Salutations!

"isabelle" a écrit dans le message de news:
bonjour à tous,

est il possible d'importer sur excel 2002 le champ d'une table access
(type de données :Mémo) sans perdre une partie du texte.

merci pour vos bon conseils !
isabelle


Avatar
Denis Michon
Bonjour Isabelle,

Ce dont je comprends de ta demande, tu as une liste de numéros dans une colonne d'une feuille d'excel, et tu aimerais
retrouvé les informations relatives au Champ "Description" à ces données dans la table d'origine Access.

Voici un exemple :

Sur la plage défini par la variable MyRange, la procédure fait une petite boucle et utilise chacune des cellules à tour
de rôle pour rechercher dans le champ juste à droite du champ dans la table access l'information. Cela suppose que la
recherche s'effectue sur un champ de table sans doublons. Attention, si tu utilises des variables, il doit y avoir
correspondance entre le type défini dans Excel et celui défini dans Access sinon tu vas avoir des petits problèmes !

Évidemment tu dois ajouter la bibliothèque :

"Microsoft DAO 3.X objects librairy"

'-----------------------------------------
Sub RechercherDataAccessPourExcel()

Dim MyRange As Range, C As Range
Set MyRange = Worksheets("Feuil1").Range("A1:A25")

Dim db As Database
Dim RstTrouve As Recordset
Dim Chaine As String

Set db = OpenDatabase("C:Mes Documentsbd2.mdb")
Set RstTrouve = db.OpenRecordset("Etudiant", dbOpenDynaset)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
For Each C In MyRange.SpecialCells(xlCellTypeConstants, 3)
Chaine = Trim(C.Value)
With RstTrouve
.FindFirst "[NumEtudiant] = " & Chr(34) & Chaine & Chr(34)
If .NoMatch = False Then
C(, 2) = RstTrouve(1)
End If
End With
Next
Set db = Nothing: Set RstTrouve = Nothing
Set MyRange = Nothing: Set C = Nothing
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic

End Sub
'-----------------------------------------



Salutations!





"isabelle" a écrit dans le message de news:
merci à tous pour votre aide.
ps/ Denis, j'ai utilisé ta méthode elle fonctionne très bien. j'essaie
de l'adapter pour réduire à un nombre d'enregistrement précis
je voudrais récupérer les enregistrements du champ "Description" pour
seulement quelques numéro inscrit dans une plage excel, ces numéros
correspondent au champ "Formulaire" de la même table.
c'est tu comme le faire ?
isabelle


Bonjour isabelle,

L'Originale de cette procédure est de : Ole P. Erlandsen

Voici un exemple avec DAO où tu peux importer un champ mémo directement d'Access vers Excel . Évidemment excel ne peut
recevoir plus de 32765 caractères.

La ligne de code va comme suit :

DAOFromAccessToExcel "Chemin&Table","NomDeLaTable", "NomDuChampÀImporter", "PlageExcel"

Évidemment, tu dois ajouter la référence

"Microsoft DAO 3.6 objects librairy"

'----------------------
Sub ImporterUnChampMémo()

DAOFromAccessToExcel "C:excelcomptoir.mdb", _
"Employés", "Notes", Range("B1")

End Sub
'--------------------

'------------------------------
Sub DAOFromAccessToExcel(DBFullName As String, TableName As String, _
FieldName As String, TargetRange As Range)

Dim db As DAO.Database, rs As DAO.Recordset
Dim lngRowIndex As Long
Set TargetRange = TargetRange.Cells(1, 1)
Set db = OpenDatabase(DBFullName)
Set rs = db.OpenRecordset(TableName, dbOpenTable)

lngRowIndex = 0
With rs
If Not .BOF Then .MoveFirst
While Not .EOF
TargetRange.Offset(lngRowIndex, 0) = Left(.Fields(FieldName), 32700)
.MoveNext
lngRowIndex = lngRowIndex + 1
Wend
End With
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
'------------------------------

Salutations!

"isabelle" a écrit dans le message de news:
bonjour à tous,

est il possible d'importer sur excel 2002 le champ d'une table access
(type de données :Mémo) sans perdre une partie du texte.

merci pour vos bon conseils !
isabelle


Avatar
isabelle
Cela suppose que la
recherche s'effectue sur un champ de table sans doublons. Attention, si tu utilises des >variables, il doit y avoir
correspondance entre le type défini dans Excel et celui défini dans Access sinon tu vas avoir des petits problèmes !


oui, c'était bien là mon problème et je l'ai résolut en ajoutant "Val"

With rs
If Not .BOF Then .MoveFirst
While Not .EOF
For i = 5 To Range("e65536").End(xlUp).Row
If Val(Range("E" & i)) = Val(Left(.Fields("Formulaire"), 5))
Then
Range("I" & i) = Left(.Fields(FieldName), 32700)
End If
Next
.MoveNext
lngRowIndex = lngRowIndex + 1
Wend
End With

un gros merci Denis,
bisou
isabelle

Avatar
Denis Michon
Bonjour Isabelle,

Et tant mieux si cela t'a aidé.

Ce chiffre 32700 dans la procédure peut être remplacer par 32765 qui est vraiment le nombre de caractères que l'on
peut inscrire dans une cellule de la feuille de calcul... J'ai publié cette procédure à la bourre ce matin comme disent
nos cousins d'outre-mer !


Salutations!



"isabelle" a écrit dans le message de news:


Cela suppose que la
recherche s'effectue sur un champ de table sans doublons. Attention, si tu utilises des >variables, il doit y avoir
correspondance entre le type défini dans Excel et celui défini dans Access sinon tu vas avoir des petits problèmes !


oui, c'était bien là mon problème et je l'ai résolut en ajoutant "Val"

With rs
If Not .BOF Then .MoveFirst
While Not .EOF
For i = 5 To Range("e65536").End(xlUp).Row
If Val(Range("E" & i)) = Val(Left(.Fields("Formulaire"), 5))
Then
Range("I" & i) = Left(.Fields(FieldName), 32700)
End If
Next
.MoveNext
lngRowIndex = lngRowIndex + 1
Wend
End With

un gros merci Denis,
bisou
isabelle

Avatar
isabelle
ok Denis,
c'est quant même très bizarre ce truc, car les données "Formulaire"
situées dans la colonne E sont en fait une partie d'un tcd dont la
source est la même table de données access.
c'est donnée sont numérique sur la table ils le sont aussi sur le tcd.
lorsque j'ai exécuté la macro au pas à pas les résultats de
If Val(Range("E" & i)) = Val(Left(.Fields("Formulaire"), 5))
vue dans la "bulle" avait l'air identique à l'oeil, et pourtant il a
fallue que j'ajoute "Val" pour la comparaison, en tout cas cela reste un
mistère non résolue pour moi. j'ai quant même résolut mon problème grace
à ton aide, en combinant tcd et macro avec DAO.

isabelle



Bonjour Isabelle,

Et tant mieux si cela t'a aidé.

Ce chiffre 32700 dans la procédure peut être remplacer par 32765 qui est vraiment le nombre de caractères que l'on
peut inscrire dans une cellule de la feuille de calcul... J'ai publié cette procédure à la bourre ce matin comme disent
nos cousins d'outre-mer !

Salutations!

"isabelle" a écrit dans le message de news:

Cela suppose que la
recherche s'effectue sur un champ de table sans doublons. Attention, si tu utilises des >variables, il doit y avoir
correspondance entre le type défini dans Excel et celui défini dans Access sinon tu vas avoir des petits problèmes !


oui, c'était bien là mon problème et je l'ai résolut en ajoutant "Val"

With rs
If Not .BOF Then .MoveFirst
While Not .EOF
For i = 5 To Range("e65536").End(xlUp).Row
If Val(Range("E" & i)) = Val(Left(.Fields("Formulaire"), 5))
Then
Range("I" & i) = Left(.Fields(FieldName), 32700)
End If
Next
.MoveNext
lngRowIndex = lngRowIndex + 1
Wend
End With

un gros merci Denis,
bisou
isabelle



Avatar
Denis Michon
Bonjour Isabelle,


L'emploi de la fonction "Left()" renvoie une valeur de type String.

Place la valeur 12255 dans la cellule A1 et observe la différence entre :

A = Range("A1")

B = Left(Range("A1"), 2)

A = type numérique
B = type string


Ceci étant dit, j'ai utilisé la fonction "Left()" dans la macro initiale parce que tu voulais importer un champ de type
Mémo dans une table d'access.

Un champ mémo peut accueillir des chaînes ayant 65536 caractères. Pour éviter que la procédure se plante si un champ
dépasse la capacité d'accueil d'une cellule Excel (32765), j'ai utilisé cette façon de tronquer les chaînes trop
longues. utilisation de cette fonction n'est pas nécessaire si le champs à importer n'est pas de type "mémo".


Salutations!




"isabelle" a écrit dans le message de news:
ok Denis,
c'est quant même très bizarre ce truc, car les données "Formulaire"
situées dans la colonne E sont en fait une partie d'un tcd dont la
source est la même table de données access.
c'est donnée sont numérique sur la table ils le sont aussi sur le tcd.
lorsque j'ai exécuté la macro au pas à pas les résultats de
If Val(Range("E" & i)) = Val(Left(.Fields("Formulaire"), 5))
vue dans la "bulle" avait l'air identique à l'oeil, et pourtant il a
fallue que j'ajoute "Val" pour la comparaison, en tout cas cela reste un
mistère non résolue pour moi. j'ai quant même résolut mon problème grace
à ton aide, en combinant tcd et macro avec DAO.

isabelle



Bonjour Isabelle,

Et tant mieux si cela t'a aidé.

Ce chiffre 32700 dans la procédure peut être remplacer par 32765 qui est vraiment le nombre de caractères que l'on
peut inscrire dans une cellule de la feuille de calcul... J'ai publié cette procédure à la bourre ce matin comme
disent

nos cousins d'outre-mer !

Salutations!

"isabelle" a écrit dans le message de news:

Cela suppose que la
recherche s'effectue sur un champ de table sans doublons. Attention, si tu utilises des >variables, il doit y avoir
correspondance entre le type défini dans Excel et celui défini dans Access sinon tu vas avoir des petits problèmes !


oui, c'était bien là mon problème et je l'ai résolut en ajoutant "Val"

With rs
If Not .BOF Then .MoveFirst
While Not .EOF
For i = 5 To Range("e65536").End(xlUp).Row
If Val(Range("E" & i)) = Val(Left(.Fields("Formulaire"), 5))
Then
Range("I" & i) = Left(.Fields(FieldName), 32700)
End If
Next
.MoveNext
lngRowIndex = lngRowIndex + 1
Wend
End With

un gros merci Denis,
bisou
isabelle