Excel vba checkbox et combobox

bonjour
alors voila j'ai un problème que je n'arrive pas régler depuis quelques jours
grâce à une macro j'ai un certain nombre de checkbox créées dynamiquement grâce a OLEObject, chaque checkbox est associée à une combobox que j'initialise sur visible = false mon but est donc d'afficher la combobox qd ma checkbox est cochée j'ai essayé de plusieurs façon mais je n'arrive pas à obtenir le résultat voulu si quelqu'un peut m'aider...
merci

voila un bout de mon code

For i = 7 To total_ligne_tcd

With ActiveSheet.Range("G" & i)
Set c = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Check Box.1", Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
c.Name = "CheckBox_" & i
End With

With ActiveSheet.Range("H" & i)
Set d = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Combo Box.1", Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
d.Name = "ComboBox_" & i
d.Visible = False

End With

ps : je travaille sous excel 2007 mais j enregistre en excel 2003 et je n'utilise pas de userform
Nextfig>

19 réponses

Résumé de la discussion

Le problème décrit est l'association entre des cases à cocher créées via OLEObject et des comboboxes initialisées invisibles, afin d’afficher la combobox associée lorsque la checkbox est cochée dans Excel 2007/2003. Plusieurs répondants proposent d’utiliser un événement de feuille, Private Sub checkbox1_Click(), ou dans un module tester l’état de l’OLEObjects et basculer la propriété Visible de la combobox associée. D'autres solutions évoquent la manipulation par noms d'objets (CheckBox2 et Combobox1) pour modifier la visibilité, ou le recours à des objets liés sur la même ligne, avec une compatibilité multi-version. En cas de variations selon l’environnement, certains indiquent que le comportement diffère entre Excel 2003 et 2007, et que la gestion des OLEObjects peut dépendre du mode de création dynamique.

