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

Créer/Modifier formulaire en VBA

8 réponses
Avatar
Hugues Fiat
Bonjour,

J'ai une appli qui permet d'afficher toutes les données d'une personne et
entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de missions,
chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je peux
bien sur en précréer une floppée et les afficher ou les masquer selon le cas,
mais c'est une solution qui me plait moyennement, cela implique un formulaire
lourd même pour les personnes n'ayant effectué qu'une mission et je risque de
plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un élément dans
un formulaire au travers d'un module ?

Merci d'avance.

8 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

Extrait de l'aide :

*********************************************************
Exemple de méthodes Add et Remove (collection Pages)
L'exemple suivant ajoute une page dans un contrôle Tabulation d'un
formulaire affiché en mode Création. Pour essayer cet exemple, créez un
formulaire intitulé Form1 qui contient un contrôle appelé TabCtl0. Collez le
code suivant dans un module standard et exécutez-le:

Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

On Error GoTo Erreur_AjouterPage
Set frm = Forms!Form1
Set tbc = frm!TabCtl0
tbc.Pages.Add
AjouterPage = True

Sortie_AjouterPage:
Exit Function

Erreur_AjouterPage:
MsgBox Err & ": " & Err.Description
AjouterPage = False
Resume Sortie_AjouterPage
End Function
*********************************************************

--
@+
Jessy Sempere - Access MVP

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

J'ai une appli qui permet d'afficher toutes les données d'une personne et
entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,

chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je peux
bien sur en précréer une floppée et les afficher ou les masquer selon le
cas,

mais c'est une solution qui me plait moyennement, cela implique un
formulaire

lourd même pour les personnes n'ayant effectué qu'une mission et je risque
de

plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un élément
dans

un formulaire au travers d'un module ?

Merci d'avance.


Avatar
Dan
"Hugues Fiat" a écrit dans le message
de news:
Bonjour,

J'ai une appli qui permet d'afficher toutes les données d'une personne et
entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,
chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je peux
bien sur en précréer une floppée et les afficher ou les masquer selon le
cas,
mais c'est une solution qui me plait moyennement, cela implique un
formulaire
lourd même pour les personnes n'ayant effectué qu'une mission et je risque
de
plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un élément
dans
un formulaire au travers d'un module ?

Merci d'avance.


Bonjour Hugues,

Suggestion : utiliser, plutôt que des onglets, un sous-formulaires "Missions
effectuées"...?

A+Dan

Avatar
Hugues Fiat
Ah tiens, c'est bien aussi l'aide

Merci msieur


Bonjour

Extrait de l'aide :

*********************************************************
Exemple de méthodes Add et Remove (collection Pages)
L'exemple suivant ajoute une page dans un contrôle Tabulation d'un
formulaire affiché en mode Création. Pour essayer cet exemple, créez un
formulaire intitulé Form1 qui contient un contrôle appelé TabCtl0. Collez le
code suivant dans un module standard et exécutez-le:

Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

On Error GoTo Erreur_AjouterPage
Set frm = Forms!Form1
Set tbc = frm!TabCtl0
tbc.Pages.Add
AjouterPage = True

Sortie_AjouterPage:
Exit Function

Erreur_AjouterPage:
MsgBox Err & ": " & Err.Description
AjouterPage = False
Resume Sortie_AjouterPage
End Function
*********************************************************

--
@+
Jessy Sempere - Access MVP

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

J'ai une appli qui permet d'afficher toutes les données d'une personne et
entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,

chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je peux
bien sur en précréer une floppée et les afficher ou les masquer selon le
cas,

mais c'est une solution qui me plait moyennement, cela implique un
formulaire

lourd même pour les personnes n'ayant effectué qu'une mission et je risque
de

plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un élément
dans

un formulaire au travers d'un module ?

Merci d'avance.







Avatar
Hugues Fiat
Cela ne fonctionne pas, j'obtiens l'erreur 2147 : "Les contrôles ne peuvent
être créés ou supprimés qu'en mode création" sur la ligne : "tbd.pages.add

Et pourtant mon formulaire est bien en mode allowdesignchanges true

Sub temp()
Dim a As Variant
a = Form_Test.AllowDesignChanges
AjouterPage
End Sub
Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

Set frm = Form_Test

Set tbc = frm!Onglets
tbc.Pages.Add
End Function



