fonctionnement hératique de déplacement de champ !

Le
denis le breton
Bjr, à tous encore quelques jours à bosser avant les congés.
Mais je dois terminer un truc.
L'ordre des champs n'a pas d'importance, sauf quand on veut exporter une
table.
Or j'exporte des tables au format texte.
Comme l'ordre des champs n'est pas comme il faudrait j'utilise une fonction
'-
Function deplace_ch(ByVal strTbl As String, ByVal strChp As String, ByVal
pos As Integer)
' attention le compte commence à 0
On Error GoTo err:
Dim Db As DAO.Database, Tabb As DAO.TableDef, Ch As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Ch =
Tabb.Fields(strChp)
Ch.OrdinalPosition = pos
Exit Function
err:
MsgBox "L'action déplacer le champ a échouée"
End Function
'
' pour lancer
Sub lanc()
n_tab = "Ma_Table_a_moi": n_chp = "Nom_du_champ_a_deplacer": pos = 0
call deplace_ch(n_tab,n_chp,n_pos)
End Sub
'
Ben quand je veux déplacer un champ en première colonne il me le place en
seconde colonne de temps en temps, pour le forcer à bouger, j'ai fait :
'
Sub dep_ch()
n_tabl = "MHGPMN82_totalité_100782"
pos = NbDeChamp(n_tabl) 'compter
le nbre de champ
Ch = "Référence"
Call ajou_chp(n_tabl, Ch)
all deplace_chlocal(n_tabl, Ch, pos)
rg = 0
Call deplace_chl(n_tabl, Ch, rg)
Ch = "N° de téléphone"
Call deplace_ch(n_tabl, Ch, pos)
rg = 1
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Civilité"
Call deplace_ch(n_tabl, Ch, pos)
rg = 2
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Nom"
Call deplace_chl(n_tabl, Ch, pos)
rg = 3
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Prénom"
Call deplace_ch(n_tabl, Ch, pos)
rg = 4
Call deplace_ch(n_tabl, Ch, rg)
End Sub
'
'pour mémoire
Function ajou_chp(ByVal strTbl As String, ByVal strChp As String)
Dim Db As DAO.Database, Tabb As DAO.TableDef, Chp As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Chp =
Tabb.CreateField(strChp, dbText, 120) 'Etape 1 : Créer le champ
'Etape 2 : Définit les propriétés
Chp.AllowZeroLength = True 'Chaine vide autorisée : Non
Chp.Required = True 'Null interdit : Oui
Tabb.Fields.Append Chp 'Etape 3 : Ajout du champ à la table
Tabb.Fields.Refresh 'Rafraichit la collection
End Function
'
Function NbDeChamp(ByVal strTbl As String) As Integer
On Error GoTo err
Dim Db As DAO.Database, t As DAO.TableDef
Set Db = CurrentDb: Set t = Db.TableDefs(strTbl): NbDeChamp = t.Fields.Count
err:
End Function
'
Mais rien n'y fait ACCESS ne me fait pas ce que je lui demande, pire quand
je regarde la table, je n'ai pas la même chose entre Ouvrir et Modifier, dans
l'ordre des champs !!!
ACCESS est il ensorcelé ?
Denis
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
heureux-oli
Le #6313081
N'as tu jamais pensé à faire une requête sélection et exporter ta requête ?
Normalement, les champs sont au "bon endroit" et plus facile qu'une fonction
assez longue.

--
heureux-oli
http://heureuxoli.developpez.com/


"denis le breton" message de news:
Bjr, à tous encore quelques jours à bosser avant les congés.
Mais je dois terminer un truc.
L'ordre des champs n'a pas d'importance, sauf quand on veut exporter une
table.
Or j'exporte des tables au format texte.
Comme l'ordre des champs n'est pas comme il faudrait j'utilise une
fonction
'----
Function deplace_ch(ByVal strTbl As String, ByVal strChp As String, ByVal
pos As Integer)
' attention le compte commence à 0
On Error GoTo err:
Dim Db As DAO.Database, Tabb As DAO.TableDef, Ch As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Ch > Tabb.Fields(strChp)
Ch.OrdinalPosition = pos
Exit Function
err:
MsgBox "L'action déplacer le champ a échouée"
End Function
'---
' pour lancer
Sub lanc()
n_tab = "Ma_Table_a_moi": n_chp = "Nom_du_champ_a_deplacer": pos = 0
call deplace_ch(n_tab,n_chp,n_pos)
End Sub
'---
Ben quand je veux déplacer un champ en première colonne il me le place en
seconde colonne de temps en temps, pour le forcer à bouger, j'ai fait :
'---
Sub dep_ch()
n_tabl = "MHGPMN82_totalité_100782"
pos = NbDeChamp(n_tabl)
'compter
le nbre de champ
Ch = "Référence"
Call ajou_chp(n_tabl, Ch)
all deplace_chlocal(n_tabl, Ch, pos)
rg = 0
Call deplace_chl(n_tabl, Ch, rg)
Ch = "N° de téléphone"
Call deplace_ch(n_tabl, Ch, pos)
rg = 1
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Civilité"
Call deplace_ch(n_tabl, Ch, pos)
rg = 2
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Nom"
Call deplace_chl(n_tabl, Ch, pos)
rg = 3
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Prénom"
Call deplace_ch(n_tabl, Ch, pos)
rg = 4
Call deplace_ch(n_tabl, Ch, rg)
End Sub
'---
'pour mémoire
Function ajou_chp(ByVal strTbl As String, ByVal strChp As String)
Dim Db As DAO.Database, Tabb As DAO.TableDef, Chp As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Chp > Tabb.CreateField(strChp, dbText, 120) 'Etape 1 : Créer le champ
'Etape 2 : Définit les propriétés
Chp.AllowZeroLength = True 'Chaine vide autorisée : Non
Chp.Required = True 'Null interdit : Oui
Tabb.Fields.Append Chp 'Etape 3 : Ajout du champ à la table
Tabb.Fields.Refresh 'Rafraichit la collection
End Function
'---
Function NbDeChamp(ByVal strTbl As String) As Integer
On Error GoTo err
Dim Db As DAO.Database, t As DAO.TableDef
Set Db = CurrentDb: Set t = Db.TableDefs(strTbl): NbDeChamp =
t.Fields.Count
err:
End Function
'---
Mais rien n'y fait ACCESS ne me fait pas ce que je lui demande, pire quand
je regarde la table, je n'ai pas la même chose entre Ouvrir et Modifier,
dans
l'ordre des champs !!!
ACCESS est il ensorcelé ?
Denis


