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

Ajouter plusieurs champs dans une table

10 réponses
Avatar
Pat
Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une table. Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ "Champ2" n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ "Champ1" existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:\db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function

10 réponses

Avatar
Patrice
bonjour,

Il faut gérer les erreurs :

On error goto xx
out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis remplacer le 1 par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une table. Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ "Champ2" n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ "Champ1" existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function





Avatar
Patrice
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis remplacer le 1 par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une table. Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ "Champ2" n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ "Champ1" existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function







Avatar
Pat
Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun message
d'erreur. Tout simplement le champ "Champ2" n'est pas créé.

Une idée?

Pat

"Patrice" a écrit dans le message de
news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis remplacer le 1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ "Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ "Champ1"
existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function









Avatar
Patrice
Ne test pas si il existe déjà



Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun message
d'erreur. Tout simplement le champ "Champ2" n'est pas créé.

Une idée?

Pat

"Patrice" a écrit dans le message de
news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis remplacer le 1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ "Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ "Champ1"
existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function














Avatar
Pat
Rien à faire il ne crée pas le "Champ2" si "Champ1" existe, j'ai plus
l'impression que c'est la macro qui s'arrête.

Merci

"Patrice" a écrit dans le message de
news:
Ne test pas si il existe déjà



Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun message
d'erreur. Tout simplement le champ "Champ2" n'est pas créé.

Une idée?

Pat

"Patrice" a écrit dans le message de
news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis remplacer le
1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une
table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai
plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ
"Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ "Champ1"
existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database,
Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function
















Avatar
Jessy Sempere [MVP]
Bonjour

Dans le doute, ré-initialise ta variable Trouve en début de fonction.
Et remplaces aussi, if not trouve then par if trouveúlse then

Du coup ta fonction devrait avoir cette tête :

Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean

trouve = false

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If trouve = false Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a1753b$0$10962$

Rien à faire il ne crée pas le "Champ2" si "Champ1" existe, j'ai plus
l'impression que c'est la macro qui s'arrête.

Merci

"Patrice" a écrit dans le message de
news:
Ne test pas si il existe déjà



Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun
message



d'erreur. Tout simplement le champ "Champ2" n'est pas créé.

Une idée?

Pat

"Patrice" a écrit dans le message
de



news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis remplacer
le





1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une
table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai
plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ
"Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ
"Champ1"






existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database,
Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function




















Avatar
Pat
Merci pour ton aide Jessie mais ça ne fonctionne pas. Ça fonctionne si
"Champ1" n'existe pas.

Pat


"Jessy Sempere [MVP]" a écrit dans le message de
news: 43a17712$
Bonjour

Dans le doute, ré-initialise ta variable Trouve en début de fonction.
Et remplaces aussi, if not trouve then par if trouveúlse then

Du coup ta fonction devrait avoir cette tête :

Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean

trouve = false

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If trouve = false Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a1753b$0$10962$

Rien à faire il ne crée pas le "Champ2" si "Champ1" existe, j'ai plus
l'impression que c'est la macro qui s'arrête.

Merci

"Patrice" a écrit dans le message de
news:
Ne test pas si il existe déjà



Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun
message



d'erreur. Tout simplement le champ "Champ2" n'est pas créé.

Une idée?

Pat

"Patrice" a écrit dans le message
de



news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis remplacer
le





1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une
table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai
plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ
"Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ
"Champ1"






existe?

Merci pour vos lumières

Pat

----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database,
Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function
























Avatar
Jessy Sempere [MVP]
Re,

C'est bizarre, j'ai testé ton code et il fonctionne sans problème...

Plutôt que de le lancer par une macro, fait une autre fonction de ce type :

Fonction test
ajoutchamptbleA "champ1",10
ajoutchamptbleA "champ2",10
end function

que tu lances en appuyant sur F8 pour exécuter ton code en mode pas à pas...
du coup, tu verras tout de suite, si tu sors de ta fonction, alors que tu ne
devrais
pas...
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a17a79$0$10278$

Merci pour ton aide Jessie mais ça ne fonctionne pas. Ça fonctionne si
"Champ1" n'existe pas.

Pat


"Jessy Sempere [MVP]" a écrit dans le message
de

news: 43a17712$
Bonjour

Dans le doute, ré-initialise ta variable Trouve en début de fonction.
Et remplaces aussi, if not trouve then par if trouveúlse then

Du coup ta fonction devrait avoir cette tête :

Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve As
Boolean

trouve = false

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If trouve = false Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a1753b$0$10962$

Rien à faire il ne crée pas le "Champ2" si "Champ1" existe, j'ai plus
l'impression que c'est la macro qui s'arrête.

Merci

"Patrice" a écrit dans le message
de



news:
Ne test pas si il existe déjà



Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun
message



d'erreur. Tout simplement le champ "Champ2" n'est pas créé.

Une idée?

Pat

"Patrice" a écrit dans le
message





de
news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis
remplacer







le
1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans une
table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai
plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ
"Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ
"Champ1"






existe?

Merci pour vos lumières

Pat



----------------------------------------------------------------






Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database,
Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function




























Avatar
Pat
Impec, je me doutais bien que c'était cette macro qui bloquait et comme un
con je ne pensais pas à la lancer en VBA.

Merci beaucoup pour vos aides précieuses.

Pat

"Jessy Sempere [MVP]" a écrit dans le message de
news:
Re,

C'est bizarre, j'ai testé ton code et il fonctionne sans problème...

Plutôt que de le lancer par une macro, fait une autre fonction de ce type
:

Fonction test
ajoutchamptbleA "champ1",10
ajoutchamptbleA "champ2",10
end function

