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

fonctionnement hératique de déplacement de champ !

3 réponses
Avatar
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

3 réponses

Avatar
heureux-oli
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" a écrit dans le
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


Avatar
denis le breton
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" a écrit dans le
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







Avatar
Michel_D
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" a écrit dans le message de
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" a écrit dans le
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