cs_malika_i
Messages postés38Date d'inscriptionmercredi 20 juin 2007StatutMembreDernière intervention29 juin 2007
-
20 juin 2007 à 20:12
cs_Nicko11 -
21 juin 2007 à 22:38
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..
cs_malika_i
Messages postés38Date d'inscriptionmercredi 20 juin 2007StatutMembreDernière intervention29 juin 2007 21 juin 2007 à 21:51
ç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
fiko81
Messages postés381Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention 5 septembre 20103 20 juin 2007 à 20:22
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 />
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 20 juin 2007 à 21:29
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
fiko81
Messages postés381Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention 5 septembre 20103 20 juin 2007 à 21:35
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 />
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 20 juin 2007 à 21:48
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...
fiko81
Messages postés381Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention 5 septembre 20103 20 juin 2007 à 22:05
"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 />
cs_malika_i
Messages postés38Date d'inscriptionmercredi 20 juin 2007StatutMembreDernière intervention29 juin 2007 20 juin 2007 à 22:11
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..)
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 20 juin 2007 à 22:18
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...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 20 juin 2007 à 22:19
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 ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 20 juin 2007 à 22:34
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
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
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 20 juin 2007 à 22:37
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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 20 juin 2007 à 22:42
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