si...et si...ou bien si...et si...alors

Toutou

XLDnaute Occasionnel
Bonjour à tous,

j'ai un petit problème en VBA: je voudrais créer une maccro avec une boucle si un peu particulière:

pour un même résultat, j'ai plusieurs conditions possibles. Il m'est tout a fait possible d'utiliser pour chaque cas la boucle:
si et si alors; mais ayant une vingtaine de possibilité, Je voudrais (pour simplifier et raccourcir mon code) réaliser une boucle du type:
si... et si... ou si...et si... etc alors
....
end if

Je voulais savoir si une telle boucle existait?
Qulqu'un(e) peut-il(elle) m'aider?
Merci d'avance,
a +
Toutou ;)
 

CBernardT

XLDnaute Barbatruc
Bonjour Toutou et le forum,

Si tu voulais nous mettre un petit exemple de ton fichier et nous expliquer un peu ton problème, alors pourrons-nous peut-être t'aider et y voir un peu plus clair sinon j'ai peur que tu n'ais pas de réponse.

Cordialement

Bernard
 

anuky

XLDnaute Occasionnel
Bonjour toutou et le forum,

Peut-tu joindre un fichier avec un exemple des données que tu as, des résultats et les conditions détaillées que tu veux tester sur tes données car selon le type de donnée a traiter les condition ou le résultat recherché, on peut utiliser différentes solutions type Iif, Switch, if avec and et or...

A+
 

Toutou

XLDnaute Occasionnel
Veuillez m'excuser,
plus précisément, mon problème est le suivant:
sur une feuille de calcul excel, j'ai 5 toggle button qui me permettent de masquer ou de faire apparaitre des colonnes.
Mais certaines colonnes sont gérer par plusieurs togglebutton si bien que si l'un est enfoncé et pas l'autre, la colonne reste masquée alors qu'elle devrait etre affichée. En bref, je voudrais les faire fonctionner indépendamment les uns des autres...
je pensais donc faire une boucle comme:

si togglebutton1 = vrai and togglebutton2 =Vrai
ou si togglebutton1 = vrai and togglebutton2 =faux alors

D'avance merci
Toutou
 

Toutou

XLDnaute Occasionnel
Excusez moi, j'ai oublié de jindre un fichier,
le voici donc , a plus
Toutou [file name=Classeur1_20051124121501.zip size=14637]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur1_20051124121501.zip[/file]
 

Pièces jointes

  • Classeur1_20051124121501.zip
    14.3 KB · Affichages: 28

Exfan

XLDnaute Nouveau
Bonjour,
en fait cela ne me semble pas une boucle précisément, mais un arbre de décision.

tu as différents résultats en 'booléens', avec une décision ou action en issue.

je me demande, puisque les booléns à tester sont extérieurs à l'objet en cours (dans le code donc d'un bouton untel),
si il ne faut pas 'extraire' cet arbre de décision du bouton m^me.

à ce moment peut-être mettre autant de variable globales _résultats que de boutons (tu aurais mis des cases à cocher c'est idem...).

que tu prends en compte (execution d'une fonction Call identique dans chaque bouton) dans une sub unique.
l'évènement concerné serait le click d'un bouton..

le fait est que tu n'aurais qu'un code de décision

if çà et çà then
faire çà
else
if a ou b then
faire a ou b
else...etc

end if ad'hoc

çà c'est soit l'objet peut être tester (appuyé ou pas), soit une globale qui mémorise le çà...

en fait les boutons ne 'marquent' que l'état qu'il sont
et une routine analyse tous les cas...écrit dans une même Sub, appelée dès qu'un bouton <change> d'état

c'est pas du 100% sûr, mais je ferais comme çà.
l'idée est de gérer à l'extérieur l'ensemble des états.
a+
 

Toutou

XLDnaute Occasionnel
Bonsoir et merci Exfan;
mais je ne suis pas sûr d'avoir bien compris ce que tu m'explique.

Si je ne me trompe pas, tu me suggère de créer une variable pour chaque évènement, càd, pour une action à réaliser quand un bouton est cliqué; puis 'd'appeler' ces variables dans une seule boucle?

Je suis vraiment désolé, mais tout ceci me paraît encore floue...

Je n'ai pas assez de vocabulaire technique.

Merci tout de même pour ton aide, @ +
Toutou
 

Excel_lent

XLDnaute Impliqué
Bonjour Toutou, Exfan
Bonjour tout le monde,

Si j'ai bien compris, cela devrait t'aider.
Je te laisse le soin de trouver une solution pour éviter tant de répétitions. [file name=ShowHide.zip size=14208]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ShowHide.zip[/file]
 

Pièces jointes

  • ShowHide.zip
    13.9 KB · Affichages: 26

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Toutou, Bernard, anuky, Exfan et Excel_lent :)

J'avoue ne pas avoir trop bien compris ce que tu souhaites faire, Toutou :S

Je reprends tes ToggleButtons :

1) H:I / K:V / Z / AB:AD / BG:BK, il les montre (non enfoncé) ou les cache (enfoncé) et, pour celui-là, il n'y a pas de souci car il n'y a pas d'inter-action avec les autres...

2) AE:AH / AS:AW, plus délicat car il y a inter-action avec le TB3 pour Les colonnes AE:AH ! Question : quel ordre de préséance ?
Je m'explique pour AE:AH :
Imaginons que tous les TBn soient non enfoncés, donc TB2 est non enfoncé et les colonnes AE:AH (entre autres) devraient être cachées.
Quand tu cliques sur TB3 qui doit alors rendre visible ces colonnes AE:AH (si utilisé seul), que doit-on faire ???
En effet, TB2 les a cachées et TB3 ? Doit-il les rendre visibles dans ce cas ?

Je n'ai pris que l'exemple de TB2 car il a des colonnes communes avec TB3 seulement, car si on creuse :

-> Pour TB1 = Pas d'inter-action ;
-> Pour TB2 = inter-action avec TB3
-> Pour TB3 = inter-action avec TB2, TB4 et TB5
-> Pour TB4 = inter-action avec TB3 et TB5
-> Pour TB5 = inter-action avec TB3 et TB4 !!!

Question : Dans quels cas tes TBn doivent-ils agir ou non ?

Je te laisse cogiter ;)

Amicalement
Charly
 

Toutou

XLDnaute Occasionnel
Bonjour, Bernard, anuky, Exfan et Excel_lent ,
Bonjour Charly2,

Mon souci est justement là:
En effet le TB1 ne me pose pas de problème, je n'aurais pas du le mettre. Mais pour les autres, il y a des interactions que je voudrais pouvoir controler:

si les TB 2, 3,4 et 5 sont à l'état 0 soit NON enfoncés, toutes les colonnes concernées doivent DISparaître.
si les TB 2, 3,4 et 5 sont à l'état 1 soit enfoncés, toutes les colonnes concernées doivent APparaître.

Supposons que la colonne 'M' soit controlée par les TB 2 et 3 à la fois,

si TB2= True et TB3=True alors 'M' devrait apparaître

si TB2= True et TB3=False alors 'M' devrait apparaître

si TB2= False et TB3=True alors 'M' devrait apparaître


Mais si TB2= False et TB3=False alors 'M' devrait disparaître.

En somme les colonnes communes à plusieurs boutons ne devrait disparaitre que si tous les TB correspondant ne sont pas enfoncés ce qui n'est pas le cas, il semble que les TB fonctionnent en Maître-Esclave en fonction de l'odre dans lequel leur code a été écrit;

est-il possible d'y remédier, de les faire fonctionner de manière totalement individuelle, indépendante?


Merci d'avance, @ +
Toutou
 

Exfan

XLDnaute Nouveau
bonjou,
je reprends donc mon idée...
il faut d'abord mettre au point ton arbre de décision

si tb1 et/ou tbn alors faire
si etc...

qu'est ce qu'on va tester ?
a mon avis l'état du bouton (rendu par une variable golable pour chaqun d'eux de type booleen

cela reviens à faire
si var-tb1 = vrai et/ou var-tb2=Faux alors faire...

quand exécuter ce code?

là il faut que dès que l'on actionne un bouton, donc sur l'évènement on change me semble-t-il, sur ce point un participant au forum pourra confirmer ou améliorer.

bref, action sur bt1 = var-bt1 = état du bouton en booléen
etc...

sur un On change, appeler une routine qui fait l'arbre de décision...
if var-bt1...

juste un problème peut-être ? le bouton que tu viens d'activer ou de désactivé, doit rendre son état avant l'éxécution de la routine...
je pense que la variable globale sera affecté avant le On change...

c'est une idée d'articulation générale à peaufiner surement.
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Toutou, Bernard, anuky, Exfan, Excel_lent, la Terre, l'Univers :)

Toutou, je suis persuadé que tu as moyen de faire avec moins de ToggleButtons, mais ça m'a amusé de le faire tel quel.

Donc voilà ! Je te propose un fichier qui tient compte de ce que tu souhaites faire avec tes boutons, enfin... je pense ;)

Tiens nous au courant...

Amicalement
Charly [file name=Toutou.zip size=17581]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Toutou.zip[/file]
 

Pièces jointes

  • Toutou.zip
    17.2 KB · Affichages: 22
  • Toutou.zip
    17.2 KB · Affichages: 28
  • Toutou.zip
    17.2 KB · Affichages: 28

Excel_lent

XLDnaute Impliqué
Bonsoir Toutou, Charly2,
Bonsoir à tous,

Je viens de passer un petit moment sur la théorie, pas sur la programmation.
Ai-je bien compris ton problème ? Si oui, il te restera à compléter les macros.

J'ai récupéré ton fichier Charly2 et vais me plonger dans son étude. Tu nous apportes toujours du grain (de qualité) à moudre.

Bonne soirée et bon WE à tous [file name=ShowHide_20051126195454.zip size=21721]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ShowHide_20051126195454.zip[/file]
 

Pièces jointes

  • ShowHide_20051126195454.zip
    21.2 KB · Affichages: 22

Toutou

XLDnaute Occasionnel
Bonjour à tous,
comment allez vous en ce début de semaine?
Merci à tous de vous être penchés sur la question.
Charly2, merci pour ta proposition mais je me permets toutefois de me tourner vers toi pour te poser quelques questions.
En effet, mes capacités et connaissances en vba n'étant pas les tiennes, je voulais savoir si tu pouvais m'eclaircir sur le role de certaines propriétés ou fonctions que tu as utilisées et que je ne connaît ni ne comprends::unsure: :eek: :pinch: :sick:
donc voilà: que signifie exactement...

-> Selection.Placement = xlMove / xlFreeFloating ?

-> Selection.PrintObject = True / False ? (n'est ce pas la possibilité de faire apparaître ou non le togglebutton lorsqu'on imprime la page?)

-> Shapes ('') ?


D'avance merci, Bonne semaine à tout le forum,
@ +
Toutou ;)
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Toutou, bonjour à toutes et à tous,

Oups :S !!! J'avais remarqué que lorsque tes colonnes étaient cachées, tes TB suivaient les cellules. Alors j'ai redéfini le format de tous tes TB pour qu'ils ne s'impriment pas avec la page, d'une part, et pour qu'ils ne soient pas liés aux cellules d'autre part.
Par mégarde, j'ai dû déclencher l'enregistreur de macro !!! Tu peux entièrement supprimer la macro1 qui ne sert à rien !!! (Je ne l'avais pas remarquée).

Sinon tu peux regarder l'aide pour Shapes, c'est une collection d'objets Shape (contrôles, images, etc.).

Pour obtenir les noms de tous les objets Shape contenus dans ta feuille, tu peux faire :
  Range('A1').select
  With ActiveSheet
    For i = 1 To .Shapes.Count
      Selection=.Shapes(i).Name
      Selection.Range('A2').select
    Next
  End With


Placement est une propriété de Shape :
xlMoveAndSize = Déplacer et dimensionner avec les cellules
xlMove = Déplacer sans dimensionner avec les cellules
xlFreeFloating = Ne pas déplacer et dimensionner avec les cellules.

PrintObject sert à déterminer si l'objet est à imprimer ou non.

En espérant avoir été clair :)

Amitiés
Charly

Message édité par: Charly2, à: 28/11/2005 13:37
 

Statistiques des forums

Discussions
312 338
Messages
2 087 398
Membres
103 537
dernier inscrit
alisafred974