Bobot (l’IA à votre service)
  1. Bonjour,

    VBA de le feuille ou vous avez cree vos objets:

    ex:

    Private Sub checkbox1_Click()
    ComboBox1.Visible = Not ComboBox1.Visible
    End Sub

    ou

    Dans un module:

    If Sheets(1).OLEObjects("CheckBox2").Object Then
    Sheets(1).OLEObjects("Combobox1").Visible = True
    End If

    A+
    1
    1. voila mon code entier

      Sub auto()

      Dim fichier1 As Variant
      Dim total_ligne_tcd As Integer
      Dim c As OLEObject
      Dim d As OLEObject
      Dim i As Integer
      Dim ligne As Integer

      fichier1 = Application.GetOpenFilename("Fichier (*.*), *.*")
      If fichier1 = False Then
      MsgBox "erreur de fichier Excel"
      Exit Sub
      End If
      Workbooks.Open (fichier1)
      Sheets("Smp99_Donnees").Select
      Sheets("Smp99_Donnees").Activate
      Sheets("Smp99_Donnees").Move _
      Before:=Workbooks("Classeur1.xls").Sheets(3)

      'Comptage du nombre d'arrets

      Sheets("Smp99_Donnees").Select
      ligne = 8
      dat = Cells(ligne, 2)
      Do While dat <> ""
      ligne = ligne + 1
      dat = Cells(ligne, 2)
      Loop
      total_ligne = ligne - 1
      Range("B8").Select

      'tableau dynamique

      Sheets("Smp99_Donnees").Select
      Range(Cells(7, 2), Cells(total_ligne, 40)).Select
      ActiveWorkbook.Names.Add Name:="tcd_tcd", RefersToR1C1:= _
      Range(Cells(7, 2), Cells(total_ligne, 40))
      ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
      "tcd_tcd").CreatePivotTable TableDestination:="Feuil2!R5C1", TableName:= _
      "Tableau croisé dynamique", DefaultVersion:=xlPivotTableVersion10
      Sheets("Feuil2").Select
      Cells(5, 1).Select
      ActiveSheet.PivotTables("Tableau croisé dynamique").AddDataField ActiveSheet. _
      PivotTables("Tableau croisé dynamique").PivotFields("Durée"), "Somme de Durée" _
      , xlSum
      With ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Type")
      .Orientation = xlRowField
      .Position = 1
      End With
      With ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields("Zone")
      .Orientation = xlRowField
      .Position = 2
      End With
      With ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
      "Evénement")
      .Orientation = xlRowField
      .Position = 3
      End With
      With ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
      "Commentaire")
      .Orientation = xlRowField
      .Position = 4
      End With

      ActiveWorkbook.Sheets("Feuil2").Select
      ligne = 7
      dat = Cells(ligne, 5)
      Do While dat <> ""
      ligne = ligne + 1
      dat = Cells(ligne, 5)
      Loop
      total_ligne_tcd = ligne - 1

      For i = 7 To total_ligne_tcd

      With ActiveSheet.Range("G" & i)
      Set c = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
      c.Name = "CheckBox_" & i
      End With

      With ActiveSheet.Range("H" & i)
      Set d = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
      d.Name = "ComboBox_" & i
      d.Visible = False

      End With
      Next

      End Sub

      j'ai essayé avec

      For i = 7 To total_ligne_tcd
      If ActiveSheet.OLEObjects("CheckBox_" & i).Object.Value = True Then
      ActiveSheet.OLEObjects("ComboBox_" & i).Object.Visible = True
      End If
      Next

      mais ca ne marche tjs pas
      0
      1. Re,

          For i = 7 To total_ligne_tcd
            If ActiveSheet.OLEObjects("CheckBox_" & i).Object.Value = True Then
              ActiveSheet.OLEObjects("ComboBox_" & i).Visible = True
            End If
          Next i
        


        A+
        0
        1. Re,

          Hélas ça ne marche toujours pas...j'ai aussi essayé en associant à ma checkbox une cellule qui récupère true or false et puis faire un test sur cette dernière mais toujours rien je ne comprend pas ce qui ne va pas :(

          merci de votre aide
          0
          1. Re,

            Hélas ça ne marche toujours pas... Cela ne fait rien ou y a t-il une erreur.
            0
            1. Re

              Cela ne fait rien... sans aucune erreur de compilation
              0
              1. Re,

                Ce morceau de code est lance comment??
                0
                1. il est lancé via un bouton auquel j'ai associé cette macro...
                  0
                  1. Re,
                    Et ce bouton est bien sur la feuille de vos Comboboxs?????
                    0
                    1. ce bouton est dans la première feuille de mon classeur, ensuite mon tableau croisé dynamique se crée dans la seconde feuille de ce dernier...la génération du tcd ainsi que des checkbox marche (et même celle des combobox qd je les mets en visible = true)
                      0
                      1. Re,

                        Je repete la question!!
                        0
                        1. non pas dans la même feuille
                          0
                      2. Re,

                        Il faut eviter ActiveSheet quand vous naviguez sur plusieurs feuilles

                         With WorkSheets("nom_de_votre_feuille")
                            For i = 7 To total_ligne_tcd
                              If .OLEObjects("CheckBox_" & i).Object.Value = True Then
                                .OLEObjects("ComboBox_" & i).Visible = True
                              End If
                            Next i
                          End With


                        A+
                        0
                        1. Re,

                          Est-t-il possible d'avoir votre fichier avec seulement la creation des objets et votre bouton plus son code (peut-etre que vos donnees sont "sensibles") comme vous l'avez actuellement

                          lien https://www.cjoint.com/ et copier le lien de votre fichier
                          0
                          1. Re,
                            Je recupere les fichiers et je vous tiens au courant.

                            A+
                            0
                            1. ok merci pour votre aide
                              0
                          2. Re,

                            Je vous ai un peu modifie votre fichier, a vous de voir.

                            Pour lancer: onglet Accueil----> Bouton Départ

                            https://www.cjoint.com/?BImnDBI4i06

                            A+
                            0
                            1. Tout d'abord je vous remercie pour l'effort fourni mais je pense qu'il ya un petit problème lorsque je lance avec le bouton départ ca ne marche pas
                              0
                            2. Re,
                              Chez moi ca marche en 2003 et 2007!!!!!
                              Ca ne fait rien du tout ou ......
                              0
                            3. Re,
                              ben en fait quand ca ouvre le fichier ca me met les checkbox dans le smp99_données (en plein milieu du grand tableau) et ca ne génère pas le tcd en gros programme ne s'effectue pas dans le classeur1...bizare
                              0
                            4. Re,
                              Je n'ai rien modife dans votre source a ces endroits. Je regarde.
                              0
                          3. Re,

                            essayez celui-ci, quelques modifs, mais pas significatives de votre anomalie

                            https://www.cjoint.com/?BImpnLWWamN
                            0
                            1. Re,
                              Toujours le même problème mais je vous remercie énormément pour l'effort que vous avez fourni je commence a voir comment il faut procéder
                              merci encore une fois
                              0
                            2. Re,
                              Quel EXCEL 2007 avez vous
                              0
                            3. oui
                              0
                            4. Re,
                              Pro. ou...
                              0
                            5. 2007 professional plus :p
                              0