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

Macros et VBA Excel Discussion :

creation userform de facon dynamique / dupliquer frame


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    tech metodes
    Inscrit en
    Avril 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : tech metodes
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2024
    Messages : 7
    Par défaut creation userform de facon dynamique / dupliquer frame
    bonjour
    j'ai créé une frame a l'ouverture de mon userform ( gestion de stock)
    et en fonction du nombre de ligne d'e mon fichier excel ( nomenclature), je voudrais dupliquer la frame ( autant de frame que de ligne )
    je n ai jamais cree de userform de maniere dynamique et j'aurais besoin d"aide

    dans le code ci dessous la frame et cree mais je n'arrive pas a faire un copier coller

    par la suite
    il faudra que je remplisse les labels box avec les infos du fichier
    une fois que la personnes aura rempli le formulaire , je devrais en faire un fichier csv
    il faudra , je pense , gerer un module de classe ( pour les differents textbox , optionbox et command box )
    et le module de classe , je découvre

    quelqu un pourrais m'aider svp , en commencant par la duplication du frame ( une chose a la fois )

    d'avance un grand merci


    Private Sub UserForm_INITIALIZE()
    Dim Bouton As MSForms.CommandButton

    Dim Fr As MSForms.Frame
    Dim cb As MSForms.CommandButton
    Dim Lb As MSForms.Label
    Dim chb As MSForms.CheckBox
    Dim txb As MSForms.TextBox
    Dim ob As MSForms.OptionButton
    Dim ob2 As MSForms.OptionButton




    '----- Initialise l'userform ---------------
    Me.BackColor = &H800000
    Me.Height = 700
    Me.Width = 500
    Me.Caption = " gestion des transfert de stock "

    '------ Créer le Frame1 ---------------------
    Set Fr = Me.Controls.Add("Forms.frame.1", "Frame1", True)

    With Fr
    .Left = 6
    .Top = 6
    .Width = 400
    .Height = 35

    'Fr.BackColor = &HFFC0FF
    .BorderStyle = fmBorderStyleSingle
    .BorderColor = &HFFFFFF
    End With

    '------ Créer le commandbutton ------------------

    Set cb = Fr.Controls.Add("Forms.commandbutton.1", "commandbutton1", True)


    With cb
    .Left = 3
    .Top = 8
    .Width = 18
    .Height = 18
    End With



    ''------ Créer le Label ---------------------

    Set Lb = Fr.Controls.Add("Forms.Label.1", "Label1", True)
    With Lb

    .Left = 30
    .Top = 8
    .Width = 192
    .Height = 18
    .AutoSize = False
    .BackStyle = 1
    .BorderColor = &H80000006
    .BackColor = &HFFFFFF
    .BorderStyle = fmBorderStyleSingle
    .FontSize = 10
    .FontBold = True
    .TextAlign = fmTextAlignCenter
    .Caption = "code"

    End With

    '------ Créer le checkbox ---------------------
    Set chb = Fr.Controls.Add("Forms.checkbox.1", "checkbox1", True)

    With chb
    .Left = 250
    .Top = 8
    End With


    '------ Créer le textbox ---------------------
    Set txb = Fr.Controls.Add("Forms.textbox.1", "textbox1", True)

    With txb
    .Left = 270
    .Top = 8
    .Width = 50
    .Height = 18



    End With

    '------ Créer le optionbutton ---------------------
    Set ob = Fr.Controls.Add("Forms.OptionButton.1", "OptionButton1", True)

    With ob
    .Left = 330
    .Top = 2
    .Width = 80
    .Height = 15
    .Caption = "NEUF"
    .ForeColor = &HFFFFFF

    End With

    Set ob2 = Fr.Controls.Add("Forms.OptionButton.1", "OptionButton2", True)

    With ob2
    .Left = 330
    .Top = 18
    .Width = 80
    .Height = 15
    .Caption = "REFURB"
    .ForeColor = &HFFFFFF
    End With
    end sub

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 493
    Par défaut
    Salut,

    Pour un projet un tant soit peut ambitieux,
    la première chose à faire est de ségréger ton code (diviser pour mieux régner).
    Ca respectera le SRP (https://en.wikipedia.org/wiki/Single...lity_principle) et la Loi de Demeter (https://fr.wikipedia.org/wiki/Loi_de_D%C3%A9m%C3%A9ter) ce qui est une excellente chose.
    On écrira des fonction génériques prenant en charge la créatiion des contrôles, les détails spécifiques (comme la cosmétique) devront être pris en charge à l'extérieur des fonctions.

    On commence par la création d'une frame, (la création des autres contrôles reposera sur le même principe).
    Les données minimales pour une frame son ses coordonnées(x, y), sa taille (width, height), et l'éventuel parent au sein duquel elle sera crée (formulaire ou une autre frame)
    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
    Private Function CreateFrame(ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Height As Long, Optional ByRef ParentControl As MSForms.Control = Nothing) As MSForms.Frame
        Dim Parent As Object
        If (ParentControl Is Nothing) Then
                '// Si absence de contrôle parent, on prend le formulaire
            Set Parent = Me
        Else
                '// Si presence de contrôle parent, on le prend
            Debug.Assert TypeOf ParentControl Is MSForms.Frame    '// Le parent doit être une frame
            Set Parent = ParentControl
        End If
     
            '// création de la frame
        Dim Frm As MSForms.Frame
        Set Frm = Parent.Controls.Add("Forms.frame.1", "Frame1", True)
            '// Positionnement
        Frm.Left = X
        Frm.Top = Y
        Frm.Width = Width
        Frm.Height = Height
            '// renvoie la référence pour usage ultérieur
        Set CreateFrame = Frm
    End Function
    Exemple d'appels:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
            '// Création d'une frame au sein du formulaire
        Dim Frm As MSForms.Frame
        Set Frm = CreateFrame(20, 20, 100, 100)
     
            '// Création d'une frame au sein de la frame précédemment créée
        CreateFrame 20, 20, 50, 50, Frm
    End Sub
    Note: Les coordonnées sont toujours relatives au parent.

    Je te laisse refondre ton code pour répondre à ce premier besoin (la suite sera plus complexe).

Discussions similaires

  1. Dupliquer dynamiquement un Frame
    Par patrice@ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/08/2020, 16h24
  2. PB dans création Userform Dynamiquement
    Par patyom dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 11/10/2017, 11h19
  3. creation d un formulaire de façon dynamique
    Par jano_dave dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2009, 14h34
  4. Réponses: 12
    Dernier message: 03/07/2008, 11h56
  5. TAdvTabsheet, création dynamique de frame
    Par gmc dans le forum Delphi
    Réponses: 2
    Dernier message: 24/08/2006, 09h37

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