Spinbutton et checkbox

  • Initiateur de la discussion Sebbb
  • Date de début
S

Sebbb

Guest
Bonjour à tous,
Voilà, vous m'avez déjà bien aidé auparavant (merci à tous).
J'avance dans mon application et certaines choses que je croyais règlé me pose à nouveau problème!
Pour être plus clair, je vous ai joint un petit fichier.
Pour simplifier les choses, je n'ai mis que deux colonnes dans mon tableau, la première nommée CODE la seconde, ACTION.
En cliquant sur le bouton de la feuille1 un userform aparaitra.
Vous verrez qu'en cliquant sur le spinbutton vous ferez défiler les codes 'Simu'. Dans vba, ce que j'ai essayé de faire, c'est que si plusieurs lignes ont le même code je ne me déplace que sur la première. Par contre, mes checkbox tiennent compte de ces lignes.


ex : Ligne1 : Simu3 E
Ligne2 : Simu4 A
Ligne3 : Simu4 B
Ligne4 : Simu4 C
Ligne5 : Simu5 D

Dans la textbox1, je vois défiler Ligne1, Ligne2 puis Ligne5.
Par contre quand je suis sur ligne2, doivent être cochés les checkbox 1,2 et 3 correspondant aux actions A,B,C.

Je pensais y être arrivé mais hélas, ce n'était qu'une illusion.
Pouvez-vous m'aider s'il vous plaît.

Merci de votre aide
Sébbb :lol: [file name=spinbutton.zip size=14091]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/spinbutton.zip[/file]
 

Pièces jointes

  • spinbutton.zip
    13.8 KB · Affichages: 37
  • spinbutton.zip
    13.8 KB · Affichages: 33
  • spinbutton.zip
    13.8 KB · Affichages: 32

Jam

XLDnaute Accro
Bonjour Sebb,

J'ai jeté un coup d'oiel à votre code et je dois dire que je ne saisi pas bien le but recherché. Ce que je crois avoir compris c'est qu'en fonction de la simul choisie (1 à 4), les checks boxs (A à F) doivent être cochées. Est-ce bien cela ?
Ou bien, faut-il si on passe de la ligne2 à la ligne3 n'avoir que les checkbox 2 et 3 cochées ?

Dans tous les cas le code peut-être simplifié sur plusieurs points:
- Utiliser les With...End With
exemple
au lieu de
CheckBox1.Value = True
CheckBox1.Enabled = False
mettre
With CheckBox1
.Value=True
.Enabled=False
End With

- Utiliser les Case Select...End Select
Dans votre cas cela évite de tester tous les blocs If...End If systématiquement
- Dans les deux SpinButton Down et Up sous la ligne commentaire 'Ligne1 dans les deux cas vous reprenez la même procédure de test . Celle-ci pourrait-être déportée dans une procédure (Sub) afin d'éviter de répéter le même code ce qui n'est jamais bon.
- Indentez votre code cela donne aussi une meilleure lisibilité.
- Pour reprendre un point qui m'est cher et à _Thierry aussi, déclarez la variable j en Integer ;)
- Dernière chose, les Checkboxes ne sont jamais réinitialisée entre deux loop, ce qui fait que leur état (Enabled ou Value) ne change pas exemple lorsqu'on passe de Ligne1 à Ligne2, E qui correspond à Checkbox6 ne sera pas remis dans l'état Value=False et Enabled=True.

Bon, dans l'attente de lire votre réponse, j'espère que ces quelques 'trucs' vous serons utiles.

HTH
MrExcel
 

Jam

XLDnaute Accro
Re-Bonjour Sebb,

Juste en relisant mon post, je viens de penser à un autre truc:
- Copier la plage en mémoire dans un tableau (Array) et travailler non pas avec les valeurs des cellules mais celles du tableau. Ce n'est pas beaucoup plus compliqué (deux lignes suffisent pour créer le tableau en mémoire) et c'est beaucoup mais alors beaucoup plus rapide que de lire systématiquement les cellules de la feuille.

Bon, mais là j'm'égare peut-être un peu, cette optimisation pouvant intervenir dans un second temps.

HTH
MrExcel
 
S

Sébbb

Guest
Bonjour Mr Excel,
Tout d'abord merci de m'apporter votre aide.

Un p'tit point important pour la compréhension de ce qui suit, les données Excel ne sonrt pas visible par l'utilisateur (userform en plein écran).

En amont de cette phase de lecture, une phase de saisie a lieu.
Simu s'incrémente au fur et à mesure des saisies.
La première saisie s'appelle Simu1. Lors de cette saisie, l'utilisateur coche toutes les actions associées à celle-ci au choix parmi les 6 proposées (checkbox). Quand il valide la saisie, Simu1 se place dans la colonne CODE et les actions dans la colonne ACTION. Si pour Simu1 j'ai trois actions associées, j'aurais 3 lignes :

Ex: Simu1 A
Simu1 D
Simu1 F

S'il veut effectuer une autre saisie, Simu2...
Cette présentation en répétition de lignes m'est nécéssaire pour des calculs ultérieurs.

Une fois saisie, je donne la possibilité à l'utilisateur de vérifier si ce qu'il a entré correspond à ce qu'il voulait.
Ainsi, à l'aide du spinbutton, il voit dans le userform1 Simu1 et doivent être cochées les actions qu'il lui avait associé (ici A,D,F)
Et il doit pouvoir visualiser toutes les Simu avec leurs actions (cochées).


Dans votre première réponse, vu mon niveau, j'ai pas tout compris ou ne sait pas comment faire.
- Pour la réinitialisation, vous parlez de loop, est-ce que ce que vous entendez par cela la pression sur le spinbutton?
- Déporter dans une procédure pour éviter les répétitions, je ne sais pas faire.
'- Indentez votre code cela donne aussi une meilleure lisibilité.' qu'est-ce que ça veut dire?

Ce qui me semble être la solution de mon problème est la réinitialisation des checkbox, pouvez-vous m'expliquer comment faire SVP?

Voilà, je suis concient qu'il y a beaucoup de chose dans mes interrogations, mais je ne demande qu'à apprendre.

Merci pour votre aide

@+ Sébbb
 

Hervé

XLDnaute Barbatruc
Bonjour le forum

Bonjour Sébbb
Bonjour Mr EXCEL

Je me permet d'intervenir, ayant un peu d'expérience dans les simus :)

Sébbb, dans l'ancien forum, on avait dit que les actions ce présenterai en colonne, pour ainsi pouvoir faire des boucles plus facilement et renvoyer les infos vers les chekbox par l'intermédiaire des tags.

Apparement tu as changé d'avis, c'est comme tu veux, lol

Regarde en pièce jointe j'ai créer une macro public pour gérer les actions par boucle.

En tout cas, je suis content de te croiser de nouveau.

A plus
[file name=spinbutton2.zip size=15820]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/spinbutton2.zip[/file]
 

Pièces jointes

  • spinbutton2.zip
    15.4 KB · Affichages: 45

Jam

XLDnaute Accro
Bonjour Sebbb,

J'vais pas avoir beaucoup de temps aujourd'hui mais j'vais essayer d'apporter quelques éclairages à mes propos.
- indenter cela veux dire ça:
Code:
if mon code 1
code
code
if mon code 2
code
code
Else
code
End if
End If
ça c'est pas clair alors en indentant cela donnera :
Code:
if mon code 1
   code
   code
   if mon code 2
      code
      code
   Else
       code
   End if
End If
On voit mieux ou commence et termine les bouts de code.

- Par 'déporter' dans une procédure j'entend ne pas réécrire plusieurs fois le même code ce qui signifie mettre dans une procédure (Sub ou Function) des bouts de codes qu'on appelera quand on en a besoin au lieu d'écrire plusieurs fois la même chose.
- Pour la réinitialisation (mais c'est peut-être lié à ma mauvaise compréhension du but recherché) c'est que les checkbox entre plusieurs appels conservent le même état (Enabled ou pas). Je pense donc qu'il faut dans un premier temps toutes les décocher avant de leur réattribuer un état correspondant à la réalité voulue.

Concernant le but du programme je ne vais pas pouvoir m'y pencher sérieusement aujourd'hui (taf oblige), mais , j'essaierai d'y jeter un coup d'oeil quand même.

Bon courage (et j'espère que mes explications sont plus claires).

Message édité par: mrexcel, à: 02/03/2005 10:03

Message édité par: mrexcel, à: 02/03/2005 10:04

Message édité par: mrexcel, à: 02/03/2005 10:04
 
S

Sebbb

Guest
Re-salut Mr Excel,
Salut Hervé,
Et oui, me revoilà.L'apprentissage fait que je ne suis au boulot qu'un mois sur 2 d'où mes longues absences car pas d'accès internet pendant période de cours :( .

Moi aussi, je suis content de te relire Hervé. Surtout qu'à première vue, ta réponse semble convenir.

Ton aide et les conseils et explications de Mr Excel vont me permettre d'avancer encore dans mon application.

Mr Excel, la réinitialisation des checkbox me sont utiles, je ne savais pas comment le faire.Je vais regarder le fichier d'Hervé mais il me semble au vu du résultat obtenu qu'il a mis en place cette procédure (à voir).

Indenter, j'ai compris, merci pour l'explication.

Déporter, j'ai compris aussi, reste à voir comment rappeler la procédure
J'ai essayé Sub L1..........End sub dans module puis L1 sous 'Ligne1
Je vais voir si ca marche.

Pour le but du programme c'est vrai que c'est pas facile à comprendre car vu de l'extérieur.

En tout cas, merci à vous deux et à bientôt sur ce fil ou un autre.

@+ Sébbb
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Sebbb, Hervé, MrExcel, le Forum

Attention Aussi à un Truc... et pas un Barbatruc !!! mais un TrucYaPaBon...

On ne fait pas (jamais) ceci :

Top De Module du UserForm1
Code:
Dim c As Range
Dim j 'déclaration de la variable i
Dim L As Integer

Et puis un peu plus bas je vois dans une Procédure :
Code:
Public Sub renvoidonnée()
Dim c As Range
Dim i As Byte
Dim renvoi As String

Y a pas bon, mais alors pas bon du tout !!!

Non seulement pour cet exemple il me semble qu'aucune variable n'a un besoin d'être déclarée Public niveau Private Module... Et en plus il y a doublon de déclaration, arf sur une grosse applie ça pardonne pas un truc comme ça !

En fait, on ne déclare des Variables niveau Public que lors d'un réél besoin, et même si on a besoin d'un 'i' dans chaque procédure, et bien on le déclarera dans chaque Sub 'Dim i As Integer', même si c'est fastidieux, et jamais (par faignantise) une seule fois en Top de module...

Ce n'est pas du tout fait pour ceci, mais pour garder en mémoire la valeur de la variable pendant toute la durée de vie du UserForm (UserForm dans ce cas de Figure, mais aussi pendant toute l'ouverture d'Excel dans le cas d'une variable Public dans un Module Public...)

Voilà en espérant que ceci vous évitera des sérieuses prises de tête un jour...

Bonne Fin de Journée
@+Thierry