Bonjour

Extrait de l'aide :

*********************************************************
Exemple de méthodes Add et Remove (collection Pages)
L'exemple suivant ajoute une page dans un contrôle Tabulation d'un
formulaire affiché en mode Création. Pour essayer cet exemple, créez un
formulaire intitulé Form1 qui contient un contrôle appelé TabCtl0. Collez le
code suivant dans un module standard et exécutez-le:

Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

On Error GoTo Erreur_AjouterPage
Set frm = Forms!Form1
Set tbc = frm!TabCtl0
tbc.Pages.Add
AjouterPage = True

Sortie_AjouterPage:
Exit Function

Erreur_AjouterPage:
MsgBox Err & ": " & Err.Description
AjouterPage = False
Resume Sortie_AjouterPage
End Function
*********************************************************

--
@+
Jessy Sempere - Access MVP

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

J'ai une appli qui permet d'afficher toutes les données d'une personne et
entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,

chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je peux
bien sur en précréer une floppée et les afficher ou les masquer selon le
cas,

mais c'est une solution qui me plait moyennement, cela implique un
formulaire

lourd même pour les personnes n'ayant effectué qu'une mission et je risque
de

plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un élément
dans

un formulaire au travers d'un module ?

Merci d'avance.







Avatar
Jessy Sempere [MVP]
Bonjour

Tu dois ouvrir ron formulaire en mode création :

Remplaces :
dim a aas variant
a = Form_Test.AllowDesignChanges
par :
DoCmd.OpenForm "Form_Test", acDesign

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hugues Fiat" a écrit dans le message
news:
Cela ne fonctionne pas, j'obtiens l'erreur 2147 : "Les contrôles ne
peuvent

être créés ou supprimés qu'en mode création" sur la ligne : "tbd.pages.add

Et pourtant mon formulaire est bien en mode allowdesignchanges true

Sub temp()
Dim a As Variant
a = Form_Test.AllowDesignChanges
AjouterPage
End Sub
Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

Set frm = Form_Test

Set tbc = frm!Onglets
tbc.Pages.Add
End Function



Bonjour

Extrait de l'aide :

*********************************************************
Exemple de méthodes Add et Remove (collection Pages)
L'exemple suivant ajoute une page dans un contrôle Tabulation d'un
formulaire affiché en mode Création. Pour essayer cet exemple, créez un
formulaire intitulé Form1 qui contient un contrôle appelé TabCtl0.
Collez le


code suivant dans un module standard et exécutez-le:

Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

On Error GoTo Erreur_AjouterPage
Set frm = Forms!Form1
Set tbc = frm!TabCtl0
tbc.Pages.Add
AjouterPage = True

Sortie_AjouterPage:
Exit Function

Erreur_AjouterPage:
MsgBox Err & ": " & Err.Description
AjouterPage = False
Resume Sortie_AjouterPage
End Function
*********************************************************

--
@+
Jessy Sempere - Access MVP

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


news:
Bonjour,

J'ai une appli qui permet d'afficher toutes les données d'une personne
et



entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,

chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je
peux



bien sur en précréer une floppée et les afficher ou les masquer selon
le



cas,
mais c'est une solution qui me plait moyennement, cela implique un
formulaire

lourd même pour les personnes n'ayant effectué qu'une mission et je
risque



de
plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un
élément



dans
un formulaire au travers d'un module ?

Merci d'avance.









Avatar
Hugues Fiat
En fin de compte, pas si bien que ça l'aide. Comme cela continuait a ne pas
fonctionner, j'ai fait exactement ce qui est indiqué (même nom de formulaire,
même nom de controle qu'il faut d'ailleurs modidier car dans l'exemple il
s'appelle "TabCtl0" alors que lors de la création le nom est CtlTab0 !!!).

J'ai réussi à le faire fonctionner mais à condition :
1) Que le formulaire soit ouvert en mode création (pas terrible quand c'est
l'utilisateur qui clique)
2) Que ce soit le formulaire qui soit sélectionné (avec la souris) et pas un
de ses contrôles (re pas terrible)

M'enfin je vais essayer d'affiner :)


Bonjour

Tu dois ouvrir ron formulaire en mode création :

