[ACCESS] Probleme formulaire ajout dynamique

Bonjour,

je suis entrain de faire une application sous access 2003 dans
laquelle je dois générer des textbox dans un formulaire deja
existant.

Voici le code que j'utilise pour faire cela :

Private Sub Commande1_Click()

DoCmd.OpenForm Form_Formulaire1.Name, acDesign
Dim tbCtl As TextBox
Set tbCtl = Application.CreateControl(Form_Formulaire1.Name, acTextBox, acDetail)
DoCmd.Close acForm, Form_Formulaire1.Name, acSaveYes
DoCmd.OpenForm Form_Formulaire1.Name, acNormal

End Sub

Aussi, access me retourne ce message d'erreur lorsque je clique
sur le bouton pour générer le textbox :

Erreur d'exécution 29054 : Ms Office ne peut pas ajouter,
modifier ou supprimer le controle selectionne.

Merci pour votre aide, c'est tres important pour moi
Bonne journée

GCH

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonsoir,

    J'imagine que tu as vérifié dans l'aide.
    Il me semble que dans le code donné plus haut, il manque les données d'emplacement et de taille du contrôle. Je cite l'aide:

    Exemple de méthodes CreateControl et CreateReportControl

    L'exemple suivant montre comment créer dans un premier temps un nouveau formulaire basé sur la table Commandes, puis utiliser la méthode CreateControl pour créer un contrôle de zone de texte et un contrôle d'étiquette liée dans le formulaire.

    Sub NouveauxContrôles()
    Dim frm As Form
    Dim ctlÉtiquette As Control, ctlTexte As Control
    Dim entDonnéeX As Integer, entDonnéeY As Integer
    Dim entÉtiquetteX As Integer, entÉtiquetteY As Integer

    ' Crée un nouveau formulaire avec comme source des enregistrements la table Commandes.
    Set frm = CreateForm
    frm.RecordSource = "Commandes"
    ' Définit les valeurs de position pour les nouveaux contrôles.
    entÉtiquetteX = 100
    entÉtiquetteY = 100
    entDonnéeX = 1000
    entDonnéeY = 100
    ' Crée une zone de texte indépendante avec une taille par défaut dans la section Détail.
    Set ctlTexte = CreateControl(frm.Name, acTextBox, , "", "", _
    entDonnéeX, entDonnéeY)
    ' Crée un contrôle étiquette fils pour la zone de texte.
    Set ctlÉtiquette = CreateControl(frm.Name, acLabel, , _
    ctlTexte.Name, "Nouvelle étiquette", entÉtiquetteX, entÉtiquetteY)
    ' Restaure le formulaire.
    DoCmd.Restore
    End Sub
    1. le probleme c est pas de le créer, c est d ajouter une fois qu il a été créé un controle dedans, j ai esssayer de le fermer pour le modifier et de le réouvrir après mais ça ne fonctionne pas... et c est à ce moment qu il me met une erreur
  2. je suis dans le même cas que toi es que tu as réussi a résoudre ce probleme depuis le 05/09 ou es tu encore bloqué ?

    parce que si tu as réussi ça m'interesse grandement
    1. Donne, si tu veux, le code que tu utilises.
      Je ne suis pas un spécialiste mais on peut espérer que Blux passe par là...
      1. 
        DoCmd.Close acForm, "formulaire de saisie"
        afficher_zone_saisie("formulaire de saisie") 
        DoCmd.OpenForm "formulaire de saisie"
        
        


        la procedure afficher_zone_saisie fonctionne, elle ouvre le formulaire : formulaire de saisie en mode création et ajoute une textbox...
        ensuite elle le referme en le sauvegardant.
    2. Je ne pense pas qu'Access reconnaisse:
      afficher_zone_saisie("formulaire de saisie")

      D'autre part, si les noms de tes objets comportent des espaces, tu dois les entourer de crochets ( [] )
      1. la procedure afficher_zone_saisie fonctionne comme je l'ai dit plus haut avec les parametres que je lui donne...
    3. Modérateur
      Salut,

      je passe par là...
      Mais je ne suis pas spécialiste des ajouts 'à la volée'...
      Cependant, je ne vois nulle part le nom du contrôle à rajouter, cela expliquerait peut-être le message d'erreur ?

      Tu peux nous mettre ton code in extenso, STP ?
      1. Set controle(i) = CreateControl(nom_form, acLabel)
          controle(i).Name = "TXT_lieux_" & tablieux(curslieux)
          controle(i).Left = (i - j) * 1150 + 5100
          controle(i).Top = 600
          controle(i).Width = 1000
          controle(i).Height = 250
          controle(i).BackColor = "14742270"
          controle(i).SpecialEffect = 0
          controle(i).BackStyle = 0
          controle(i).Caption = rs_afficher!nom
          curslieux = curslieux + 1
          i = i + 1


        en gros c'est ça j'ai pas mal de code avant parce que je gère d'autre truc dans cette procedure mais ça me le crée bien, cette precedure me crée comme il se doit ma zone de texte le seul probleme est que si je l'appel depuis le formulaire ou elle doit créée cette zone de texte ça plante
        meme si je ferme d'abord le formulaire avant de le réouvrir en mode création pour réaliser la modif, le refermer et le sauvegarder pour le réouvrir en mode normal ...
      2. @fulgaroje me suis planter sur le code ,
        j'ai mis l'entete...

        celui de la zone de texte c'est :

           
        Set controle2(i) = CreateControl(nom_form, acTextBox)
            controle2(i).Name = x & "-" & y
            controle2(i).Left = x * 1150 + 5100
            controle2(i).Top = 300 * (y) + 1000
            controle2(i).Width = 1150
            controle2(i).Height = 200
            controle2(i).BackColor = "14742270"
            controle2(i).SpecialEffect = 0
            controle2(i).BackStyle = 0
            i = i + 1

        mais ça revient au meme puisque je crée les deux en meme temps...
    4. Modérateur
      T'as essayé avec le formulaire fermé carrément ?
      1. non parce que pour faire un formulaire dynamiquement il faut l'ouvrir en mode design ...
        mais je veux bien tester... ;) je te dirais si ça a fonctionné
      2. @fulgaroje suis dans le même cas que toi es que tu as réussi a résoudre ce probleme ou es tu encore bloqué ?

        parce que si tu as réussi ça m'interesse grandement