IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Mise à jour Checkbox à chaque click dans COMBOBOX


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut Mise à jour Checkbox à chaque click dans COMBOBOX
    Bonjour,

    Ci-joint une partie du projet de réalisation d'un questionnaire:

    Lorsque je clique sur un nom de ma combobox, tous les champs de mon formulaire viennent se mettre à jour en fonction du choix effectué.

    Tous SAUF la zone situation familiale "Vivez-vous" regroupant 5 checkbox (dont deux max autorisées => géré par module de classe "classesaisie")


    Plus précisément à chaque lancement du formulaire , je sélectionne un nom et là pas de souci cela me coche bien les checkbox concernée, mais si j'enchaine et clique sur un 2ème nom( sans fermer formulaire), cette zone "vivez-vous" reste sur le 1er choix.

    J'ai du mal coder à un endroit et c'est pour ça que je fais appel a vous...
    Merci d'avance...
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je pense qu'il est préférable de décocher toutes les CheckBox pour ensuite les cocher en fonction des valeurs récupérées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    'mets d'abords les contrôles à False
    For I = 1 To 5
        Me.Controls("CheckBox" & I).Value = False
    Next I
    'puis les coches en fonction...
    Select Case Sheets("BASE REGISTRES ORL").Cells(ligne, 7)
       Case "Seul"
           Me.CheckBox1 = True
       Case "En Couple"
           Me.CheckBox2 = True
       Case "Sans Enfant"
           Me.CheckBox3 = True
       Case "Avec Enfant(s) en jeune âge (<18 ans)"
           Me.CheckBox4 = True
        Case "Avec grand(s) enfant(s)"
           Me.CheckBox5 = True
     End Select
    Hervé.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    merci pour ta réponse malheureusement cela ne résoud pas le problème.

    En pièce jointe, j'ai remis à jour le formulaire et à la question 12) .
    contenant que des checkbox....
    1 ) l'ajout se fait bien dans les bonnes cellules en fonction des choix cochés
    2 ) Lors du choix du nom dans la combobox, aucun checkbox se mettent à jour alors que des données sont saisies dans les cellules correspondantes.
    3) Pire quand je coche un choix pour mettre à jour, les cellules ne se mettent pas à jour.



    help!!!
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Spanish_

    Utilise l'événement Click des CheckBox pour affecter les autres CheckBox :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub CheckBox1_Click()
     
    If CheckBox1.Value = True Then
    CheckBox2.Value = False
    CheckBox3.Value = False
    CheckBox4.Value = False
    CheckBox5.Value = False
    End If
    End Sub
     
     
    Private Sub CheckBox2_Click()
     
    If CheckBox2.Value = True Then
     CheckBox1.Value = False
    End If
    End Sub
     
    Private Sub CheckBox3_Click()
     
    If CheckBox3.Value = True Then
    CheckBox4.Value = False
    CheckBox5.Value = False
    End If
    End Sub
     
    Private Sub CheckBox4_Click()
     
    If CheckBox4.Value = True Then
    CheckBox5.Value = False
    CheckBox3.Value = False
    End If
    End Sub
     
    Private Sub CheckBox5_Click()
     
    If CheckBox5.Value = True Then
    CheckBox4.Value = False
    CheckBox3.Value = False
    End If
    End Sub
    Et recommence la procédure b_modification_Click.

    Attention aux erreurs genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case "Voiture"
         Me.CheckBox8 = True
        Case "Extérieur calme"
          Me.CheckBox8 = True

    Cordialement

    Docmarti

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    Merci effectivement j'ai corrigé mon erreur.

    Par rapport à ta solution , sachant que le reste du formulaire contient de nombreuses questions à plusieurs Checkbox, je me vois mal faire un private sub Checkbox clik à chaque checkbox..

    y ' a t il une solution moins lourde!

    mais merci quand meme

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par Spanish_ Voir le message
    Par rapport à ta solution , sachant que le reste du formulaire contient de nombreuses questions à plusieurs Checkbox, je me vois mal faire un private sub Checkbox clik à chaque checkbox..

    y ' a t il une solution moins lourde!
    Selon mon expérience, c'est la solution la moins lourde, la plus simple et la plus pratique, car celui qui fait un choix sur un Checkbox en voit aussitôt l'effet sur les autres CheckBox. Et ça simplifie beaucoup le travail du programmeur.

    Mais c'est toi qui sais si c'est ou non la meilleure façon de faire dans ce programme.

    Cordialement

    Docmarti

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    En premier lieu, je pense qu'il y a un problème de conception au niveau des cases à cocher, elles ne devrait pas être verrouillées après le choix pour permettre une correction. Sinon, pour simplifié, tu pourrait soit utiliser une Combo, le nombre de choix serait de 6 seulement, soit scinder, la partie "Seul" et "En couple" avec des boutons d'option et le reste avec une Combo.

    Hervé.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    Merci effectivement la solution est plus simple et certainement plus efficace.

    Mais pour la question 12, comment expliquer que cela ne ramène aucun choix de la base et pire mes modifications ne sont pas prises en compte.

  9. #9
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Ce code risque d'effacer les choix au fur et à mesure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = 1 To 5
                    Me.Controls("CheckBox" & I).Value = False
    Next I

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je pense qu'il va falloir reprendre ton projet pratiquement dans son entièreté car d'une part, si tu as deux noms de famille identique, avec la fonction Find le premier trouvé sera toujours retourné donc, il sera impossible d'effectuer des modif sur les suivants. Ici, plusieurs solutions soit utiliser une clé unique comme dans les base de données, soit faire la recherche sur la concaténation du nom et prénom et dans ce cas, la recherche serait faite à partir des champs "1) Nom" et "2) Prénom". A la vu du code il va nous être difficile de t'aider car ça va demander trop de temps de tout tester. J'ai trouvé une erreur à la proc "b_modification_Click", tu mets toutes les CheckBox à False et juste après tu cherche celle(s) qui ont été cochées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    For i = 6 To 13
        Me.Controls("CheckBox" & i).Value = False
    Next i
     
    colonne = 0
        For i = 6 To 13
        Debug.Print Me.Controls("CheckBox" & i).Value 'pour voir qu'elles sont toutes à False
            If Me("CheckBox" & i) Then
                Cells(ligne, colonne + 13) = Me("checkbox" & i).Caption
                'ligne = ligne + 1
                  'Limité à 2 choix dont colonne = 8
                  colonne = colonne + 1
        End If
        ' colonne = 0  ' réservation de colonnes car plusieurs choix possibles - on oublie pas de ré initialiser la valeur de colonne à 0 pour éviter tout décalage
         Next i
    Je pense qu'il y a d'autres endroits où ça coince !

    Hervé.

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Pour la recherche, regarde du coté de l'opérateur Like. Tu rempli ta combo en concaténant le nom et prénom, d'une part c'est plus parlant pour l'utilisateur et d'autre par, plus précis pour la recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'nom et prénom
    For Each c In Range(Sheets("BASE REGISTRES ORL").[A2], Sheets("BASE REGISTRES ORL").[A65000].End(xlUp))
        Me.ChoixNom.AddItem c & " " & c.Offset(, 1)
    Next c
    Pour la recherche, un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Dim Tbl() As String
    Dim Plage As Range
     
    'défini la plage sur A et B
    With Sheets("BASE REGISTRES ORL")
     
        Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 2).End(xlUp))
     
    End With
     
    'dimentionne le tableau
    ReDim Tbl(1 To Plage.Rows.Count)
     
    'charge le tableau en concaténant le nom et prénom
    For i = 1 To Plage.Rows.Count
     
        Tbl(i) = Plage.Rows(i).Cells(1, 1) & " " & Plage.Rows(i).Cells(1, 2)
     
    Next i
     
    'pour le test, effectue une recherche
    For i = 1 To UBound(Tbl)
     
       If Tbl(i) Like "Silve Hervé" Then MsgBox Tbl(i) 'ici utiliser i pour trouver la ligne
     
    Next i
    Hervé.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/04/2006, 16h16
  2. mise à jour d'un champ dans un formulaire
    Par DiverSIG dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/03/2006, 08h10
  3. mise à jour d'un champ dans un formulaire
    Par DiverSIG dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/03/2006, 19h42
  4. mise à jour de champ monétaire dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/08/2005, 11h49
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo