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 :

création dynamique checkbox caption plage feuille cachée


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut création dynamique checkbox caption plage feuille cachée
    Bonjour,

    En utilisant le code trouvé à cet endroit et qui permet de créer dynamiquement des checkbox, j'essaye de faire en sorte que la propriété Caption des Checkbox soit crée en fonction d'une liste situé dans une Feuille cachée nommée "Classes", en colonne A, dans une plage nommée "Classes".

    Avec le code suivant j'obtient une erreur 'Mémoire insufisante'
    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
    Private Sub CommandButton1_Click()
    Dim Obj As Control
    Dim Cl As Classe1
    Dim i As Integer
    Dim Plage As Range
     
    Set Collect = New Collection
     
    'MsgBox Feuil1.Cells("A" & Rows.Count).Row.Value
     
    'While Feuil1.Cells("A" & Rows.Count).End(xlUp).Row.Value <> 0
     
        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
                For Each Plage In Feuil1.Range("Classes")
                .Object.Caption = Cells.Value
                .Left = 140
                .Top = 30 * i + 10
                .Width = 50
                .Height = 20
                Next
            End With
    Je n'arrive pas à lui dire que le caption = chaque valeur dans telle colonne.

    Merci de votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    Je ne comprends pas pourquoi tu boucles dans ta plage pour renseigner la valeur caption de ton checkBox vu qu’il ne peut en prendre qu’une.

    Si tu ranges tes valeurs dans le même ordre que la création de tes checkBox
    checkBox1.caption = col 1 de ta plage
    checkBox2.caption = col 2 de ta plage

    Tu peux utiliser ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            With Obj
                .Name = "moncheckbox" & i
                .Object.Caption = Worksheets("Classes").Range("Classes").Cells(i, 1).Value
                .Left = 140
                .Top = 30 * i + 10
                .Width = 50
                .Height = 20
            End With
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par zyhack Voir le message
    Je ne comprends pas pourquoi tu boucles dans ta plage pour renseigner la valeur caption de ton checkBox vu qu’il ne peut en prendre qu’une.
    Pour etre franc je ne comprend pas non plus hehe, toujours mon problème de sélection de plage / range etc
    en tout cas ça marche et c'est tout simple merci zyhack

    Peut etre vite fait tu peux essayer de m'expliquer l'interet de déclarer le range en variable comme dans :
    Du coup moi je fais l'association variable = boucle et je m'emmême les pinceaux

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour,

    En utilisant le code trouvé à cet endroit et qui permet de créer dynamiquement des checkbox, j'essaye de faire en sorte que la propriété Caption des Checkbox soit crée en fonction d'une liste situé dans une Feuille cachée nommée "Classes", en colonne A, dans une plage nommée "Classes".
    ta liste si elle est crée en colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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 = worksheets("classe").Cells(i,1).Value            
                .Left = 140
                .Top = 30 * i + 10
                .Width = 50
                .Height = 20
                Next
            End With

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par Xiombarg2911 Voir le message
    Peut etre vite fait tu peux essayer de m'expliquer l'interet de déclarer le range en variable comme dans :
    Du coup moi je fais l'association variable = boucle et je m'emmême les pinceaux
    Dans ton cas cette variable est inutile car tu ne l’utilises pas.

    Sinon comme tu l’as dit toi-même cette déclaration est utile quand tu boucles dans une plage de cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim C As Range
      For Each C In Range("ma_plage")
        C.Value = "toto"
      Next
    Si ta plage change en plus petite, plus grande ou complètement différente ton code restera bon. Contrairement à celui-ci ou tu devra modifier ton code pour lui indiquer ou ecrire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim i As Integer
      For i = 1 To 20
        Cells(i, 1).Value = "toto"
      Next
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    ok je capte un peu mieux. Quand on débute c'est pas facile de voir loin lors de l'écriture du code et de se dire que là on va boucler ou là un simple compteur suffit.

    Sinon dans mon projet j'en suis à l'aspect publipostage. Alors j'ai fait une recherche sur le forum et je trouve plein de posts sur le publipostage de Word, Access et Excel, mais pas la solution de ce problème :
    Avec l'enregistreur de macro sous Word j'ai eu ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set wrdApp = CreateObject("Word.Application")
            Set wrdDoc = wrdApp.Documents.Open("C:\Documents and Settings\Administrateur\Bureau\modèleetiquette.doc")
        wrdApp.Visible = True
        'wrdDoc.Select
        ActiveDocument.MailMerge.OpenDataSource Name:="C:\Documents and Settings\Administrateur\Bureau\Anciens élus.xlsm" ', SQLStatement:="SELECT * FROM `Feuil3$`"
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                 .FirstRecord = wdDefaultFirstRecord
                 .LastRecord = wdDefaultLastRecord
            End With
            .Execute Pause:=False
        End With
    code assez indigeste pour dire de réaliser un publipostage d'excel vers word.
    A la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.MailMerge.OpenDataSource Name:="C:\Documents and Settings\Administrateur\Bureau\Anciens élus.xlsm" ', SQLStatement:="SELECT * FROM `Feuil3$`"
    j'obtient une erreur "Commande non disponible, Aucun document n'est ouvert"

    Pourtant mon doc excel est sauvegardé et ouvert, et mon doc Word s'ouvre bien, et lors de l'enregistrement de la macro tout c'est bien passé. Il ne fait pas le publipostage vers un autre document word

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Aie Excel et Word ce n’est pas trop ma tasse de thé mai en regardant un peu je vois que tu définis la variable wrdDoc et ensuite tu utilise ActiveDocument.

    As-tu essayé en remplaçant ActiveDocument par wrdDoc ? (en vert dans le 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
      Set wrdApp = CreateObject("Word.Application")
      Set wrdDoc = wrdApp.Documents.Open("C:\Documents and Settings\Administrateur\Bureau\modèleetiquette.doc")
      wrdApp.Visible = True
        'wrdDoc.Select
      ActiveDocument.MailMerge.OpenDataSource Name:="C:\Documents and Settings\Administrateur\Bureau\Anciens élus.xlsm" ', SQLStatement:="SELECT * FROM `Feuil3$`"
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                 .FirstRecord = wdDefaultFirstRecord
                 .LastRecord = wdDefaultLastRecord
            End With
            .Execute Pause:=False
        End With
    Sinon s’il y a une âme charitable pour jeter un petit coup d’œil.
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bon alors pour finir ce matin j'arrive au boulot, j'essaye et ça marche >_<
    oooook.
    Franchement je ne sais pas ce qui a changé entre temps mais bon.

    Et hier soir chez moi j'ai repris le code en essayant de couper dedans ce qui me paraissait inutile et en m'inspirant du code des personnes qui m'ont aidé ici et voici ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim wdApp As Word.Application
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open "C:\Documents and Settings\Administrateur\Bureau\modèleetiquette.doc"
    .ActiveDocument.MailMerge.OpenDataSource Name:="C:\Documents and Settings\Administrateur\Bureau\Anciens élus(2).xlsm", sQLStatement:="SELECT * FROM [Feuil3$]"
    .ActiveDocument.MailMerge.Destination = wdSendToNewDocument
    .ActiveDocument.MailMerge.Execute
    End With
    carrément plus clair non ?

    a+

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Effectivement c’est plus clair, c’est du bon boulot car il n’est jamais facile de supprimer tout ce qui est inutile des macro enregistrée.

    Content d’avoir pu t’aider.

    RESOLU ?
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2007, 19h18
  2. [C#] création de checkbox dynamiques
    Par wayak3 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 13/12/2006, 08h12
  3. [Struts]Création dynamique de checkbox
    Par joy5 dans le forum Struts 1
    Réponses: 27
    Dernier message: 02/05/2006, 16h32
  4. [C#] Création dynamique checkbox
    Par diaboloche dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/02/2006, 11h44
  5. [C#] Création dynamique de checkbox
    Par nightsdarkangel dans le forum Windows Forms
    Réponses: 18
    Dernier message: 16/05/2005, 18h00

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