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

COMMENT AUTOMATISER LE CHANGEMENT DU TYPE DE DONNEES D UN CHAMP D

5 réponses
Avatar
Mimiit
Dans une base de donnees Access 2000, j'importe des donnees extraites de SAP
à partir de fichiers *.dbf.
Certains champs des tables ainsi importées ne sont pas au bon format ( texte
alors qu'il me faut du numérique entier ou du réel double ).
Afin d'automatiser l'application, comment écrire une macro ou du code vba
pour changer le type de donnees des champs incriminés ?
Merci d'avance de votre aide.

5 réponses

Avatar
Rv
Bonjour,

Si vous avez la possibilité de réaliser l'export SAP au format texte
alors il devient possible de paramétrer une fois pour toute l'import et
d'enregistrer ces spécifications pour retrouver le paramétrage. Avez vous
fait des essais dans ce sens?

A+

Rv


"Mimiit" a écrit dans le message de
news:
Dans une base de donnees Access 2000, j'importe des donnees extraites de
SAP

à partir de fichiers *.dbf.
Certains champs des tables ainsi importées ne sont pas au bon format (
texte

alors qu'il me faut du numérique entier ou du réel double ).
Afin d'automatiser l'application, comment écrire une macro ou du code vba
pour changer le type de donnees des champs incriminés ?
Merci d'avance de votre aide.


Avatar
Mimiit
En fait je peux écrire un abap dans sap qui me sortira la donnée comme je
l'attends (actuellement je ne suis qu'au stade du query).
Mais je souhaite faire un cas d'école de ce problème.
aussi je cherche plutot du coté des data access objects, et plus
particulièrement de l'objet Tabledef.
merci de votre réponse.


Bonjour,

Si vous avez la possibilité de réaliser l'export SAP au format texte
alors il devient possible de paramétrer une fois pour toute l'import et
d'enregistrer ces spécifications pour retrouver le paramétrage. Avez vous
fait des essais dans ce sens?

A+

Rv


"Mimiit" a écrit dans le message de
news:
Dans une base de donnees Access 2000, j'importe des donnees extraites de
SAP

à partir de fichiers *.dbf.
Certains champs des tables ainsi importées ne sont pas au bon format (
texte

alors qu'il me faut du numérique entier ou du réel double ).
Afin d'automatiser l'application, comment écrire une macro ou du code vba
pour changer le type de donnees des champs incriminés ?
Merci d'avance de votre aide.







Avatar
Jessy Sempere [MVP]
Bonjour

Tiens c'est marrant, je passe mon temps à traiter des données
de SAP (module immo, projet, pm, ...)

Donc perso, je fais comme te le décris Rv, je fais des exports
en fichier local (donc txt), ensuite il suffit de créer des formats
personnalisés d'import sous Access et de les ré-utilisés à chaque
fois...

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Rv" a écrit dans le message news:

Bonjour,

Si vous avez la possibilité de réaliser l'export SAP au format texte
alors il devient possible de paramétrer une fois pour toute l'import et
d'enregistrer ces spécifications pour retrouver le paramétrage. Avez vous
fait des essais dans ce sens?

A+

Rv


"Mimiit" a écrit dans le message de
news:
Dans une base de donnees Access 2000, j'importe des donnees extraites de
SAP

à partir de fichiers *.dbf.
Certains champs des tables ainsi importées ne sont pas au bon format (
texte

alors qu'il me faut du numérique entier ou du réel double ).
Afin d'automatiser l'application, comment écrire une macro ou du code
vba


pour changer le type de donnees des champs incriminés ?
Merci d'avance de votre aide.






Avatar
Jessy Sempere [MVP]
Re,

En fait je peux écrire un abap dans sap qui me sortira la donnée comme je
l'attends (actuellement je ne suis qu'au stade du query).


Ok mais là, ça n'a pas d'importance du point de vue d'Access,
si tu fais un Abap, ton traitement SAP sera normalement plus
rapide mais le résultat à exporter sera le même que le Query
que tu as déjà fais. Dans le standard SAP, tu peux faire une sortie
en fichier local (peut-être pas en ALV) mais bon... le mieux
pour l'exploitation dans d'autres base de donnée (Access)
est donc d'utiliser le fichier local non convertie.

Mais je souhaite faire un cas d'école de ce problème.
aussi je cherche plutot du coté des data access objects, et plus
particulièrement de l'objet Tabledef.
merci de votre réponse.


Pas besoins d'utiliser les TableDef pour change le type de donnée,
le mieux est comme je te le disais, d'importer directement dans le
bon format tes données en utilisant un format personnalisé que tu
sauvegardes pour les autres traitements.

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------


Bonjour,

Si vous avez la possibilité de réaliser l'export SAP au format texte
alors il devient possible de paramétrer une fois pour toute l'import et
d'enregistrer ces spécifications pour retrouver le paramétrage. Avez
vous


fait des essais dans ce sens?

A+

Rv


"Mimiit" a écrit dans le message de
news:
Dans une base de donnees Access 2000, j'importe des donnees extraites
de



SAP
à partir de fichiers *.dbf.
Certains champs des tables ainsi importées ne sont pas au bon format (
texte

alors qu'il me faut du numérique entier ou du réel double ).
Afin d'automatiser l'application, comment écrire une macro ou du code
vba



pour changer le type de donnees des champs incriminés ?
Merci d'avance de votre aide.









Avatar
Rv
Re,


Apparement on ne peut pas changer le type d'un champs déjà créé avec DAO (ni
avec ADOX). Donc comme j''avais un peu de temps voila une ébauche de : "je
réinvinte l'import". Histoire de faire du DAO des TABLEDEFS, ...

Le programme ci dessous fonctionne selon le principe suivant:
- Creation d'un nouveau champ avec un type de donné figé (long).
- Conversion et copie des données du champs à convertir (dans mon cas text)
dans le nouveau champs.
- J'ai ajouté une gestion d'erreur qui stocke les enregistrements non
convertis dans une table d'erreurs vidé au début si elle existe ou créé
sinon.
- Suppression du champs converti si il n'y a pas eu d'erreur

Il faudrait entre autre rajouter :
- du paramétrage au niveau du type du champs converti et donc de la
conversion elle même
- la possibilité de convertir plus d'un champs à la fois

On voit donc que ca peut se compliquer trés vite...

A+

Rv

Sub testImport()
Const conNomTableImport = "DBO_COMM"
Const conNomTableImportError = "ImportErrorDBO_COMM"
Const conNomChampImportAConvertir = "CODECOMMUN"
Const conNomChampImportConverti = "Nouveau"

Dim strConn As String
Dim objRs As dao.Recordset
Dim objTable As dao.TableDef
Dim objBd As dao.Database
Dim objField As dao.Field
Dim objTableErr As dao.TableDef
Dim objFieldErr As dao.Field
Dim lngComptEnr As Long
Dim booUneErreur As Boolean


Set objBd = CurrentDb

' Suppression dans la table des erreurs ou création de la table des
erreurs si elle n'existe pas
On Error Resume Next
Debug.Print objBd.TableDefs(conNomTableImportError).Name

If Err = 0 Then
On Error GoTo finErr
objBd.Execute "DELETE * FROM " & conNomTableImportError
Else
On Error GoTo finErr
Set objTableErr = CurrentDb.CreateTableDef(conNomTableImportError)
objTableErr.Name = conNomTableImportError

Set objFieldErr = objTableErr.CreateField("ImportErrorNumEnr",
dbLong)
objTableErr.Fields.Append objFieldErr

Set objFieldErr = objTableErr.CreateField("ImportErrorValEnr",
dbText)
objTableErr.Fields.Append objFieldErr

objBd.TableDefs.Append objTableErr
End If


' Création d'un nouveau champs avec le bon type
Set objTable = objBd.TableDefs(conNomTableImport)
Set objField = objTable.CreateField(conNomChampImportConverti, dbLong)
objTable.Fields.Append objField

' Copie des données dans ce champs avec conversion et gestion d'erreur
Set objRs = CurrentDb.OpenRecordset("SELECT " &
conNomChampImportConverti & ", " & conNomChampImportAConvertir & " FROM " &
conNomTableImport)
lngComptEnr = 1
On Error GoTo gereErr
Do While Not objRs.EOF
objRs.Edit
objRs(conNomChampImportConverti) CLng(objRs(conNomChampImportAConvertir))
objRs.Update
objRs.MoveNext
lngComptEnr = lngComptEnr + 1
Loop
On Error GoTo finErr
objRs.Close
Set objRs = Nothing

' Suppression du champs du mauvais type si pas d'erreur
If Not booUneErreur Then
objTable.Fields.Delete conNomChampImportAConvertir
End If

Set objField = Nothing
Set objFieldErr = Nothing
Set objTable = Nothing
Set objTableErr = Nothing
Set objBd = Nothing

Exit Sub

gereErr:
booUneErreur = True
CurrentDb.Execute "INSERT INTO ImportErrorDBO_COMM (ImportErrorNumEnr,
ImportErrorValEnr) VALUES (" & lngComptEnr & ", '" &
objRs(conNomChampImportAConvertir) & "')"
Resume Next

finErr:
MsgBox ("Erreur " & Err.Description & vbCrLf & "Traitement abandonné.")
End Sub

"Mimiit" a écrit dans le message de
news:
En fait je peux écrire un abap dans sap qui me sortira la donnée comme je
l'attends (actuellement je ne suis qu'au stade du query).
Mais je souhaite faire un cas d'école de ce problème.
aussi je cherche plutot du coté des data access objects, et plus
particulièrement de l'objet Tabledef.
merci de votre réponse.


Bonjour,

Si vous avez la possibilité de réaliser l'export SAP au format texte
alors il devient possible de paramétrer une fois pour toute l'import et
d'enregistrer ces spécifications pour retrouver le paramétrage. Avez
vous


fait des essais dans ce sens?

A+

Rv


"Mimiit" a écrit dans le message de
news:
Dans une base de donnees Access 2000, j'importe des donnees extraites
de



SAP
à partir de fichiers *.dbf.
Certains champs des tables ainsi importées ne sont pas au bon format (
texte

alors qu'il me faut du numérique entier ou du réel double ).
Afin d'automatiser l'application, comment écrire une macro ou du code
vba



pour changer le type de donnees des champs incriminés ?
Merci d'avance de votre aide.