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 :

récupération valeur controle dynamique et suppression controle dynamique


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
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Bonjour, je reposte ici comme je suis trompé d'endroit pour mon mon post d'aujourd'hui.

    Alors voila, j'ai réussi à créer dynamiquement des contrôles dans un multipage.
    Voici mon code pour la création des controles:
    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
    Private Sub btn_ajout_Click()
        Dim composant As Object
        Dim divers As Object
     
     
        compteur = compteur + 1
        Set divers = MultiPage1.Pages(1)
     
        With divers
            Set Label = .Controls.Add("forms.Label.1")
            Set saisie = .Controls.Add("forms.Textbox.1")
        End With
     
        With Label
            .Left = 12
            .Height = 18
            .Top = 36 * compteur
            .Width = 120
            .Caption = "nom du composant " & compteur
            .Font.Size = 11
            .Font.Bold = True
        End With
     
          With saisie
            .Left = 156
            .Height = 18
            .Top = 36 * compteur
            .Width = 240
            .Font.Size = 9
            .Font.Bold = False
        End With
     
     
    End Sub
    Ce que je voudrais maintenant c'est supprimer le dernier contrôle créés à l'aide de mon compteur

    J'ai essayé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub btn_delete_Click()
        If compteur > 0 Then
            MultiPage1.Pages(1).Controls.Remove ("label1".name)
            compteur = compteur - 1
        Else
            MsgBox "Nom du composant divers non renseigné"
            Exit Sub
        End If
     
    End Sub
    Il supprime bien le dernier contrôle créé mais lorsque que je reclique sur le bouton j'ai le message d'erreur qui apparaît.
    La chose est que je n'arrive pas à déterminer l'erreur car je ne comprends pas non plus pourquoi mon code de création des contrôles fonctionnent en faite
    En effet, pour moi, ce code crée des textbox de manière décalées mais il devraient tous avoir le même nom ce qui devrait engendrer un message d'erreur.
    Si quelqu'un pouvait m'aider à comprendre ces deux bouts de code
    Merci d'avance pour votre aide et à tous ceux qui prendront le temps de lire ce message

    (Je pinaille beaucoup je sais, mais je n'aime pas vraiment utiliser de codes dont je ne comprends pas complètement le fonctionnement, notamment sur le fait que je ne sais pas du coup comment récupérer la valeur de ma textbox créée dynamiquement)

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je ne vois aucunement où tu nomme tes contrôles lors de leur création

    En plus cette ligne est incorrecte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MultiPage1.Pages(1).Controls.Remove ("label1".name)
    Le .name se réfère à quoi?


    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
    Option Explicit
     
    Dim Compteur As Integer
     
    Private Sub btn_ajout_Click()
    Dim Label As Object, Saisie As Object, Divers As Object
     
     
    Compteur = Compteur + 1
    Set Divers = MultiPage1.Pages(1)
     
    With Divers
        Set Label = .Controls.Add("forms.Label.1")
        Set Saisie = .Controls.Add("forms.Textbox.1")
    End With
     
    With Label
        .Left = 12
        .Height = 18
        .Top = 36 * Compteur
        .Width = 120
        .Caption = "Nom du composant " & Compteur
        .Font.Size = 11
        .Font.Bold = True
        .Name = "myLabel" & Compteur
    End With
    Set Label = Nothing
     
    With Saisie
        .Left = 156
        .Height = 18
        .Top = 36 * Compteur
        .Width = 240
        .Font.Size = 9
        .Font.Bold = False
        .Name = "myText" & Compteur
    End With
    Set Saisie = Nothing
    End Sub
     
    Private Sub btn_delete_Click()
     
    If Compteur > 0 Then
        With MultiPage1.Pages(1).Controls
            .Remove "myLabel" & Compteur
            .Remove "myText" & Compteur
        End With
        Compteur = Compteur - 1
    Else
        MsgBox "Nom du composant divers non renseigné"
    End If
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Bonjour, tout d'abord merci pour votre retour.
    Oui j'ai oublié de mettre à jour 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
    Private Sub btn_ajout_Click()
        Dim composant As Object
        Dim divers As Object
     
     
        compteur = compteur + 1
        Set divers = MultiPage1.Pages(1)
     
        With divers
            Set Label = .Controls.Add("forms.Label.1")
            Set saisie = .Controls.Add("forms.Textbox.1")
        End With
     
        With Label
            .Name = "Label" & compteur
            .Left = 12
            .Height = 18
            .Top = 36 * compteur
            .Width = 120
            .Caption = "nom du composant " & compteur
            .Font.Size = 11
            .Font.Bold = True
        End With
     
          With saisie
            .Name = "saisie" & compteur
            .Left = 156
            .Height = 18
            .Top = 36 * compteur
            .Width = 240
            .Font.Size = 9
            .Font.Bold = False
        End With
     
     
    End Sub
    Mais du coup j'avais en fait deux choses incomprises:
    -même sans renommer mes contrôles, ces derniers étaient saisies... Je ne comprends pas comment la création fonctionne.

    -la deuxième chose est par conséquent que je ne sais pas comment récupérer les valeurs saisies par l'utilisateur dans les textbox crées dynamiquement. J'ai lu de nombreux tutos sur sylkyroad mais j'ai beaucoup de choses incomprises:
    En résumé:
    1)j'ai réussi à créer mes textbox dynamqiement
    2) D'apès sylkyroad, je devrais mettre les nouveaux textbox dans une nouvelle collection pour pouvoir récupérer les valeurs de mes textbox, mais je ne comprends comment l'on fait:

    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
    'Procédure de création des CheckBoxs à placer dans l'UserForm.
    'L'UserForm doit préalablement contenir un bouton nommé CommandButton1
    
    Option Explicit
    
    Private Sub CommandButton1_Click()
    Dim Obj As Control
    Dim Cl As Classe1
    Dim i As Integer
    
    Set Collect = New Collection
    
    For i = 1 To 3 'boucle pour la création des CheckBox
        Set Obj = Me.Controls.Add("forms.Checkbox.1")
        With Obj
            .Name = "moncheckbox" & i
            .Object.Caption = "le texte" & i
            .Left = 140
            .Top = 30 * i + 10
            .Width = 50
            .Height = 20
        End With
      ' Jusq'ici je comprends la procédure, mais pour la suite je sèche totalement 
        'ajout de l'objet dans la classe
        Set Cl = New Classe1
        Set Cl.ChkBx = Obj
        Collect.Add Cl
    Next i
    
    End Sub
    Ma veine tentative de récupérer la valeur des textbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Divers
        If valider_divers.Value = True Then
            If compteur = 0 Then
                MsgBox "Aucun composant divers renseigné"
            Else
                ReDim donnees(1 To 3, UBound(donnees, 2) + compteur)
                Do Until NbDiv = compteur
                    donnees(2, UBound(donnees, 2) + NbDiv) = saisiecompteur.Value
                    NbDiv = NbDiv + 1
                Loop
            End If
        End If

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    J'ai trouvé!!!!!!!!!!! il s'agissait d'une malheureuse histoire de syntaxe!!!!!!!!

    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
     
    'Divers
     
        If valider_divers.Value = True Then
            If compteur = 0 Then
                MsgBox "Aucun composant divers renseigné"
                Exit Sub
            Else
                For NbDiv = 1 To compteur
                    ReDim Preserve donnees(1 To 3, UBound(donnees, 2) + 1)
                    donnees(2, UBound(donnees, 2)) = MultiPage1.Pages(1).Controls _
                    ("saisie" & NbDiv).Text
                Next
            End If
        End If

    Mais du coup, j'ai fait énormément d'heure de recherches et je voudrais quand même bien savoir à quoi cela sert de mettre les objets dans une collection
    D'ailleurs avec tout ce que j'ai vu, est-il possible d'écrire des évènements tels que public comboboxlist click dans un module classe?

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

Discussions similaires

  1. [XL-2010] boucler sur tous les controles d'une multipage
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/04/2016, 15h55
  2. [XL-2003] Supprimer tous les controls d'une userforms
    Par redstoff dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/09/2011, 15h23
  3. Supprimer un controle d'une celleule
    Par zooffy dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/03/2008, 09h34
  4. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 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