denis le breton
Le #6312861
Trop simple ! :-)))
l'idée est celle à utiliser quand on connait la structure de la table
(environ 99% des cas d'utilisation).
Hélas je récupère des tables que je veux absolument exporter dans un format
composé par :
une liste de champs que je sais être présents, mais pas forcément écrits
comme il faut (exemple CP au lieu de code postal, ou Prénom au lieu de prenom)
et des champs dont je ne peux systématiser la présence mais qui peuvent être
là et que je dois exporter. (exemple Contact précédent, lien familial, ...)
Il me faut donc les connaître les renommer si nécessaire les remettre dans
l'ordre (pour les champs attendus) et joindre les autres champs présents

Concernant ma question j'ai trouvé un élément de réponse dans la nuit :
Ordinal Position est une valeur relative qui n'est pas unique, deux chgamp
peuvent avoir le même OrdinalPosition, dans ce cas access les présente par
ordre alphabétique.
Je teste la fonction suivante: je décale l'OrdinalPosition de chaque champ
et après je les déplace dans l'ordre voulu sans risque de 'chevauchement'
Merci de ton intérêt
Denis

N'as tu jamais pensé à faire une requête sélection et exporter ta requête ?
Normalement, les champs sont au "bon endroit" et plus facile qu'une fonction
assez longue.

--
heureux-oli
http://heureuxoli.developpez.com/


"denis le breton" message de news:
Bjr, à tous encore quelques jours à bosser avant les congés.
Mais je dois terminer un truc.
L'ordre des champs n'a pas d'importance, sauf quand on veut exporter une
table.
Or j'exporte des tables au format texte.
Comme l'ordre des champs n'est pas comme il faudrait j'utilise une
fonction
'----
Function deplace_ch(ByVal strTbl As String, ByVal strChp As String, ByVal
pos As Integer)
' attention le compte commence à 0
On Error GoTo err:
Dim Db As DAO.Database, Tabb As DAO.TableDef, Ch As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Ch > > Tabb.Fields(strChp)
Ch.OrdinalPosition = pos
Exit Function
err:
MsgBox "L'action déplacer le champ a échouée"
End Function
'---
' pour lancer
Sub lanc()
n_tab = "Ma_Table_a_moi": n_chp = "Nom_du_champ_a_deplacer": pos = 0
call deplace_ch(n_tab,n_chp,n_pos)
End Sub
'---
Ben quand je veux déplacer un champ en première colonne il me le place en
seconde colonne de temps en temps, pour le forcer à bouger, j'ai fait :
'---
Sub dep_ch()
n_tabl = "MHGPMN82_totalité_100782"
pos = NbDeChamp(n_tabl)
'compter
le nbre de champ
Ch = "Référence"
Call ajou_chp(n_tabl, Ch)
all deplace_chlocal(n_tabl, Ch, pos)
rg = 0
Call deplace_chl(n_tabl, Ch, rg)
Ch = "N° de téléphone"
Call deplace_ch(n_tabl, Ch, pos)
rg = 1
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Civilité"
Call deplace_ch(n_tabl, Ch, pos)
rg = 2
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Nom"
Call deplace_chl(n_tabl, Ch, pos)
rg = 3
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Prénom"
Call deplace_ch(n_tabl, Ch, pos)
rg = 4
Call deplace_ch(n_tabl, Ch, rg)
End Sub
'---
'pour mémoire
Function ajou_chp(ByVal strTbl As String, ByVal strChp As String)
Dim Db As DAO.Database, Tabb As DAO.TableDef, Chp As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Chp > > Tabb.CreateField(strChp, dbText, 120) 'Etape 1 : Créer le champ
'Etape 2 : Définit les propriétés
Chp.AllowZeroLength = True 'Chaine vide autorisée : Non
Chp.Required = True 'Null interdit : Oui
Tabb.Fields.Append Chp 'Etape 3 : Ajout du champ à la table
Tabb.Fields.Refresh 'Rafraichit la collection
End Function
'---
Function NbDeChamp(ByVal strTbl As String) As Integer
On Error GoTo err
Dim Db As DAO.Database, t As DAO.TableDef
Set Db = CurrentDb: Set t = Db.TableDefs(strTbl): NbDeChamp =
t.Fields.Count
err:
End Function
'---
Mais rien n'y fait ACCESS ne me fait pas ce que je lui demande, pire quand
je regarde la table, je n'ai pas la même chose entre Ouvrir et Modifier,
dans
l'ordre des champs !!!
ACCESS est il ensorcelé ?
Denis







Michel_D
Le #6312801
Bonjour,

Je suis tout à fait d'accord avec heureux-oli pour l'utilisation d'une requête.

Rien ne t'empèche de créer ta requête en vba en énumérant tous les champs
de la table que tu veux traiter.

1) Tu ouvre un recordset et tu mémorise le libellé de tes champs
2) Tu crée ta requête.
3) Tu exporte le résultat de ta requête.
4) Tu supprime ta requête.


"denis le breton" news:
Trop simple ! :-)))
l'idée est celle à utiliser quand on connait la structure de la table
(environ 99% des cas d'utilisation).
Hélas je récupère des tables que je veux absolument exporter dans un format
composé par :
une liste de champs que je sais être présents, mais pas forcément écrits
comme il faut (exemple CP au lieu de code postal, ou Prénom au lieu de prenom)
et des champs dont je ne peux systématiser la présence mais qui peuvent être
là et que je dois exporter. (exemple Contact précédent, lien familial, ...)
Il me faut donc les connaître les renommer si nécessaire les remettre dans
l'ordre (pour les champs attendus) et joindre les autres champs présents

Concernant ma question j'ai trouvé un élément de réponse dans la nuit :
Ordinal Position est une valeur relative qui n'est pas unique, deux chgamp
peuvent avoir le même OrdinalPosition, dans ce cas access les présente par
ordre alphabétique.
Je teste la fonction suivante: je décale l'OrdinalPosition de chaque champ
et après je les déplace dans l'ordre voulu sans risque de 'chevauchement'
Merci de ton intérêt
Denis

N'as tu jamais pensé à faire une requête sélection et exporter ta requête ?
Normalement, les champs sont au "bon endroit" et plus facile qu'une fonction
assez longue.

--
heureux-oli
http://heureuxoli.developpez.com/


"denis le breton" message de news:
Bjr, à tous encore quelques jours à bosser avant les congés.
Mais je dois terminer un truc.
L'ordre des champs n'a pas d'importance, sauf quand on veut exporter une
table.
Or j'exporte des tables au format texte.
Comme l'ordre des champs n'est pas comme il faudrait j'utilise une
fonction
'----
Function deplace_ch(ByVal strTbl As String, ByVal strChp As String, ByVal
pos As Integer)
' attention le compte commence à 0
On Error GoTo err:
Dim Db As DAO.Database, Tabb As DAO.TableDef, Ch As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Ch > > > Tabb.Fields(strChp)
Ch.OrdinalPosition = pos
Exit Function
err:
MsgBox "L'action déplacer le champ a échouée"
End Function
'---
' pour lancer
Sub lanc()
n_tab = "Ma_Table_a_moi": n_chp = "Nom_du_champ_a_deplacer": pos = 0
call deplace_ch(n_tab,n_chp,n_pos)
End Sub
'---
Ben quand je veux déplacer un champ en première colonne il me le place en
seconde colonne de temps en temps, pour le forcer à bouger, j'ai fait :
'---
Sub dep_ch()
n_tabl = "MHGPMN82_totalité_100782"
pos = NbDeChamp(n_tabl)
'compter
le nbre de champ
Ch = "Référence"
Call ajou_chp(n_tabl, Ch)
all deplace_chlocal(n_tabl, Ch, pos)
rg = 0
Call deplace_chl(n_tabl, Ch, rg)
Ch = "N° de téléphone"
Call deplace_ch(n_tabl, Ch, pos)
rg = 1
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Civilité"
Call deplace_ch(n_tabl, Ch, pos)
rg = 2
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Nom"
Call deplace_chl(n_tabl, Ch, pos)
rg = 3
Call deplace_ch(n_tabl, Ch, rg)
Ch = "Prénom"
Call deplace_ch(n_tabl, Ch, pos)
rg = 4
Call deplace_ch(n_tabl, Ch, rg)
End Sub
'---
'pour mémoire
Function ajou_chp(ByVal strTbl As String, ByVal strChp As String)
Dim Db As DAO.Database, Tabb As DAO.TableDef, Chp As DAO.Field
Set Db = CurrentDb: Set Tabb = Db.TableDefs(strTbl): Set Chp > > > Tabb.CreateField(strChp, dbText, 120) 'Etape 1 : Créer le champ
'Etape 2 : Définit les propriétés
Chp.AllowZeroLength = True 'Chaine vide autorisée : Non
Chp.Required = True 'Null interdit : Oui
Tabb.Fields.Append Chp 'Etape 3 : Ajout du champ à la table
Tabb.Fields.Refresh 'Rafraichit la collection
End Function
'---
Function NbDeChamp(ByVal strTbl As String) As Integer
On Error GoTo err
Dim Db As DAO.Database, t As DAO.TableDef
Set Db = CurrentDb: Set t = Db.TableDefs(strTbl): NbDeChamp > > > t.Fields.Count
err:
End Function
'---
Mais rien n'y fait ACCESS ne me fait pas ce que je lui demande, pire quand
je regarde la table, je n'ai pas la même chose entre Ouvrir et Modifier,
dans
l'ordre des champs !!!
ACCESS est il ensorcelé ?
Denis









Publicité
Poster une réponse
Anonyme