Remplaces :
dim a aas variant
a = Form_Test.AllowDesignChanges
par :
DoCmd.OpenForm "Form_Test", acDesign

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hugues Fiat" a écrit dans le message
news:
Cela ne fonctionne pas, j'obtiens l'erreur 2147 : "Les contrôles ne
peuvent

être créés ou supprimés qu'en mode création" sur la ligne : "tbd.pages.add

Et pourtant mon formulaire est bien en mode allowdesignchanges true

Sub temp()
Dim a As Variant
a = Form_Test.AllowDesignChanges
AjouterPage
End Sub
Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

Set frm = Form_Test

Set tbc = frm!Onglets
tbc.Pages.Add
End Function



Bonjour

Extrait de l'aide :

*********************************************************
Exemple de méthodes Add et Remove (collection Pages)
L'exemple suivant ajoute une page dans un contrôle Tabulation d'un
formulaire affiché en mode Création. Pour essayer cet exemple, créez un
formulaire intitulé Form1 qui contient un contrôle appelé TabCtl0.
Collez le


code suivant dans un module standard et exécutez-le:

Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

On Error GoTo Erreur_AjouterPage
Set frm = Forms!Form1
Set tbc = frm!TabCtl0
tbc.Pages.Add
AjouterPage = True

Sortie_AjouterPage:
Exit Function

Erreur_AjouterPage:
MsgBox Err & ": " & Err.Description
AjouterPage = False
Resume Sortie_AjouterPage
End Function
*********************************************************

--
@+
Jessy Sempere - Access MVP

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


news:
Bonjour,

J'ai une appli qui permet d'afficher toutes les données d'une personne
et



entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,

chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je
peux



bien sur en précréer une floppée et les afficher ou les masquer selon
le



cas,
mais c'est une solution qui me plait moyennement, cela implique un
formulaire

lourd même pour les personnes n'ayant effectué qu'une mission et je
risque



de
plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un
élément



dans
un formulaire au travers d'un module ?

Merci d'avance.














Avatar
Hugues Fiat
Voila, le code ci-dessous fonctionne, que le formulair soit ouvert ou non,
quelque soit le controle sélectionné et une fois l'onglet ajouté, il
sauvegarde le formulaire et le réouvre en mode utilisateur

Function AddPage() As Boolean
Dim Obj As String
Dim frm As Form
Dim tbc As TabControl

Obj = "Form1"

DoCmd.OpenForm Obj, acDesign

Set frm = Screen.ActiveForm

frm.Form.SetFocus
Set tbc = frm!CtlTab0
tbc.Pages.Add

DoCmd.Close acForm, Obj, acSaveYes
DoCmd.OpenForm Obj, acNormal
End Function



Bonjour

Tu dois ouvrir ron formulaire en mode création :

Remplaces :
dim a aas variant
a = Form_Test.AllowDesignChanges
par :
DoCmd.OpenForm "Form_Test", acDesign

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hugues Fiat" a écrit dans le message
news:
Cela ne fonctionne pas, j'obtiens l'erreur 2147 : "Les contrôles ne
peuvent

être créés ou supprimés qu'en mode création" sur la ligne : "tbd.pages.add

Et pourtant mon formulaire est bien en mode allowdesignchanges true

Sub temp()
Dim a As Variant
a = Form_Test.AllowDesignChanges
AjouterPage
End Sub
Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

Set frm = Form_Test

Set tbc = frm!Onglets
tbc.Pages.Add
End Function



Bonjour

Extrait de l'aide :

*********************************************************
Exemple de méthodes Add et Remove (collection Pages)
L'exemple suivant ajoute une page dans un contrôle Tabulation d'un
formulaire affiché en mode Création. Pour essayer cet exemple, créez un
formulaire intitulé Form1 qui contient un contrôle appelé TabCtl0.
Collez le


code suivant dans un module standard et exécutez-le:

Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

On Error GoTo Erreur_AjouterPage
Set frm = Forms!Form1
Set tbc = frm!TabCtl0
tbc.Pages.Add
AjouterPage = True

Sortie_AjouterPage:
Exit Function

Erreur_AjouterPage:
MsgBox Err & ": " & Err.Description
AjouterPage = False
Resume Sortie_AjouterPage
End Function
*********************************************************

--
@+
Jessy Sempere - Access MVP

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


news:
Bonjour,

J'ai une appli qui permet d'afficher toutes les données d'une personne
et



entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission est
divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,

