XL 2019 Choisir une case ou l'autre

Fatruck

XLDnaute Nouveau
Bonjour,

j'ai avancé dans mon projet (je suis novice sur Excel) mais je suis bloqué à un endroit : je n'arrive pas à obliger le choix entre plusieurs cases à cocher. Par exemple dans mon fichier je veux que l'on est le choix entre "Maison" ou "Appartement", c'est soit l'un, soit l'autre mais on ne doit pas pouvoir cocher les deux. Pour "Franchise" on doit pouvoir uniquement cocher l'une des 4 cases à cocher (soit 300 ou 200 ou 100 ou 0) mais je parviens pas à le faire moi-même… De l'aide serait la bienvenue :)

Bonne soirée à vous
 

Pièces jointes

  • test1.0.xlsm
    74.8 KB · Affichages: 27

patricktoulon

XLDnaute Barbatruc
je viens de faire le teste avec des controlsActivX optionbutton

tu a le même résultat sans code ;)
demo3.gif
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :),

Un essai de formulaire
  • sans objet "contrôle de formulaire" ou "ActiveX"
  • avec des pseudo cases à cocher.
  • un bouton pour la RAZ
  • un bouton pour vérifier si toutes les rubriques sont renseignées
  • une feuille "Résultat" qui indique le contenu de chaque rubrique (erreur #N/A si pas renseignée)
A partir de la feuille "Résultat", le devis est très probablement facile à faire puisque toutes les options cochées y figurent.

Le code (assez limité) est dans le module de la feuille "Formulaire". Il utilise l'évènement Worksheet_SelectionChange.
VB:
Option Explicit
Const codCoch = 254, codDecoch = 168, Police = "Wingdings"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Count = 1 Then LigneType Target
End Sub

Sub LigneType(cible As Range)
Dim lig&, col&
   lig = cible.Row: col = cible.Column
   If lig >= 10 And lig <= 17 And (col = Range("i1").Column Or col = Range("n1").Column) Then
      Union(Cells(lig, "i"), Cells(lig, "n")) = Chr(codDecoch)
      Cells(lig, col) = Chr(codCoch)
      Application.EnableEvents = False: Cells(lig + 1, 1).Activate: Application.EnableEvents = True
   ElseIf lig = 18 And (col = Range("i1").Column Or col = Range("L1").Column Or col = Range("O1").Column Or col = Range("r1").Column) Then
      Union(Cells(lig, "i"), Cells(lig, "L"), Cells(lig, "O"), Cells(lig, "r")) = Chr(codDecoch)
      Cells(lig, col) = Chr(codCoch)
      Application.EnableEvents = False: Cells(lig + 1, 1).Activate: Application.EnableEvents = True
   ElseIf (lig >= 22 And lig <= 27) Or (lig >= 29 And lig <= 32) Or (lig >= 34 And lig <= 36) Then
      If (col = Range("j1").Column Or col = Range("m1").Column Or col = Range("p1").Column) Then
         Union(Cells(lig, "j"), Cells(lig, "m"), Cells(lig, "p")) = Chr(codDecoch)
         Cells(lig, col) = Chr(codCoch)
         Application.EnableEvents = False: Cells(lig + 1, 1).Activate: Application.EnableEvents = True
      End If
   End If
End Sub
 

Pièces jointes

  • Fatruck- Formulaire Feuille XL- v1.xlsm
    47.3 KB · Affichages: 17
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @patricktoulon :)

bonjour mapomme joli tu t'es bien amusé

Un p'ti peu oui. Le plus long n'est pas l'écriture du code qui est simple mais la construction du formulaire (et je n'ai fourni que la dernière version :p)

@Fatruck,
Je ne commente jamais mes codes sauf:
  • si j'en éprouve le besoin pour moi-même
  • si on me le demande (gentiment ;))
 
Dernière édition:

Chris24

XLDnaute Impliqué
Alors dans VBA j'ai le simulateur de prime qui s'affiche maintenant mais je ne peux pas le remplir, quand je clique sur une case il ne se passe rien et quand je double-clique dessus ça me renvoie vers le code. J'ai fait une capture de ce que j'ai


La macro complémentaire Morefunc n'est pas utile il faut décocher cette référence.

Réessayez d'ouvrir le formulaire avec le bouton de la feuil1

Normal que dans l'éditeur VBA le formulaire ne fonctionne pas il est en mode création.
 

patricktoulon

XLDnaute Barbatruc
re
@mapomme
je l'ai fait avec un select case
VB:
Option Explicit
Const codCoch = 254, codDecoch = 168, Police = "Wingdings"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = 1 Then coche Target
End Sub

Sub coche(cible As Range)
    Dim rngbase As Range
    Select Case cible.Row
    Case 10 To 15
        If (cible.Column = 9 Or cible.Column = 14) Then
            Union(Cells(cible.Row, 9), Cells(cible.Row, 14)) = Chr(codDecoch)
            cible = Chr(codCoch)
        End If
    Case 18
        If (cible.Column = 9 Or cible.Column = 12 Or cible.Column = 15 Or cible.Column = 18) Then
            Union(Cells(cible.Row, 9), Cells(cible.Row, 12), Cells(cible.Row, 15), Cells(cible.Row, 18)) = Chr(codDecoch)
            cible = Chr(codCoch)
        End If
    Case 22 To 27, 29 To 32
        If (cible.Column = 10 Or cible.Column = 13 Or cible.Column = 16) Then
            Union(Cells(cible.Row, 10), Cells(cible.Row, 13), Cells(cible.Row, 16)) = Chr(codDecoch)
            cible = Chr(codCoch)
        End If
    End Select
End Sub
au final pour un code générique j'aurais même du caser les colonnes aussi ;)
 

Discussions similaires

Réponses
2
Affichages
288
Réponses
3
Affichages
326
Réponses
10
Affichages
438

Statistiques des forums

Discussions
312 234
Messages
2 086 470
Membres
103 226
dernier inscrit
smail12