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 :

VBA: Cocher automatiquement checkbox en fonction de chiffre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 21
    Par défaut VBA: Cocher automatiquement checkbox en fonction de chiffre
    Bonjour, bonsoir,

    J'aimerais savoir si c'est possible, selon le numéro de la colonne (décidé par l'utilisateur), cocher ou décocher (automatiquement) les checkbox en fonction des numéros (de 1 à 4) dans la colonne selon la légende dans le document.

    Pour activer les checkbox manuellement avec ce code ça va :
    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
     
       'Dim o As Integer
       'For o = 1 To 10
       If Target.Value = 1 Then
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Enabled = True
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Object.Value = False
       ElseIf Target.Value = 2 Then
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Enabled = True
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Object.Value = True
       ElseIf Target.Value = 3 Then
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Enabled = False
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Object.Value = False
       ElseIf Target.Value = 4 Then
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Enabled = False
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Object.Value = True
       End If
    Mais c'est pour faire en sorte de qu'ils s'activent/désactivent automatiquement dans une sorte de boucle.

    En d'autre mots, est-il possible de faire coché/décoché des checkbox automatiquement en fonction de chiffre?

    dsl si je ne suis pas très clair, mais j'ai mis un exemple dans ce fichier...

    Merci...
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    je n'ouvre jamais de fichier xls joint...

    Je vais donc me contenter du code montré, sans préjudice du reste (pointeur vers tes objets, que j'aurais plutôt vu avec la collection Shapes ...)

    ce que tu as écrit (toutes tes conditions) se résume à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if target.value < 5 then
      Sheets("Feuil2").OLEObjects("CheckBox" & o).Enabled =  CBool(target.value And 1)
       Sheets("Feuil2").OLEObjects("CheckBox" & o).Object.Value =  Not CBool(target.value And 1)
    end if

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 21
    Par défaut
    Merci pour cette optimisation!

    Aurait-tu un moyen de les faire fonctionner en boucle...?

    J'ai 10 checkbox a cocher/décocher en fonction d'une colonne de 10 chiffres comment faire?

    J'ai essayer avec une boucle For dans Private Sub Worksheet_Change(ByVal Target As Range) mais cela change tout les checkbox pour la valeur dans le target.value

    Y'aurait-il un autre moyen?

    Merci...

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim o As Integer
    'Select Case Target.Address
    For o = 1 To 10     ' à adapter
        Sheets("Feuil1").OLEObjects("CheckBox" & o + 4).Object.Value = (Target.Value = 2 Or Target.Value = 4)
        Sheets("Feuil1").OLEObjects("CheckBox" & o + 4).Object.Enabled = (Target.Value = 1 Or Target.Value = 2)
    Next o
    Il faudrait aussi tester avant que Target soit bien la case C2.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 21
    Par défaut
    Oui j'ai tester... ça fonctionne...

    En fait tout ce que j'essaye de faire est de mettre ce code dans une boucle, pour que je ne soit obliger de changer le code du "case" pour chaque checkbox à chaque fois :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Target.Address
            Case "$A$10"
                If Target.Value = 1 Then
                Sheets("Feuil1").CheckBox1.Enabled = True
                Sheets("Feuil1").CheckBox1.Value = False
                End If
                If Target.Value = 2 Then
                Sheets("Feuil1").CheckBox1.Enabled = True
                Sheets("Feuil1").CheckBox1.Value = True
                End If
                If Target.Value = 3 Then
                Sheets("Feuil1").CheckBox1.Enabled = False
                Sheets("Feuil1").CheckBox1.Value = False
                End If
                If Target.Value = 4 Then
                Sheets("Feuil1").CheckBox1.Enabled = False
                Sheets("Feuil1").CheckBox1.Value = True
                End If
            Case "$A$11"
                If Target.Value = 1 Then
                Sheets("Feuil1").CheckBox2.Enabled = True
                Sheets("Feuil1").CheckBox2.Value = False
                End If
                If Target.Value = 2 Then
                Sheets("Feuil1").CheckBox2.Enabled = True
                Sheets("Feuil1").CheckBox2.Value = True
                End If
                If Target.Value = 3 Then
                Sheets("Feuil1").CheckBox2.Enabled = False
                Sheets("Feuil1").CheckBox2.Value = False
                End If
                If Target.Value = 4 Then
                Sheets("Feuil1").CheckBox2.Enabled = False
                Sheets("Feuil1").CheckBox2.Value = True
                End If
            Case "$A$12"
                If Target.Value = 1 Then
                Sheets("Feuil1").CheckBox3.Enabled = True
                Sheets("Feuil1").CheckBox3.Value = False
                End If
                If Target.Value = 2 Then
                Sheets("Feuil1").CheckBox3.Enabled = True
                Sheets("Feuil1").CheckBox3.Value = True
                End If
                If Target.Value = 3 Then
                Sheets("Feuil1").CheckBox3.Enabled = False
                Sheets("Feuil1").CheckBox3.Value = False
                End If
                If Target.Value = 4 Then
                Sheets("Feuil1").CheckBox3.Enabled = False
                Sheets("Feuil1").CheckBox3.Value = True
                End If
            Case "$A$13"
                If Target.Value = 1 Then
                Sheets("Feuil1").CheckBox4.Enabled = True
                Sheets("Feuil1").CheckBox4.Value = False
                End If
                ...
                ...
                ...
        End Select
    End Sub
    J'ai essayer avec plusieurs sortes de boucles mais sans succès, quelqu'un aurait-il une idée?

    Merci!

  6. #6
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour le fil le forum tu peus simplifier comme cela a condition que tu res pecte la chronologie je pars de a 10 a a 1000 pour les cellules & lesCheckBox que tu vas rajoutees je suis parti sur ton dernier exemple
    a10=CheckBox1
    a11=CheckBox2
    a12=CheckBox3
    ect...
    Option Explicit
    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
    Dim i As Byte, x As Byte, z As Byte, obj As OLEObject
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A10:A19")) Is Nothing Then
    z = ActiveCell.Row: If z = 10 Then x = Left(z, 1) Else x = Right(z, 1) + 1
     i = ActiveCell.Value
    For Each obj In ActiveSheet.OLEObjects
    If Right(obj.Name, 1) = x And i = 1 Then obj.Object.Value = False
    If Right(obj.Name, 1) = x And i = 2 Then obj.Object.Value = True
    If Right(obj.Name, 1) = x And i = 3 Then obj.Object.Value = False
    If Right(obj.Name, 1) = x And i = 4 Then obj.Object.Value = True
    If Right(obj.Name, 1) = x And i = 1 Then obj.Object.Enabled = True
    If Right(obj.Name, 1) = x And i = 2 Then obj.Object.Enabled = True
    If Right(obj.Name, 1) = x And i = 3 Then obj.Object.Enabled = False
    If Right(obj.Name, 1) = x And i = 4 Then obj.Object.Enabled = False
     Next obj: End If
    End Sub
    on peut encore simplifier en groupant les conditions mais pas le temps!!!!

    une version simplifie
    Option Explicit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Byte, x As Byte, z As Byte, obj As OLEObject
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A10:A19")) Is Nothing Then
    z = ActiveCell.Row: x = Right(z, 1) + 1: i = ActiveCell.Value
    For Each obj In ActiveSheet.OLEObjects
    If Right(obj.Name, 1) = x And (i = 1 Or i = 3) Then obj.Object.Value = False
    If Right(obj.Name, 1) = x And (i = 2 Or i = 4) Then obj.Object.Value = True
    If Right(obj.Name, 1) = x And (i = 1 Or i = 2) Then obj.Object.Enabled = True
    If Right(obj.Name, 1) = x And (i = 3 Or i = 4) Then obj.Object.Enabled = False
    Next obj: End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 24/06/2008, 11h16
  2. fonction where dans VBA et recupération de lettre et de chiffre
    Par moimemessssssssss dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2008, 22h55
  3. Réponses: 2
    Dernier message: 14/09/2006, 15h24
  4. cocher une checkbox en fonction de son nom
    Par boss_gama dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/09/2006, 17h42
  5. [débutante] Cocher automatiquement d checkbox
    Par baillador dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/05/2006, 13h16

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