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 de checkbox dynamiquement en fonction d'une liste de produit


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Par défaut creation de checkbox dynamiquement en fonction d'une liste de produit
    bonjour,

    je souhaiterai qu'une macro puisse créer autant de checkbox (en verticale) qu'il y aurait de "produits" définis dans une feuille excel.
    Dans le fichier excel attaché, la macro devrait créer 5 Checkbox car les produits vont de A à F avec les noms associés...

    Si quelqu'un a une idée je suis preneur.

    Merci,

    Chrystobale
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour chrystobale le forum..une macro a adapter

    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
    Option Explicit
     Sub es()
    Dim Obj As OLEObject, V As New Collection, c As Range
    Dim Level As Integer, i As Integer, j As Integer, z As Integer
    Dim L As Single, T As Single, W As Single, H As Single
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each c In Range("d7", [d65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    i = 7
    For Level = V.Count To 1 Step -1
        j = i + 4
        Cells(i, 2) = Level
        L = Cells(i, 5).Left
        T = Cells(i, 5).Top
        W = Cells(i, 5).Width
        H = Cells(i, 5).Height
           Set Obj = Sheets(1).OLEObjects.Add("Forms.Checkbox.1", _
        Left:=L, Top:=T, Height:=H + 5, Width:=W + 5)
        Obj.Name = "Level" & i
        i = i + 1
    Next Level
    Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Par défaut
    bonjour Leatitia,

    Merci pour le code, j'en suis encore 'scotché" !
    Par contre comme puis je le mettre dans un userform1 par exemple ?

    Mais merci tout de même ==> 100% efficace !

    Chris

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re un exemple de silky road
    tu cree un module de classe
    code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
    Public WithEvents ChkBx As MSForms.CheckBox
    'Exemple pour gérer l'évènement clic sur les objets type CheckBox
    Private Sub ChkBx_Click()
        'cet exemple affiche le nom et la valeur de l'objet cliqué
        MsgBox ChkBx.Name & ": " & ChkBx.Value
    End Sub
    dans un module standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public Collect As Collection
    code userform tu mets un bouton

    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
    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
            'ajout de l'objet dans la classe
        Set Cl = New Classe1
        Set Cl.ChkBx = Obj
        Collect.Add Cl
    Next i
    End Sub
    oubli pas de rajouter ta condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each c In Range("d7", [d65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    a adapter

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Par défaut
    LEatitia,

    Merci pour les info , en appliquant betement ce que tu m'a envoyé j'ai bien 3 checkbox qui apparaissent en appuyant sur le bouton.
    je tente maintenant d'adapter le code selon tes précedentes infos mais lorsque je lance le code - rien ne se passe :-)
    voici la partie du code avec modif.

    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
    Private Sub CommandButton1_Click()
    Dim Obj As Control
    Dim Cl As Classe1
    Dim i As Integer
    Dim V As New Collection           'added
    Dim Level As Integer              'added
    Set Collect = New Collection
    ' -------------------------------
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each c In Range("d7", [d65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    i = 7
    ' -------------------------------
    'For i = 1 To 3 'boucle pour la création des CheckBox
    For Level = V.Count To 1 Step -1 '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
            'ajout de l'objet dans la classe
        Set Cl = New Classe1
        Set Cl.ChkBx = Obj
        Collect.Add Cl
        i = i + 1   'added
    'Next i
    Next Level      'added
    Application.ScreenUpdating = True
    End Sub
    Merci beaucoup pour ton aide !

    chris

  6. #6
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re,rajoute la variable v & c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click()
    Dim Obj As Control, c As Range, V As New Collection, Cl As Classe1, i As Integer
    Set Collect = New Collection
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each c In Range("d7", [d65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    For i = 1 To V.Count' ici la variable v
        Set Obj = Me.Controls.Add("forms.Checkbox.1")
        With Obj
    'ect...le reste du code

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Par défaut
    hello,
    Je viens de rajouter la variable "c" comme recommandé (V était déjà présente).
    Mais nada ca ne fait rien. j'attache la feuille en question:
    Fichiers attachés Fichiers attachés

  8. #8
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re je viens de regarder ton zip

    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
    Private Sub CommandButton1_Click()
    Dim Obj As Control, c As Range, V As New Collection, Cl As Classe1, i As Integer
    Set Collect = New Collection
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each c In Range("d7", [d65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    For i = 1 To V.Count
        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
           Set Cl = New Classe1
        Set Cl.ChkBx = Obj
        Collect.Add Cl
    Next i
    End Sub
    ca devrait marcher je viens de tester

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Par défaut
    nickel ! ca marche pas mal du tout.
    Je suis en train de voir comment attribuer les noms contenus dans la variable "V" correspondant dans l'exemple aux items A, B, C, D, E, F, dans les checkbox respectifs ...

    Merci Leatitia

  10. #10
    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
    à la place de Laétitia, je me permet de répondre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            .Object.Caption = V.Item(i)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Par défaut
    merci Mercatog !
    Effectivement cela fonctionne du Tonner !!!!

    j'avais mis le code suivant mais c clair ca ne marche pas ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Object.Caption = V.item & i
    Merci à vous 2
    Christophe

    je viens de me rendre compte que la solution fonctionne uniquement dans le cas ou la colonne a analyser est la derniere autrement cela crée bien des checkbox mais en parcourant ligne par ligne et par colonne ce qui crée une quantité imortant de Checkbox ....

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 77
    Par défaut
    ce soir je m'auto proclame le roi des "nases" ...
    simplemetn à cause de la condition d65000 ... au lieu de h65000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each c In Range("h7", [d65000].End(xlUp))
    If c <> "" Then V.Add c.Value, CStr([c])
    Next c
    j'crois que là j'ai la limite qui vient d'etre franchie ...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/12/2009, 18h12
  2. Creation de clips dynamiques et fonctions
    Par Kaimann dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 20/09/2007, 09h51
  3. Modifier une image dynamiquement en fonction d'une liste
    Par metatron dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/11/2006, 18h33
  4. [Conception] creation de fiche dynamique a partir d'une base de données
    Par badnane2 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/06/2006, 17h50
  5. Réponses: 10
    Dernier message: 25/11/2005, 18h12

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