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 :

TextBox Dynamique dans un MultiPage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    CFA
    Inscrit en
    Février 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : CFA
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2016
    Messages : 16
    Par défaut TextBox Dynamique dans un MultiPage
    Bonjour a tous, et un grand merci à tous ceux qui prendront un peu de temps pour me sortir de ce mauvais pas...

    Dans un UserForm, j'ai un Multipage avec une seule page, qui s'incrémente automatiquement du pages supplémentaires en fonction du besoin (3 4 5 6 pages).

    Je fais donc une copie de la première page sur laquelle se trouve 4 TextBox que j'arrive bien à remplir grâce à l'évènement Click sur une liste box. Le soucis se situe au niveau des autres pages créées.
    Impossible de renommer les TextBox et encore moins de leur attribuer une valeur.

    J'ai pas mal cherché, je suis tombé sur pas mal d'explication, mais rien n'y fait.
    Je n'arrive pas à les créer sur chaques pages,
    J'arrive a créer des textbox sur la première mais impossible de rentrer des valeurs a l'intérieure après par le biais d'une liste box, les textbox ne veulent rien savoir en entrée comme en sortie
    HELP .....

    Déclarations Générales

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Obj As MSForms.MultiPage, Cl1 As Classe2, i As Byte, j As Control
    Dim Ctl As MSForms.Control
    Dans UserForm

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Private Sub UserForm_Initialize()
     
        'Attribue la collection ˆ la variable "Collect".
        Set Collect = New Collection
    End Sub
    Private Sub UserForm_Activate()
    Dim Pge As Page
    Dim NomPage As String
    Dim pgCount As Long
    Dim Ctrl As Variant
    Dim Obj As Control
     
     
            t = Feuil01.Range("B3:B" & Feuil01.Range("B" & Rows.Count).End(xlUp).Row + 1)
            Articles.List = t
     
     
                    'Ajoute une page
          derligne = Feuil03.Range("A65536").End(xlUp).Row
     
        For X = 2 To derligne
                    NomPage = Feuil03.Range("B" & X)
                    'MultiPage2.Pages.Add (NomPage)
                    'NomPage = Replace(NomPage, " ", "")
     
                'Get the current count of the pages
                pgCount = Me.MultiPage2.Pages.Count
     
                'Add a new page
                Me.MultiPage2.Pages.Add (NomPage)
     
                'SŽlectionne la nouvelle page
                Me.MultiPage2.Value = pgCount
    NomPage = Replace(NomPage, " ", "")
     
    Dim TxtB As Control
        For K = 0 To 3
             Set Obj = Me.Controls("MultiPage2")
                 With Obj.page1 'Je n'arive pas a rendre ceci dynamique pour qu'il s'éxécute sur chaque page créée
               Set TxtB = .Add("forms.TextBox.1")
     
               'Set Obj1 = .Add("forms.label.1")
                 End With
        With TxtB
            .Name = NomPage & K
            .Left = 80 * K + 20
            .Top = 70
     
            .Width = 80
            .Height = 22
        End With
     
           Set Cl1 = New Classe2
        Set Cl1.textbox = TxtB
        Collect.Add Cl1
    Next K
    'Me.Height = Me.Height + Obj.Top - 40 'le 30 correspond a .top -10 du +10
    Next
     Me.MultiPage2.Value = 0
    End Sub
    Dans le Module de Classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public WithEvents textbox As MSForms.textbox

    Merci à vous

    Je me permet de poser mon fichier ici, au cas ou
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    CFA
    Inscrit en
    Février 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : CFA
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2016
    Messages : 16
    Par défaut Une autre Version
    Qui ne marche pas non plus

    Ici le problème semble se situer au niveau de l'ajout dans la collection. Le If passe tout droit, ce ne sont pas des TextBox. Encore merci

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Private Sub UserForm_Initialize()
     
        'Attribue la collection ˆ la variable "Collect".
        Set Collect = New Collection
    End Sub
    Private Sub UserForm_Activate()
    Dim Pge As Page
    Dim NomPage As String
    Dim pgCount As Long
    'Dim Ctrl As Variant
        Set Collect = New Collection
     
            t = Feuil01.Range("B3:B" & Feuil01.Range("B" & Rows.Count).End(xlUp).Row + 1)
            Articles.List = t
     
     
                    'Ajoute une page
          derligne = Feuil03.Range("A65536").End(xlUp).Row
     
        For X = 2 To derligne
                    NomPage = Feuil03.Range("B" & X)
                    'MultiPage2.Pages.Add (NomPage)
                    'NomPage = Replace(NomPage, " ", "")
     
                'Get the current count of the pages
                pgCount = Me.MultiPage2.Pages.Count
     
                'Add a new page
                Me.MultiPage2.Pages.Add (NomPage)
     
                'Change '0' to whatever page you want to copy from
                Me.MultiPage2.Pages(0).Controls.Copy
     
                'Paste it in the newly created multipage
                Me.MultiPage2.Pages(pgCount).Paste
     
                'Renomme la nouvelle page
                'Me.MultiPage2.Pages(pgCount).Caption = "Ex. " & pgCount + 1
     
                'SŽlectionne la nouvelle page
                Me.MultiPage2.Value = pgCount
     
     For Each Ctrl In Me.MultiPage2.Pages(pgCount).Controls
         If TypeOf Control Is MSForms.TextBox Then
            'Ajoute l'objet dans la classe.
            Set Cl = New Classe1
            Set Cl.TxBox = Ctrl
            Collect.Add Cl
        End If
     
     
     Next Ctrl
     
     
                For Each Ctrl In Me.MultiPage2.Pages(pgCount).Controls
     
                    'Charger la liste des muscles sur la nouvelle page
                    If Left(Ctrl.Name, 7) = "Textbox" Then
                        For i = 1 To 4
                            Ctrl.Name = NomPage & i
                        Next
                    End If
     
                Next
            Next
     StkTotal = "": Prix = "": Unité = "": PrixTotal = ""
     TextBox1 = ""
     
     
     Me.MultiPage2.Value = 0
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre émérite Avatar de Nicolas JACQUIN
    Homme Profil pro
    .
    Inscrit en
    Avril 2014
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : .
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2014
    Messages : 556
    Par défaut
    Bonjour,

    je pense que t'on problème vient de l'indexation des pages qui ne correspond pas quand tu en fait appel dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Obj.page1 'Je n'arive pas a rendre ceci dynamique pour qu'il s'éxécute sur chaque page créée
    http://silkyroad.developpez.com/VBA/...serForm/#LII-J

    Bonne chance

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    Le code de ton UserForm :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
    Option Explicit '<--- à mettre obligatoirement de préférence, évite souvent de s'arracher les cheveux !
     
        Dim TblTxt() As New Classe1
     
        Dim Cel As Range
        Dim LesRoses0 As Long
     
    Private Sub UserForm_Initialize()
     
        Dim NomPage As String
        Dim MPage As MSForms.MultiPage
        Dim TxtB As MSForms.textbox
        Dim Lbl As MSForms.Label
        Dim T
        Dim DerLigne As Long
        Dim X As Long
        Dim K As Long
        Dim I As Integer
     
        Set MPage = Me.Controls("MultiPage2")
     
        T = Feuil01.Range("B3:B" & Feuil01.Range("B" & Rows.Count).End(xlUp).Row + 1)
        Articles.List = T
     
        'titres des Labels
        T = Array("Stock", "Unité", "Prix", "Valeur")
     
        DerLigne = Feuil03.Range("A65536").End(xlUp).Row
     
        For X = 2 To DerLigne
     
            NomPage = Feuil03.Range("B" & X)
     
            'Ajoute une page
            Me.MultiPage2.Pages.Add (NomPage)
     
            'Sélectionne la nouvelle page
            Me.MultiPage2.Value = Me.MultiPage2.Pages.Count - 1
     
            NomPage = Replace(NomPage, " ", "")
     
            For K = 0 To 3
     
                With MPage.Pages(X - 1) 'Je n'arive pas a rendre ceci dynamique pour qu'il s'éxécute sur chaque page créée
     
                    'ajoute un TextBox et un Label
                    Set TxtB = .Controls.Add("Forms.TextBox.1", "NomPage" & K, True)
                    Set Lbl = .Controls.Add("Forms.Label.1", "Label" & K, True)
     
                End With
     
                'paramètre le TextBox
                With TxtB
     
                    .Left = 80 * K + 20
                    .Top = 42
                    .Width = 80
                    .Height = 22
     
                End With
     
                'stocke dans un tableau (je préfère à une collection)'entres une valeur et tu verras apparaître un message
                'voir dans le module de classe
                I = I + 1
                ReDim Preserve TblTxt(1 To I)
                Set TblTxt(I).GroupeTextBox = TxtB
     
                'paramètre le TerxtBox
                With Lbl
     
                    .Caption = T(K)
                    .Font.Size = 12
                    .Font.Name = "Tahoma"
                    .TextAlign = fmTextAlignCenter
                    .BackStyle = fmBackStyleOpaque
                    .BorderStyle = fmBorderStyleSingle
                    .Left = 80 * K + 20
                    .Top = 24
                    .Width = 80
                    .Height = 18
     
                End With
     
            Next K
     
        Next X
     
        Me.MultiPage2.Value = 0
     
    End Sub
     
    Private Sub Articles_Click()
     
        Dim D As String
     
        With Feuil01
     
            D = Articles.Text
     
            Set Cel = Feuil01.Columns("B").Find(what:=D, LookIn:=xlValues, LookAt:=xlWhole)
     
                If Not Cel Is Nothing Then
     
                    Ligne = Cel.Row
                    StkTotal = Feuil01.Range("F" & Ligne).Value
                    LesRoses0 = Feuil01.Range("F" & Ligne).Value
                    Prix = Feuil01.Range("D" & Ligne).Value
                    Unité = Feuil01.Range("C" & Ligne).Value
     
                End If
     
        End With
     
    End Sub
     
    Private Sub CommandButton10_Click()
     
        Unload Me
     
    End Sub
     
    Private Sub MultiPage2_Click(ByVal Index As Long)
     
        Dim Ctrl As Control
     
        'Boucle sur la collection de contrôles
        'For Each Ctrl In Me.Controls
            'MsgBox Ctrl.Name
            'Next Ctrl
     
    End Sub
     
    Private Sub Prix_Change()
     
        If StkTotal = "" Or Prix = "" Then Exit Sub
        PrixTotal = StkTotal * Prix
        Prix = Format(Prix, "0.00" & " €")
     
    End Sub
     
    Private Sub PrixTotal_Change()
     
        PrixTotal.Text = Format(PrixTotal, "0.00" & " €")
     
    End Sub
    Le code du module de classe "Classe1" (Classe2 pas utilisé donc, à virer !). Ici, la procédure est là juste pour le test ne sachant pas ce que tu souhaites faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Option Explicit
     
    Public WithEvents GroupeTextBox As MSForms.textbox
     
    Private Sub GroupeTextBox_Change()
     
        With GroupeTextBox
     
            MsgBox "le nom du TextBox est : '" & .Name & "' et la valeur entrée est : '" & .Text & "'"
     
        End With
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    CFA
    Inscrit en
    Février 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : CFA
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2016
    Messages : 16
    Par défaut
    Tout d'abord un grand merci à toi pour le temps passé sur mon problème. De toute évidence j'aurai fait un grand pas en avant.
    je n'ai pas le fichier sous la main ce soir, mais je vois que tu déclares lesrose0 comme long, mais je n'aurait pas cette info il y aura une multitude de possibilité, du coup il me sera impossible de les déclarer.
    Je me penche la dessus demain à la première heure.
    Encore Merci




    Citation Envoyé par Theze Voir le message
    Bonsoir,

    Le code de ton UserForm :
    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
    
        Dim LesRoses0 As Long  '<---------------- Plus tard je n'aurais pas cette info, elle sera dynamique en fonction d'un onglet (celui ou je les charge)
    
    
    
    Private Sub Articles_Click()
        
        Dim D As String
        
        With Feuil01
        
            D = Articles.Text
            
            Set Cel = Feuil01.Columns("B").Find(what:=D, LookIn:=xlValues, LookAt:=xlWhole)
            
                If Not Cel Is Nothing Then
                
                    Ligne = Cel.Row
                    StkTotal = Feuil01.Range("F" & Ligne).Value
                    LesRoses0 = Feuil01.Range("F" & Ligne).Value     '<---------------------------  je voulais rendre ceci dynamique plus tard, pour le moment je testai  ;)
                    Prix = Feuil01.Range("D" & Ligne).Value
                    Unité = Feuil01.Range("C" & Ligne).Value

Discussions similaires

  1. TextBox recherche DYNAMIQUE dans un DataGridView
    Par Saten dans le forum Windows Forms
    Réponses: 25
    Dernier message: 12/08/2016, 13h58
  2. Créer des TextBox dynamiquement dans un UserForm ?
    Par Hellgast dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 05/06/2014, 22h16
  3. Réponses: 1
    Dernier message: 08/07/2008, 15h35
  4. Textbox dynamique et insertion dans BD
    Par benjamin-mermoz dans le forum ASP.NET
    Réponses: 12
    Dernier message: 06/06/2008, 10h38
  5. Réponses: 1
    Dernier message: 11/02/2008, 11h40

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