XL 2019 Probleme de Checkbox et OptionBoutton.

Flnte

XLDnaute Nouveau
Bonjour,
Je créer un fichier excel pour calculer le tarif d'un monument. En fonction des options je peux polir ou non une pièce qui le compose. Ainsi lorsque l'on ouvre l'Userform1 si on double clic sur le label Semelle Avanton peut choisir les cotés que l'on souhaite polir. Sauf qu'en faite ce que j'ai dans mon userform2 c'est 6 checkbox qui se nomment CheckBoxDessus CheckBoxDerriere CheckBoxAvant CheckBoxDessous CheckBoxGauche CheckBoxDroit. Et pour chacun de ces checkbox j'ai des bouton option qui sont liés au CheckBox. Ainsi pour CheckBoxDessus j'ai OptionDessus100 OptionDessus75 OptionDessus50 et OptionDessus25. Pour CheckBoxAvant j'ai OptionAvant100 OptionAvant75 OptionAvant50 et OptionAvant25. Donc Pour chaque CheckBox je ne peux ensuite choisir que 1 optionbutton qui est lié. Par contre je peux choisir un OptionAvant liés à CheckBoxAvant mais aussi un OptionDessus liés à CheckboxDessus. E Or là dès que je selectionne un optionbutton si je sélectionne un autre liés à un autre checkbox cela annule le premier. Est-ce que quelqu'un sait résoudre cela car je bloque et je ne trouve pas de réponse?
 

Pièces jointes

  • test.xlsm
    161.6 KB · Affichages: 9
Solution
Voici en pièce jointe une proposition.
Normalement ça marche pour les quatre semelles.

J'ai désactivé la boucle d'attente de fermeture du UserForm2.
J'ai supprimé le "clic souris" qui ne me semblait pas utile et qui provoquait un "cling" assez agaçant.
J'ai laissé en commentaire les anciens morceaux de code qui ne sont pas utilisés.

Pour le code de polissage, j'ai ajouté des espaces entre les faces.
On peut les supprimer si tu veux un code en un seul morceau.

Je n'utilise pas la fonction GetTargetCell.


Remarque : dans l'appel de la macro OpenUserForm2 le deuxième argument n'est plus utile.
J'ai laissé OpenUserForm2 "Semelle Gauche", "Q2" mais OpenUserForm2 "Semelle Gauche" suffit.

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je pense qu'il faut regrouper les OptionButton liés entre eux dans une Frame (voir les deux exemples dans ton fichier en retour).

Remarque : on peut rendre le contour d'une Frame transparent. ;)
 

Pièces jointes

  • test.xlsm
    158.7 KB · Affichages: 4

Flnte

XLDnaute Nouveau
Merci de ton retour @TooFatBoy . J'ai voulu mettre dans les Chekcbox et Bouttonoption hier dans un frame mais impossible de pouvoir ensuite cliquer dessus pour les activer...

Autrement j'ai deux autres question par rapport à ton retour. En effet au début du code Userform1, j'ai mis un code permettant à ma fenêtre du formulaire de s'adapter à la taille de l'écran :
VB:
Option Explicit
'----------Private Function (PtrSafe for Windows x86)-------------------------------------
Private Declare PtrSafe Function StartWindow Lib "user32" Alias "GetWindowLongA" ( _
    ByVal hWnd As Long, ByVal nIndex As Long) As Long
    
Private Declare PtrSafe Function MoveWindow Lib "user32" Alias "SetWindowLongA" ( _
    ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
    
Private Const CURRENT_SIZE As Long = (-16) '// New window NewSize

'-----------Window NewSize------------------------------------------------------------------
Private Const UF_MIN As Long = &H20000 '// Minimize button
Private Const UF_MAX As Long = &H10000 '// Maximize button

'----------Variable Module----------------------------------------------------------------
Dim UF_Resized As Long
Dim NewSize As Long



Private Sub MultiPage1_Change()

End Sub

Private Sub UserForm_Initialize()
  '  Me.Width = wsMenu.Range("UFW")
  '  Me.Height = wsMenu.Range("UFH")
'    Call X1cFormResize
    UF_Resized = FindWindowA(vbNullString, Me.Caption)
    NewSize = StartWindow(UF_Resized, CURRENT_SIZE)
   ' NewSize = NewSize Or UF_MIN '//Minimize button
    NewSize = NewSize Or UF_MAX '//Maximize button
    MoveWindow UF_Resized, CURRENT_SIZE, (NewSize)
End Sub
Private Sub Cmd_Quit_Click()
    Me.Hide
    Unload Me
End Sub
Private Sub X1cFormResize()
    Application.WindowState = xlMaximized
    If ActiveWindow.Width > Me.Width And ActiveWindow.Height > Me.Height Then Exit Sub
    If (Round((ActiveWindow.Width * 0.98) / Me.Width, 2) * 100) - 1 < _
       (Round((ActiveWindow.Height * 0.98) / Me.Height, 2) * 100) - 1 Then
        Me.Zoom = (Round((ActiveWindow.Width * 0.98) / Me.Width, 2) * 100) - 1
        Me.Width = Me.Width * Me.Zoom / 100
        Me.Height = Me.Height * Me.Zoom / 100
    Else
        Me.Zoom = (Round((ActiveWindow.Height * 0.98) / Me.Height, 2) * 100) - 1
        Me.Width = Me.Width * Me.Zoom / 100
        Me.Height = Me.Height * Me.Zoom / 100
    End If
End Sub

Cela marche très bien sur mon fichier. Mais dès que j'ouvre la version que tu as posté cela ne fonctionne plus alors que pourtant tout ce code est encore bien présent.


Mon autre point est une demande d'aide de nouveau sur la sélection des CkeckBox et OptionButton. En effect en regardant ce que j'ai mis dans mon code je me rends compte que ce n'est pas excatement ce que je veux et je ne m'y retrouve plus.... En faite ce que je souhaite c'est quand dans mon userform1 je double clic sur le label SemelleGauche, j'ai l'userform2 qui s'ouvre. Qu'ensuite dans cet Userform2 je choisi les cotés que je veux Polir et une fois les cotés choisi j'indique si je polis 100% ou bien 50%. Et une fois cela fait le résultat va se mettre dans la feuille Calcul en cellule Q de le ligne qui se nomme "Semelle Gauche" (Attention le labelle n'a pas d'espace mais le nom dans la cellule si). ET je souhaite qu'en fonction de ce que j'ai chosi en Checkbox et OptionButton cela créer un code dans une celle et meme cellule.

Ainsi si checkboxdessus est selectionné cela commence par H et si option 100% cela rajoute 100 derrière le H. si c'est 25% cela fait donc H25...

Chaque côté à une lettre, ainsi :
Dessus : H
Dessous : B
Avant : A
Arrière : R
Gauche : G
Droite : D

Au final dans la cellule Q on peut par exemple obtenir le code suivant H100D25G75R50 qui dit :
Polir Dessus à 100%, Droite à 25%, Fuche à 75% et Arrière à 50%.

Et après je veux faire cela pour tous les labels... Ainsi si j'ai ouvert avec le Label SemelleDroite j'ai l'userform2 qui s'ouvre et le résultat des choix en feuille Calcul en cellule Q de le ligne qui se nomme "Semelle Droite" et ainsi de suite.
Aussi à tu moyen de m'éclairer sur la façon de faire car je n'arrive plus à m'y retrouver.

Merci
 

TooFatBoy

XLDnaute Barbatruc
j'ai mis un code permettant à ma fenêtre du formulaire de s'adapter à la taille de l'écran
Ah oui, je l'ai désactivé et j'ai oublié de le réactiver avant de poster le classeur...

Il faut enlever l'apostrophe qui met en commentaire la ligne d'appel de la macro.

Désolé. :(



J'ai voulu mettre les Chekcbox et Bouttonoption hier dans un frame mais impossible de pouvoir ensuite cliquer dessus pour les activer...
Ok, mais maintenant ça fonctionne ???
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Je vais essayer de te proposer dans la journée une association un peu différente des OptionButton. Mais il faut d'abord que je teste pour voir si ça peut être utile ou pas.

Ensuite je me pencherais sur ta deuxième question.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
La solution du Frame est bonne, mais on peut s'en passer. Ce qui est prévu pour ce cas dans un OptionButton c'est sa propriété GroupName. Mettre le même à tous ceux devant être liés en un groupe, mais différent pour chaque groupe.
 

TooFatBoy

XLDnaute Barbatruc
Merci Bernard, je ne connaissais pas cette solution.

Je comptais modifier le UserForm2 pour regrouper les OptionButton de chaque face dans un Frame pour pouvoir les activer/désactiver (ou les afficher/masquer) en une seule instruction.
Est-ce bon ? Y a-t-il mieux et moins lourd ?
 

Flnte

XLDnaute Nouveau
Bonjour.
La solution du Frame est bonne, mais on peut s'en passer. Ce qui est prévu pour ce cas dans un OptionButton c'est sa propriété GroupName. Mettre le même à tous ceux devant être liés en un groupe, mais différent pour chaque groupe.
Ah oui cela fonctionne aussi très bien ! Merci.
Me reste donc juste à régler le second point de ma première réponse à @TooFatBoy .
 

TooFatBoy

XLDnaute Barbatruc
Et une fois cela fait le résultat va se mettre dans la feuille Calcul en cellule Q de le ligne qui se nomme "Semelle Gauche" (Attention le label n'a pas d'espace mais le nom dans la cellule si).

Quel label ?

Il n'y a pas de cellule nommée dans le classeur.


ps : je n'ai pas compris à quoi servent les tests sur l'ouverture du UserForm2.
Pas compris non plus ce que tu veux faire avec UserForm2.targetCell = targetCell.
Et pas compris non plus pourquoi la boucle "d'attente de fermeture" du UserForm2.
 
Dernière édition:

Flnte

XLDnaute Nouveau
Quel label ?

Il n'y a pas de cellule nommée dans le classeur.


ps : je n'ai pas compris à quoi servent les tests sur l'ouverture du UserForm2.
Pas compris non plus ce que tu veux faire avec UserForm2.targetCell = targetCell.
Et pas compris non plus pourquoi la boucle "d'attente de fermeture" du UserForm2.
Effectivement je ne me comprends même plus moi même... trop dedanspuis des copiés-coller d'une version à une autre....
 

Statistiques des forums

Discussions
312 206
Messages
2 086 226
Membres
103 159
dernier inscrit
FBallea