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 :

Générer plusieurs ListBox dynamiquement depuis une ListeBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Générer plusieurs ListBox dynamiquement depuis une ListeBox
    Bonjour,

    Lors de la sélection d'une des lignes d'une ListeBox, je génère sur le formulaire une TextBox.
    Cela fonctionne bien.

    Par contre, la position en hauteur TOP est identique à la valeur de l'index du select de la ligne de la listBox

    Mon souhait est peu importe la position de la ligne sélectionnée dans la listbox Créera une TextBox sur la 1er ligne prévue à cette effet dans le formulaire
    la seconde sélection créera le TextBox en dessous de la 1er TextBox. etc...

    Il semble que ce soit cette variable qui faut incrémenter différemment --> .Top = 130 + (j) * 15 --> mais diférents test ne donnent rien

    voici le code pour plus de clarté

    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
     
     
    Private Sub ListBox_ARO_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim i As Integer
    Dim J as integer
    Dim ctrl As Control
     
        For i = 0 To ListBox_ARO.ListCount - 1
    j = 1
            If ListBox_ARO.Selected(i) Then
    j = j + 1
                'Label Nom Arôme
                Set ctrl = Me.Controls.Add("Forms.Label.1")
                With ctrl
                    .Height = 12
                    .Width = 234
                    .Left = 24
                    .Top = 130 + (j) * 15
                    .Caption = Select_Nom_Arome & ListBox_ARO.List(i, 2)
                    .Name = "Lab_" & Select_Nom_Arome & ListBox_ARO.List(i, 2)
                    .TabIndex = i
                    .Font.Name = "Verdana"
                    .Font.size = 10
                End With
     
                ' TextBox Dosage Arôme
                Set ctrl = Me.Controls.Add("Forms.TextBox.1")
                With ctrl
                    .Height = 18
                    .Width = 24
                    .Left = 264
                    .Top = 126 + (j) * 21
                    .Name = "TB_" & Select_Nom_Arome & ListBox_ARO.List(i, 2)
                    .TabIndex = i
                    .Font.Name = "Verdana"
                    .Font.size = 10
                End With
     
                'Label symbôle %
                Set ctrl = Me.Controls.Add("Forms.Label.1")
                With ctrl
                    .Height = 12
                    .Width = 12
                    .Left = 289
                    .Top = 130 + (j) * 15
                    .Caption = "%"
                    .TabIndex = i
                    .Font.Name = "Verdana"
                    .Font.size = 10
                End With
     
                ' TextBox Quantité dû au dosage Arôme
                Set ctrl = Me.Controls.Add("Forms.TextBox.1")
                With ctrl
                    .Height = 18
                    .Width = 30
                    .Left = 310
                    .Top = 126 + (j) * 21
                    .Name = "TB_Q_" & Select_Nom_Arome & ListBox_ARO.List(i, 2)
                    .TabIndex = i
                    .Font.Name = "Verdana"
                    .Font.size = 10
                End With
     
                'Label ml
                Set ctrl = Me.Controls.Add("Forms.Label.1")
                With ctrl
                    .Height = 12
                    .Width = 12
                    .Left = 342
                    .Top = 130 + (j) * 15
                    .Caption = "ml"
                    .TabIndex = i
                    .Font.Name = "Verdana"
                    .Font.size = 10
                End With
            End If
     
        Next i
     
        ' lecture du nom de control type TextBox & Label
        Dim Ob As Control
        For Each Ob In Me.Controls
     
            If TypeOf Ob Is MSForms.TextBox Then
               ' MsgBox Ob.Name
                Debug.Print Ob.Name
            End If
            If TypeOf Ob Is MSForms.label Then
               ' MsgBox Ob.Name
                Debug.Print Ob.Name
            End If
        Next
     
     
    End Sub

    (j'espère que l'explication n'est pas confuse)

    une idée ? merci ...

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    j'espère que l'explication n'est pas confuse
    pas vraiment "confuse", mais par contre "incomplète".
    Quel est le conteneur de ces contrôles (feuille de calcul ou userform) ?

    EDIT : le code que tu montres met par ailleurs en évidence que la listbox en cause est multiselect
    On ne sait par contre pas si elle est affichée dans sa totalité ou s'il faut la "dérouler" pour en lire tous les articles.
    Qu'as-tu prévu pour ce qui est de l'affichage de tes contrôles ajoutés en cas de déroulements de la listbox ?

    Tout est possible, mais tu risques assez de mettre en place ainsi une petite usine à gaz. Quelle en serait l'utilité (histoire de déterminer si le jeu en vaut vraiment la chandelle) ?

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Héla !
    que fait cette réinitialisation systématique à 1 de la valeur de J au sein de ta boucle for i ?
    Elle n'a rien à faire là et fait que tous tes contrôles sont l'un au dessus de l'autre, à un .top = 130 + 2 * 15

  4. #4
    Invité
    Invité(e)
    Par défaut
    Le conteneur est UserForm "Creation_Liquide"
    La ListBox cible, sur laquelle on double clique pour sélectionner, affiche 5 lignes.
    Sur cette ListBox on ne peut sélectionner, par double clic, une ligne après l'autre.

    Les controls TextBox et Label sont générer par un double clic sur une des ligne de la ListBox , sur le formulaire "Creation_Liquide".
    Je pense bloquer au nombre de 4 sélections (une fois après l'autre)

    Nom : _12.jpg
Affichages : 254
Taille : 31,0 KoNom : _13.jpg
Affichages : 258
Taille : 33,9 KoNom : _14.jpg
Affichages : 326
Taille : 36,4 KoNom : _15.jpg
Affichages : 327
Taille : 38,2 Ko


    On constate que lors de chaque double clic, le Control TextBox & label se position en TOP en fonction de son numéro dans la ListeBox ... (L'espace entre arôme 2 et 4 et pour l'arôme 3 si je double clic dessus)

    J'aimerai qu'ils se placent les un en dessous des autres sans espace.

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    - Ces précisions n'apportent aucun éclairage sur l'utilité d'une telle démarche (l'utilisation des données dans tes contrôles ajoutés dynamiquement) *****
    - relis mon dernier message au sujet de la réinitialisation à 1 de ta variable j au sein de ta boucle for i


    ***** en tout état de cause, une simple listbox multicolonnes suffirait à y stocker ce que tu stockes ainsi dans tes contrôles ajoutés dynamiquement. Cette listbox pourrait être créée en mode création (plutôt que dynamiquement) et rendue visible ou invisible en tant que de besoin. Ce serait, de très loin, nettement plus agile ainsi !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Le TextBox % doit être remplie par l'utilisateur pour donner une quantité ml dans la TextBox suivante. Cette quantité devra être vérifiée/comparée par rapport à la quantité issue de l'article sélectionné dans la ListeBox.

    La variable j est supprimée. Lors du double clic, les contrôles sont générés selon i.
    Donc si je double click sur la 3ème ligne, les contrôles est généré en 3ème position sur le formulaire.

    le but, par exemple :
    la 3ème ligne sélection, affichée en 1er position
    la 1er. ligne sélection, affichée en 2ème position
    la 5ème ligne sélection, affichée en 3ème position

    puis le nombre de sélection soit limité à 4 maximum

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/08/2018, 18h48
  2. Piloter plusieurs bases Access depuis une autre base
    Par BAYRAL dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/01/2008, 16h06
  3. [MySQL] affichage dynamique depuis une liste de résultats
    Par cloridriks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/10/2007, 17h06
  4. Générer un champ dynamiquement avec une requête ?
    Par The Molo dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/06/2007, 16h59
  5. Réponses: 2
    Dernier message: 26/02/2003, 12h47

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