chaque onglet contenant le détail d'une mission (ça je sais faire).

Mon problème est la création/suppression d'onglets par programme. Je
peux



bien sur en précréer une floppée et les afficher ou les masquer selon
le



cas,
mais c'est une solution qui me plait moyennement, cela implique un
formulaire

lourd même pour les personnes n'ayant effectué qu'une mission et je
risque



de
plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un
élément



dans
un formulaire au travers d'un module ?

Merci d'avance.














Avatar
Jessy Sempere [MVP]
Re,

Si tu veux que ça reste transparent pour l'utilisateur, tu peux mettre avant
le code : DoCmd.Echo False
et ne pas oublier de mettre DoCmd.Echo True à la fin du code.

Sinon autre méthode qui doit fonctionner je pense :

docmd.openform "TonForm", acDesign
CreateControl Screen.ActiveForm.Name, acPage, acDetail, CtlTab0

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hugues Fiat" a écrit dans le message
news:
En fin de compte, pas si bien que ça l'aide. Comme cela continuait a ne
pas

fonctionner, j'ai fait exactement ce qui est indiqué (même nom de
formulaire,

même nom de controle qu'il faut d'ailleurs modidier car dans l'exemple il
s'appelle "TabCtl0" alors que lors de la création le nom est CtlTab0 !!!).

J'ai réussi à le faire fonctionner mais à condition :
1) Que le formulaire soit ouvert en mode création (pas terrible quand
c'est

l'utilisateur qui clique)
2) Que ce soit le formulaire qui soit sélectionné (avec la souris) et pas
un

de ses contrôles (re pas terrible)

M'enfin je vais essayer d'affiner :)


Bonjour

Tu dois ouvrir ron formulaire en mode création :

Remplaces :
dim a aas variant
a = Form_Test.AllowDesignChanges
par :
DoCmd.OpenForm "Form_Test", acDesign

@+
Jessy Sempere - Access MVP

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


news:
Cela ne fonctionne pas, j'obtiens l'erreur 2147 : "Les contrôles ne
peuvent

être créés ou supprimés qu'en mode création" sur la ligne :
"tbd.pages.add




Et pourtant mon formulaire est bien en mode allowdesignchanges true

Sub temp()
Dim a As Variant
a = Form_Test.AllowDesignChanges
AjouterPage
End Sub
Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

Set frm = Form_Test

Set tbc = frm!Onglets
tbc.Pages.Add
End Function



Bonjour

Extrait de l'aide :

*********************************************************
Exemple de méthodes Add et Remove (collection Pages)
L'exemple suivant ajoute une page dans un contrôle Tabulation d'un
formulaire affiché en mode Création. Pour essayer cet exemple, créez
un




formulaire intitulé Form1 qui contient un contrôle appelé TabCtl0.
Collez le


code suivant dans un module standard et exécutez-le:

Function AjouterPage() As Boolean
Dim frm As Form
Dim tbc As TabControl, pge As Page

On Error GoTo Erreur_AjouterPage
Set frm = Forms!Form1
Set tbc = frm!TabCtl0
tbc.Pages.Add
AjouterPage = True

Sortie_AjouterPage:
Exit Function

Erreur_AjouterPage:
MsgBox Err & ": " & Err.Description
AjouterPage = False
Resume Sortie_AjouterPage
End Function
*********************************************************

--
@+
Jessy Sempere - Access MVP

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


news:
Bonjour,

J'ai une appli qui permet d'afficher toutes les données d'une
personne





et
entre autres, les différentes missions qu'elle a effectuées.

Le nombre de missions diffère selon la personne et chaque mission
est





divisée en données mensuelles.

Je voudrais obtenir un nombre d'onglets correspondant au nombre de
missions,

chaque onglet contenant le détail d'une mission (ça je sais
faire).






Mon problème est la création/suppression d'onglets par programme.
Je





peux
bien sur en précréer une floppée et les afficher ou les masquer
selon





le
cas,
mais c'est une solution qui me plait moyennement, cela implique un
formulaire

lourd même pour les personnes n'ayant effectué qu'une mission et
je





risque
de
plus de sous-estimer le nombre d'onglets maximal nécessaire.

Je résume ma question : Comment faire pour ajouter/supprimer un
élément



dans
un formulaire au travers d'un module ?

Merci d'avance.