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 :

Condition sur checkbox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Condition sur checkbox
    Bonsoir,

    Grâce à l'aide de Mercatog, je suis parvenu à ce code qui me permet via des checkboxs à inscrire le caption sur les lignes correspondantes en feuille BD.
    Ces chexkboxs représentent des appareils répertoriés en feuille "App".

    Je voudrais vérifier l'existence de la checkbox sur la feuille "App" (car j'ai 2 checkboxs TT01a et TT01b).
    Donc si on clique sur une checkbox qui n'est pas répertoriée, un message s'affiche et checkbox est décochée.
    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
    Option Explicit
     
    Sub TestOnOff(ByVal App As String, ByVal Etat As Boolean)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim LastLigD As Long, LastLigB As Long, i As Long, j As Long
    Dim Tb, Td
     
    With Worksheets("app")
        LastLigD = .Cells(.Rows.Count, "A").End(xlUp).Row
        Td = .Range("A2:F" & LastLigD)
    End With
     
    With Worksheets("BD")
        LastLigB = .Cells(.Rows.Count, "B").End(xlUp).Row
        Tb = .Range("B2:G" & LastLigB)
        For i = 1 To LastLigD - 1  'boucle sur Td (App)
            For j = 1 To LastLigB - 1   'boucle sur Tb (BD)
     
            If Not Etat Then
                If Tb(j, 6) = App Then Tb(j, 6) = ""
                    Else
     
                    If Tb(j, 6) = "" Then
     
              If Td(i, 6) = App And Td(i, 1) & "|" & Td(i, 2) & "|" & Td(i, 3) & "|" & Int(Td(i, 4)) = _
            Tb(j, 1) & "|" & Tb(j, 2) & "|" & Tb(j, 3) & "|" & Int(Tb(j, 4)) Then Tb(j, 6) = App
     
                    End If
                End If
     
            Next j
        Next i
        .Range("B2:G" & LastLigB) = Tb
    End With
    End Sub
    module de classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
     
    Public WithEvents Chk As MsForms.CheckBox
     
    Private Sub Chk_Click()
     
    TestOnOff Chk.Caption, Chk.Value
    End Sub
    En vous remerciant beaucoup pour votre précieuse aide et je tiens à remercier encore une fois Mercatog.

    Cordialement,
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Remplace le code du module de classe par ceci
    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
    Option Explicit
     
    Public WithEvents Chk As MsForms.CheckBox
     
    Private Sub Chk_Click()
     
    If ChkExists(Chk.Caption) Then
        TestOnOff Chk.Caption, Chk.Value
    Else
        If Chk.Value Then
            Chk.Value = False
            MsgBox Chk.Caption & " inéxistant dans la feuille APP"
        End If
    End If
    End Sub
     
    Private Function ChkExists(ByVal NomApp As String) As Boolean
     
    ChkExists = Not Worksheets("APP").Range("F:F").Find(NomApp, LookIn:=xlValues, lookat:=xlWhole) Is Nothing
    End Function

    PS. Essaies d'indenter convenablement les codes (utilises entre autre Smart Indenter à installer) pour une meilleure visibilité

    Regarde ton code du module standard comme c'est illisible et compare le avec ceci
    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
    Option Explicit
     
    Sub TestOnOff(ByVal App As String, ByVal Etat As Boolean)
    Dim LastLigD As Long, LastLigB As Long, i As Long, j As Long
    Dim Tb, Td
     
    With Worksheets("APP")
        LastLigD = .Cells(.Rows.Count, "A").End(xlUp).Row
        Td = .Range("A2:F" & LastLigD)
    End With
     
    With Worksheets("BD")
        LastLigB = .Cells(.Rows.Count, "B").End(xlUp).Row
        Tb = .Range("B2:G" & LastLigB)
        For i = 1 To LastLigD - 1                         'boucle sur Td (App)
            For j = 1 To LastLigB - 1                     'boucle sur Tb (BD)
                If Not Etat Then
                    If Tb(j, 6) = App Then Tb(j, 6) = ""
                Else
                    If Tb(j, 6) = "" Then
                        If Td(i, 6) = App And Td(i, 1) & "|" & Td(i, 2) & "|" & Td(i, 3) & "|" & Int(Td(i, 4)) = _
                           Tb(j, 1) & "|" & Tb(j, 2) & "|" & Tb(j, 3) & "|" & Int(Tb(j, 4)) Then Tb(j, 6) = App
                    End If
                End If
            Next j
        Next i
        .Range("B2:G" & LastLigB) = Tb
    End With
    End Sub

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Mercatog,

    Je te remercie infiniment pour ton aide. Je ne pense pas que j'aurai trouvé, j'ai effectué mes petites bidouilles dans le module juste avant le Next j.
    Je n'aurai jamais pensé au module de classe que je connais pas du tout. La seule chose que j'ai déduite c'est qu'un module de classe traite une collection
    (la collection de mes checkboxs).

    je te remercie aussi pour tes conseils et ton lien pour avoir de jolis codes bien lisibles. J'ai excel 2007, sur le site Smart Indenter Version 3.5 n'est proposé
    que pour Office 2000/2002/2003, Visual Basic 6 et Excel 97. Je télécharge le premier et j'effectue un essai.

    Pour ce qui est des tableaux, comme tu m'avais expliqué la correspondance entre tableau et feuille, ça j'ai compris.
    Ce que je n'ai pas encore saisie c'est quand est-ce qu'il faut utiliser Redim, Redim Preserve, resize,
    et surtout comme effectuer des calculs en utilisant des tableaux.

    Je termine ce fichier et je m'y remets sérieusement sur les tableaux.

    Encore merci et très bonne journée.

    Cordialement,

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

Discussions similaires

  1. Condition sur checkbox qui ne marche pas
    Par rebk2013 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/06/2013, 16h14
  2. condition sur checkbox html
    Par dedibox26 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/05/2010, 15h30
  3. condition sur une checkbox se trouvant dans un userform
    Par alex830001 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/12/2008, 17h39
  4. [XHTML] condition sur checkbox
    Par bogsy15 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 11/08/2006, 08h10
  5. condition sur des checkbox
    Par bogsy15 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2006, 09h28

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