que tu lances en appuyant sur F8 pour exécuter ton code en mode pas à
pas...
du coup, tu verras tout de suite, si tu sors de ta fonction, alors que tu
ne
devrais
pas...
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a17a79$0$10278$

Merci pour ton aide Jessie mais ça ne fonctionne pas. Ça fonctionne si
"Champ1" n'existe pas.

Pat


"Jessy Sempere [MVP]" a écrit dans le message
de

news: 43a17712$
Bonjour

Dans le doute, ré-initialise ta variable Trouve en début de fonction.
Et remplaces aussi, if not trouve then par if trouveúlse then

Du coup ta fonction devrait avoir cette tête :

Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve
As
Boolean

trouve = false

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If trouve = false Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a1753b$0$10962$

Rien à faire il ne crée pas le "Champ2" si "Champ1" existe, j'ai plus
l'impression que c'est la macro qui s'arrête.

Merci

"Patrice" a écrit dans le message
de



news:
Ne test pas si il existe déjà



Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun
message



d'erreur. Tout simplement le champ "Champ2" n'est pas créé.

Une idée?

Pat

"Patrice" a écrit dans le
message





de
news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx


Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis
remplacer







le
1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans
une
table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai
plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ
"Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même si le champ
"Champ1"






existe?

Merci pour vos lumières

Pat



----------------------------------------------------------------






Function AjoutChampTbleA(strNomChamp As String, intTypeChamp
As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database,
Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function
































Avatar
toufiqihaddou
Pat a écrit le 15/12/2005 à 15h54 :
Impec, je me doutais bien que c'était cette macro qui bloquait et comme
un
con je ne pensais pas à la lancer en VBA.

Merci beaucoup pour vos aides précieuses.

Pat

"Jessy Sempere [MVP]" a
écrit dans le message de
news:
Re,

C'est bizarre, j'ai testé ton code et il fonctionne sans
problème...

Plutôt que de le lancer par une macro, fait une autre fonction de ce
type
:

Fonction test
ajoutchamptbleA "champ1",10
ajoutchamptbleA "champ2",10
end function

que tu lances en appuyant sur F8 pour exécuter ton code en mode pas
à
pas...
du coup, tu verras tout de suite, si tu sors de ta fonction, alors que tu
ne
devrais
pas...
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a17a79$0$10278$

Merci pour ton aide Jessie mais ça ne fonctionne pas. Ça
fonctionne si
"Champ1" n'existe pas.

Pat


"Jessy Sempere [MVP]" a
écrit dans le message
de
news: 43a17712$
Bonjour

Dans le doute, ré-initialise ta variable Trouve en début de
fonction.
Et remplaces aussi, if not trouve then par if trouveúlse then

Du coup ta fonction devrait avoir cette tête :

Function AjoutChampTbleA(strNomChamp As String, intTypeChamp As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database, Trouve
As
Boolean

trouve = false

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If trouve = false Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Pat" a écrit dans le message de
news:43a1753b$0$10962$

Rien à faire il ne crée pas le "Champ2" si
"Champ1" existe, j'ai plus
l'impression que c'est la macro qui s'arrête.

Merci

"Patrice" a
écrit dans le message
de
news:
Ne test pas si il existe déjà



Merci pour ton aide Patrice, le problème c'est qu'il n'y a aucun
message
d'erreur. Tout simplement le champ "Champ2" n'est pas
créé.

Une idée?

Pat

"Patrice" a
écrit dans le
message






de
news:
Petite précision


bonjour,

Il faut gérer les erreurs :

On error goto xx



Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)

out_xx:
exit sub
xx:
if err.number=1 then resume next
msgbox err.number & " " & err.description
resume out_xx

Ds le 1er passage, relever le n° d'erreur du message puis
remplacer










le
1
par
ce n°erreur





Bonjour,

J'utilise le code ci plus bas, pour ajouter des champs dans
une
table.
Je
lance ce code via une macro.

Comme je veux rajouter plusieurs champs dans la "TbleA" j'ai
plusieurs
lignes de commande l'une en dessous de l'autre.

Exécuter code: AjoutChampTble1("Champ1",10)
Exécuter code: AjoutChampTble1("Champ2",10)
Etc....

Tout va bien, sauf que si le champ "Champ1" existe, le champ
"Champ2"
n'est
pas créé.

Comment faire pour créer le champ "Champ2" même
si le champ
"Champ1"
existe?

Merci pour vos lumières

Pat




----------------------------------------------------------------
Function AjoutChampTbleA(strNomChamp As String, intTypeChamp
As
Integer,
Optional Longueur As Integer = 50)
Dim t As DAO.TableDef, w As DAO.Workspace, bd As DAO.Database,
Trouve
As
Boolean

Set w = DBEngine.Workspaces(0)
Set bd = w.OpenDatabase("C:db.mdb")
Set t = bd.TableDefs("TbleA")
Dim f As DAO.Field
For Each f In t.Fields
If LCase(f.Name) = LCase(strNomChamp) Then
Trouve = True
Exit For

End If
Next
If Not Trouve Then
With t
Set f = .CreateField(strNomChamp, intTypeChamp)
If intTypeChamp = dbText Then
f.Size = Longueur
End If
.Fields.Append f
End With
End If
bd.Close
w.Close
Set f = Nothing
Set t = Nothing
Set bd = Nothing
Set w = Nothing

End Function



































SAlut tu dois ajouter cette ligne apres End With et ca va marcher :

End With
Trouve = False


car j'ai comme cette procedure et ca marche chez moi ec l'initialisation de Trouve
a+