IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Ajout de contrôle dans un formulaire [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Par défaut Ajout de contrôle dans un formulaire
    Bonjour tout le monde,
    comme vous vous en doutez je viens poster ici car j'ai un problème

    Voilà j'ai un form nommé "PlanDeControl" dans lequel je souahiterai à l'ouverture ajouter des contrôles de type checkBox en fonction du nombre d'onlgets d'un fichier access dans le répertoire. Jusque là je pensais savoir comment m'y prendre

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub Form_Load()
     
    'Déclarations
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim CB As CheckBox
    Dim i As Integer
    Dim formName As String
     
    formName = "PlanDeControl" 'Initilisation du nom du form
     
    'ouverture du classeur excel
    Set xlApp = New Excel.Application
    Set xlBook = xlApp.Workbooks.Open("Chemin de mon fichier Excel") 'Il est bien renseigner (avant qu'on me pose la question ;) )
     
    'fermeture et réouverture du formulaire en mode création
    DoCmd.Close acForm, formName
    DoCmd.openForm formName, acDesign
     
    'création des différentes checkBox
    For i = 1 To xlBook.Sheets.Count
        Set CB = CreateControl(formName, acCheckBox)
        With CB
            .name = "CB_" & i
            .Left = 50
            .Top = 40 + 10 * i
            .Height = 20
            .Width = 20
            .Visible = True
        End With
        Set CB = Nothing
    Next
     
    'fermeture et réouverture du formulaire en mode normal
    DoCmd.Close acForm, formName, acSaveYes
    DoCmd.openForm formName
     
    'Libération de l'espace
    Set xlApp = Nothing
    Set xlBook = Nothing
     
    End Sub
    Voilà au début je taper en direct le nom de mon formulaire mais VBE me renvoyer l'erreur 29054 : "Microsoft access ne peut pas ajouter, modifier ou supprimer le(s) controle(s) sélectionné(s)." Ou quelque hose comme ça.
    Je me suis renseigner sur plusieurs forum et les résultats sont les suivants

    - Ecrire le nom du formulaire via une variable (solution de 2006 , que j'ai mis en application comme vous pouvez le voir), ... sa marche pas toujour la même erreur.

    - changer la réfèrence à microsoft ado par microsoft doa, ... marche pas non plus

    - et j'ai vu sur un autre forum qu'il fallait rentrer les paramètres de ma checkBox dans le createControl, ... sa change rien non plus.


    J'ai lu beaucoup de chose et parfois sa fait peur mais je n'ai pas trouver la solution à mon porblème.
    Je vous fais donc un petit récap de ce que je souhaite faire :
    A l'ouverture de mon form "PlanDeControl" je souhaite que mon code VBA ouvre un fichier excel pour récupérer le nombre d'onglets (jusque là sa marche ) puis de créer un CheckBox pour chaque onglets, soit créer autant de checkBox que d'onglets.

    Merci d'avance à ceux qui me lirons et encore plus à ce qui pourront me donner des conseils

    je ne pense pas que mon code soit trop mauvais mais j'arrive pas à mettre le doigt sur l'erreur

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 416
    Par défaut
    Je n'ai pas de solution direct a ton problème mais je te suggères des voies de contournement :

    1) Si tu as un nombre maximum connu d'onglets, pourquoi ne pas créer autant de CheckBox invisibles et les rendre visibles au fur et a mesure des besoins ?

    2) Sinon, pourquoi ne pas utiliser une table temporaire dans un sous-formulaire en mode feuille de données pour enregistrer la liste des tes onglets et la sélection. Sa structure est très simple :
    • EstSelectionne (champs Oui/Non)
    • NomOnglet (champ Texte)


    Après ton utilisateur peux simplement cocher les enregistrements qu'il veut. Il me semble qu'en A2010 tu peux définir le sous-form pour qu'il occupe toute la surface disponible donc cela ressemblerai à ce que tu veux faire.

    3) Remplacer tes check-box par une liste à sélection multiple.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    salut marot_r et bienvenu Kaëléphine,

    je remarque à la lecture du code qu'il n'y a pas de reset des controles. il est possible que l'erreur vient de l'affection du nouveau control.name avec un déjà préexistant.

  4. #4
    Membre éclairé
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Par défaut
    Bonjour marot_r et vodiem

    Pour ta solution vodiem l'erreur ce produit au niveau du set CB = createControl au premier passage donc je ne pense pas qu'un reset aide mais je vais quand même essayer sa coute rien et je suis loin de tout connaitre .

    Pour marot_r ta première solution ne marche pas car je n'ai strictement aucune idée de l'évolution du fichier, il peut gagner comme perdre des onglets avec le temps et même si excel ne peut pas sauvegarder des onglets à l'infini vu que je vais rassembler les onlgets de 3 fichiers par form en moyenne, je peux pas me permettre de prévoir des CheckBox. Je garde ta deuxième solution sous le coude, je n'aime pas utiliser les sous formulaires car je ne l'ai maitrise pas encore (mais si j'ai pas le choix je ne vais pas ignorer cette solution ). Donc je testerais en premier la liste à sélection multiple qui pour ma part devrais fonctionner sans trop de problèmes. A voir si le rendu me plait.

    Je vous tiendrai au courant et je mettrais résolu si j'ai réglé mon problème.

  5. #5
    Membre éclairé
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Par défaut
    Rebonjour,
    Bon alors petit bilan

    Vodiem j'ai essayé de reset le control à chaque tour de boucle mais nada !
    Je m'y prends peu-être mal

    Toujours est il que j'ai créé des listBox à sélection multiple et que cette solution est plutôt bonne en remplacement, même mieu vu quel marche .

    voilà donc ce que j'ai mis dans mon événement load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Private Sub Form_Load()
     
    'Déclarations
    Dim strValeurs As String
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim i As Integer
     
    'Init
    Set xlApp = New Excel.Application
    Set xlBook = xlApp.Workbooks.Open("Chemin de mon premier fichier")
    strValeurs = ""
     
    'Création de strValeurs
    For i = 1 To xlBook.Sheets.Count
        Set xlSheet = xlBook.Sheets(i)
        strValeurs = strValeurs & xlSheet.name & ";"
        Set xlSheet = Nothing
    Next
    'Intégration des données dans la ListBox
    Me.LsB_PDC.RowSource = Left(strValeurs, InStrRev(strValeurs, ";"))
    'Fermeture du classeur
    xlBook.Saved = True
    xlBook.Close
    Set xlBook = Nothing
     
    'Init
    Set xlBook = xlApp.Workbooks.Open("Chemin de mon deuxième fichier")
    strValeurs = ""
     
    'Création strValeurs
    For i = 1 To xlBook.Sheets.Count
        Set xlSheet = xlBook.Sheets(i)
        strValeurs = strValeurs & xlSheet.name & ";"
        Set xlSheet = Nothing
    Next
    'intégration des données dans la ListBox
    Me.LsB_AnxPC.RowSource = Left(strValeurs, InStrRev(strValeurs, ";"))
    'Fermeture du classeur
    xlBook.Saved = True
    xlBook.Close
    Set xlBook = Nothing
    Set xlApp = Nothing
     
    End Sub
    Donc sur mon form j'ai deux listBox LsB_PDC et LsB_AnxPC pour lequelles je modifie la RowSource lors de l'ouverture du form.

    Cette solution ralenti un peu le chargement du form mais vu les machines employées par les futurs utilisateurs, cette lenteur sera rapide pour eux

    La solution du sous formulaire est peut être plus rapide mais je laisse quelqu'un d'autre la tester

    Mon premier problème n'est pas résolu mais la solution de la ListBox est une très bonne alternative aux CheckBox même mieu dans le cas où il y en a beaucoup (Plus lisible, Plus facile à sélectionner) donc je mets résolu

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    j'ai testé ce code en AC2007:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'création des différentes checkBox
    For i = 1 To xlBook.Sheets.Count
        Set CB = CreateControl(formName, acCheckBox, acDetail, , "CB" & i, 50, 400 + 300 * i)
        Set CBL = CreateControl(formName, acLabel, acDetail, , "CB" & i, 300, 350 + 300 * i)
        Set CB = Nothing
        Set CBL = Nothing
    Next
    il faut néanmoins supprimer les précédents controles à l'ouverture pour ne pas effectivement les y retrouver mais ca fonctionne.

  7. #7
    Membre éclairé
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Par défaut
    j'avais déjà essayer cette solution de tout mettre dans le createControl

    et j'ai vu sur un autre forum qu'il fallait rentrer les paramètres de ma checkBox dans le createControl, ... sa change rien non plus.
    J'avais écris exactement ce que tu as fais mais j'ai toujours cette erreur 29054
    donc je dois avoir un problème ailleur. il n'y as que cette partie du code qui bug. Peut-être un problème sur les DLL je sais pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter un contrôle dans un formulaire
    Par Oreste dans le forum Salesforce.com
    Réponses: 7
    Dernier message: 15/05/2012, 10h36
  2. ajout dynamique de contrôle dans un formulaire
    Par celiaaa dans le forum IHM
    Réponses: 2
    Dernier message: 26/02/2007, 20h23
  3. Ajouter un menu dans un formulaire
    Par Yves2507 dans le forum IHM
    Réponses: 4
    Dernier message: 30/11/2005, 23h29
  4. Problème pour afficher un contrôle dans un formulaire
    Par JahRastafari dans le forum IHM
    Réponses: 5
    Dernier message: 16/06/2005, 11h15
  5. Ajouter des contrôles dans la palette des contrôles.
    Par WOLO Laurent dans le forum MFC
    Réponses: 4
    Dernier message: 22/01/2004, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo