Chechbox sur excel et bouton

Résolu
Signaler
Messages postés
38
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
29 juin 2007
-
 cs_Nicko11 -
Bonjour,

Je souhaite mettre tous mes contrôles sur une feuille excel (et non pas un formulaire). Mais je n'arrive pas à paramétrer mes checkbox (aprés de maintes recherches sur le web).
Voici mon pb = si mes checkbox sont cochés et que je clique sur un bouton, une formule est lancée. Pour être plus claire voici mon code (qui ne fonctionne pas...):

Sub CalculRDT_Click()
Dim CAC40 As Checkbox
Dim Nasdaq100 As Checkbox
Dim Nikkei225 As Checkbox
Dim DowJones30 As Checkbox
'Création d'une feuille intitulée "Rendements de l'étude"If CAC40.Value True Or Nasdaq100.Value True Or Nikkei225.Value = True Or DowJones30 = True Then
Sheets.Add.Name = "Rendements de l'étude"
Else: MsgBox "Veuillez selectionner au moins un indice"
End If

Avez-vous une idée de mon erreur? Je pense que VBA ne reconnait pas mes checkbox mais je n'arrive pas à les paramétrer (j'ai même modifier les noms dans chaque propriété)...

Merci par avance à ceux qui éclaireront ma lanterne..

42 réponses

Messages postés
38
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
29 juin 2007

ça y est, j'ai enfin trouvé une résolution à mon pb!
je suis parti de la solution de Julien237 où il faut associer une cellule(cachée) à chaque checkbox, donc voici mon code (pour les intéressés ou futurs intéressés) :

Sub CalculRDT_Click()If Sheets("Données").Range("G3").Value True Or Sheets("Données").Range("g4").Value True Or Sheets("Données").Range("g5").Value = True Or Sheets("Données").Range("g6") = True Then
    Sheets.Add.Name = "Rendements de l'étude"
    Sheets("Rendements de l'étude").Range("A1:a474").Value = Sheets("Données").Range("A1:a474").Value
Else: MsgBox "Veuillez selectionner au moins un indice"
End If


End Sub
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Bonsoir,

Dans ton code tu ne fais qu'instancier tes checkbox et en aucun cas tu utilise une checkbox qui aurait put être renseigné par qqun.
Si tu utilise un formulaire pour tes checkbox : va chercher leur valeur dessus. Sinon il te faut de toute façon que tes checkbox soient qqpart

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
38
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
29 juin 2007

Merci pour ta réponse Fiko

Mais vu que je n'utilise pas de formulaire, comment faire? où  "paramétrer" mes checkbox?
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Attention fiko, il n'instancie rien du tout !
Ton code ne crée pas de checkbox, il ne crée que des variables pointeurs vers des objets checkbox potentiels qui ne pointent pour le moment vers rien du tout...
Apparement tu ne peux pas récupérer d'objet CheckBox de celles placées sur une feuille, mais tu peux toutefois utiliser leurs valeurs : tu dois lier ta CheckBox à une cellule (Clic droit dessus, format, cellule liée), éventuellement cacher ces cellules et les nommer pour plus de facilités, puis ensuite tu peux faire :
If Range("CAC40") Or Range("Nadasq100")....
(En supposant que tu as nommé tes cellules ainsi...)

Petite remarque en passant, mettre
If xxx = True Then

Revient exactement au même que
If xxx Then

<hr size="2" width="100%" />Julien.
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Avant de créer ta feuille tu réalises un test : If CAC40.Value True Or Nasdaq100.Value True Or Nikkei225.Value = True Or DowJones30 = True Then

Alors soit ces checkbox sont sur une feuille excel dans ce cas tu peux tester leur valeur sans les redéclarer (et il ne faut surtout pas faire ça car par défaut, à la déclaration, les checkbox ont la propriété value = false) :
If Le_Nom_De_Ta_Feuille.CAC40.Value = true ....

Soit ces checkbox sont dans un formulaire... Mais ce n'est pas le cas
Ce que j'essaye de te dire c'est que pour tester la valeur de tes checkbox, il faut qu'elles existent... Non ?
 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Poste croisé
Merci de m'avoir repris (je suis en plein vb .net)

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Au fait,
Je crois que c'est elle et pas il...

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Oups pardon pour elle, c'est tellement rare par ici

De rien, mais c'est pareil avec du .Net

