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. 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
  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,
    Je recupere les fichiers et je vous tiens au courant.

    A+
    0
    1. ok merci pour votre aide
      0
  4. 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,

      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,

        Je repete la question!!
        0
        1. non pas dans la même feuille
          0
      2. 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,
          Et ce bouton est bien sur la feuille de vos Comboboxs?????
          0
          1. il est lancé via un bouton auquel j'ai associé cette macro...
            0
            1. Re,

              Ce morceau de code est lance comment??
              0
              1. Re

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

                  Hélas ça ne marche toujours pas... Cela ne fait rien ou y a t-il une erreur.
                  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,

                        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. 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. 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