XL 2019 Choisir une case ou l'autre

  • Initiateur de la discussion Initiateur de la discussion Fatruck
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

je viens de faire le teste avec des controlsActivX optionbutton

tu a le même résultat sans code 😉
demo3.gif
 
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

Dernière édition:
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 😛)

@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:
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.
 
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 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
18
Affichages
1 K
Réponses
13
Affichages
571
Retour