Mais heu... Chez moi j'ai beau essayer d'a peu près toutes les manières, ma checkbox n'est pas accessible tel quel depuis mon code... Feuil1.CheckBox1 n'existe jamais quoi que je fasse...
Ce qui n'est pas vraiment étonnant, Feuil1 est une instance de la classe Worksheet, pas d'un type dérivé, on ne peut donc pas lui ajouter des propriétés, champs... comme on le ferait dans le cas d'un form en mode design. En mode design, on crée un nouvel objet héritant de la classe Form (ou UserForm pour vba) et auquel on peut effectivement ajouter tous les champs et propriétés que l'on veut et donc voir apparaitre un MyForm.CheckBox1 dans l'intellisense...
Une chose pire encore :  Lorsque tu utilise les librairies VBA depuis Visual Studio 2005 par exemple, la majorité des objets apparaissant comme Classes dans l'explorateur d'objets d'excel, apparaissent ici comme Interfaces, et c'est le cas de notamment Worksheet. Encore bien plus impossible de lui ajouter un champs quelconque...

<hr width="100%" size="2" />Julien.
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
"Feuil1.CheckBox1 n'existe jamais quoi que je fasse"

Si tu te plasses sur la feuil1 sur laquelle tu as déposer un checkbox nommé checkbox1 : ça marche et tu peux même tester la valeur 'value'.
(Testé sur excel + vba 2003) (maintenant on ne parle peut-etre pas de vba... à voir)

voilà le code : une feuille excel (feuil1) + commandbutton1 + checkbox1
Private Sub CommandButton1_Click()
    MsgBox Feuil1.CheckBox1.Value
End Sub

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Attention, sur un UserForm, c'est bien un contrôle de type TextBox, sur une feuille, c'est un OLEObject...

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
38
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
29 juin 2007

Merci pour vos réponses,

Mortalino,
Je n'arrive pas à utilisé OLEObject, sais-tu comment je pourrais m'en servir pour mes checkbox?

Sinon, ma macro marche correctement sur un userform mais comme précisé précédemment, jai mis mes checkbox sur une feuille excel pour plus de clarté dans mon projet (assez lourd..)
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Argh...
Test sur ma machine avec Office 2007, je confirme que ça ne marche pas, d'ailleurs le nom par défaut de la checkbox est "Case d'option 1" avec des espaces et une apostrophe... vraiment pas un identifieur... J'ai beau parcourir tout l'intellisense, pas moyen de trouver mon controle...
Par contre test sur le pc familial avec Office 2000 et là ça marche en effet...
Mes excuses pour mon entêtement...

<hr width="100%" size="2" />Julien.
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Mouaip, moi non plus je n'y arrive pas...
D'ailleurs Feuil1.OLEObjects.Count me renvoie 0 quels que soient les contrôles sur ma feuille... Tu es sur de toi Mortalino ?

<hr width="100%" size="2" />Julien.
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Y'a pas à s'excuser par contre c'est bon à savoir que le pack office 2007 reprend la philosophie de .net...
Merci pour l'info

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Dim Obj as oleobject

For Each Obj In Worksheets("NOM_FEUILLE").OLEObjects
    If TypeOf Obj.Object Is MSForms.CheckBox Then
        MsgBox Obj.Name
        MsgBox Obj.Object.Value
    End If
Next Obj

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Ah ! Trouvé sur Office 2007 :

Feuil1.Shapes("Case d'option 1").OLEFormat.Object.Value

On peut pas dire que ce soit des plus pratique... mais bon...
(Je suis en train de me rendre compte que je confond checkbox et radiobutton depuis le début... 'fin dans les grandes lignes ca revient au même mais bon ^^)

Donc, si tu travaille en Office 2007 et/ou que Feuil1.LeNomDeTonControle n'est pas accessible, tu peux faire comme ceci :

Dim CAC40 As CheckBox
Set CAC40 = Feuil1.Shapes("Nom de la case à cocher CAC40").OLEFormat.Object

<hr width="100%" size="2" />Julien.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Heu je crois que c'est MsgBox Obj.Object.Name

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Mmh, ben chez moi

    Dim Obj As OLEObject
    For Each Obj In Feuil1.OLEObjects
        If TypeOf Obj.Object Is MSForms.CheckBox Then
            MsgBox Obj.Object.Name
            MsgBox Obj.Object.Value
        End If
        Beep
    Next Obj

Ne fait même pas beep (avec Office 2007), j'ai bien mis des checkbox...
<hr width="100%" size="2" />Julien.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Dim Obj As OLEObject
    For Each Obj In Feuil1.OLEObjects
        If TypeOf Obj.Object Is MSForms.CheckBox Then
            MsgBox Obj.<strike>Object.</strike>Name
            MsgBox Obj.Object.Value
        End If
        Beep
    Next Obj

Avec la modif en rouge, fonctionne sous 2003

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Julien237 :
en VBA 2007, la bibliothèque MSForms n'y est pas d'"office"  (jeu de mot, Ramucho).

Fait outils, références, parcourir, et regarde dans le doossier System32 la librairie FM20.dll

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA