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 :

Vérifier, sauvegarder Valeur CheckBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité(e)
    Invité(e)
    Par défaut Changement Valeur CheckBox non uniforme
    Bonjour, tout d’abord je souhaites une bonne année à tout le monde !

    Je viens de nouveau sur ce forum pour vous demander un petit truc :

    Je suis en train de créer une petit fichier excel qui va avoir comme particularité de demander à l’ouverture, grâce à une userform, quelles colonnes doivent être pré-remplies ou pas.

    J’ai donc dans l’user form des checkbox, qui vont avoir pour rôles d’inscrire quelques choses dans leur case respective. 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
    Private Sub CheckBox1_Click()
      Application.ScreenUpdating = False
     
        Select Case CheckBox1.Value
            'show
            Case True: Range("A:A").EntireColumn.Hidden = False
                'écriture
                Range("A1").Value = "N°"
     
            'Si la case n'est pas coché, ne rien avoir dans la colonne
            Case False: Range("A:A").Value = ""
     
             'Selectionner la colonne et la faire disparaitre.
             Range("A:A").EntireColumn.Hidden = True
     
            Case Else: CheckBox1.Caption = "Null"
        End Select
    End Sub
    La ça va donc écrire « N° » dans la case A1.

    Mon problème c’est que j’ai comme ça une trentaine de colonne, lors de la réouverture du fichier, j’ai créer ceci dans l’userform activate afin de vérifier si les checkbox doivent apparaitres coché ou pas suivant dans quelles colonnes sont restées remplies avec la sauvegarde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Range("A1").Value = "N°" Then
    CheckBox1.Value = True
    Else
    Range("A:A").EntireColumn.Hidden = True
    End If
    Le problème c’est que j’ai donc trente fois ça avec différente case et valeur…

    Ne serait-il pas possible de faire une boucle afin qu’elle vérifie dans chaque colonne si une valeur existe, (même n’importe laquelle) et qu’elle coche les checkbox correspondante.

    Je suis débutant, je pensais à un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim compteur As Long
      For compteur = "1" To "28"
      I = I + 1
        If Range(I).Value <> "" Then
          CheckBox"I".Value = True
        End If
      Next compteur
    (ce qui ne fonctionne pas bien évidemment mais vous aidera à trouver ce que je souhaite faire )


    Sinon si je prends le problème dans un autre sens, est-il possible de sauvegarder la valeur de toutes les checkbox à un moment donné afin de savoir lesquelles sont cochées, ou pas et donc de les réutiliser lors de l’apparition de l’userform ?

    Voilà, merci !
    Dernière modification par Invité(e) ; 07/01/2010 à 10h35.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 102
    Par défaut
    Bonjour et bonne année

    En utilisant le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'remplacer
    CheckBox"I".Value = True
    'par
    Me.controls("CheckBox" & I).Value = True
    A tester

    Jp014

  3. #3
    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
    Bonjour,
    En complément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim compteur As Byte
    For compteur = 1 To 28
        Me.Controls("CheckBox" & compteur).Value = Cells(1, compteur).Value <> ""
    Next compteur

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Yeahhh

    Nickel, ça fonctionne très bien, je te remercie beaucoup !

    J'ai changé une autre partie de mon code, car l'objet "range" posait problème.

    Ça donne ça maintenant qui fonctionne très bien pour toutes les 1 cellule des colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim compteur As Long
      For compteur = "1" To "28"
      I = I + 1
        If Cells(1, I).Value <> "" Then
      Me.Controls("CheckBox" & I).Value = True
        End If
      Next compteur
    Enfin voilà , je suis en extase devant mon fichier excel maintenant

    Bonne journée et à bientôt pour de nouveaux problèmes !

    [edit] : merci mercatog pour la simplification du code !

  5. #5
    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
    Des remarques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim compteur As Long
      For compteur = "1" To "28"
      I = I + 1
        If Cells(1, I).Value <> "" Then
      Me.Controls("CheckBox" & I).Value = True
        End If
      Next compteur
    1. Tu déclare compteur As Long alors que byte suffisait
    2. For compteur = "1" To "28"; pourquoi ajouter les guillemets?
    3. Ta variable I est toujours égale à compteur

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Des remarques :
    1. Tu déclare compteur As Long alors que byte suffisait
    2. For compteur = "1" To "28"; pourquoi ajouter les guillemets?
    3. Ta variable I est toujours égale à compteur
    1. Oui car je ne maitrise pas encore le type de déclaration que je dois faire.
    2. Euh, je ne sais pas...
    3. Oui, ça pas de soucis, je l'enlève

    Encore merci à vous deux, j'ai pu adapté ce code à d'autres parties ou je devais également faire de la selection multiple de check box. Donc nickel

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour à tous, je relance ma conversation, car j'ai une autre question qui concerne le même sujet.

    Grace à vous, j'ai pu faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim compteurTrue As Byte
      For compteurTrue = 1 To 21
        If CheckBox200.Value = True Then
      Me.Controls("CheckBox" & compteurTrue).Value = True
        End If
      Next compteurTrue
     
        Dim compteurFalse As Byte
      For compteurFalse = 201 To 204
        If CheckBox200.Value = True Then
      Me.Controls("CheckBox" & compteurFalse).Value = False
        End If
      Next compteurFalse
    Malheureusement ce code fonctionne très bien lorsque que je souhaite modifier l'état d'un ensemble de checkbox dont le numéro se suit.

    Mais j'ai plusieurs configurations et l'une d'elle est de ce genre la :

    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
    Private Sub CheckBox204_Click()
    If CheckBox204.Value = True Then
    CheckBox1.Value = False
    CheckBox2.Value = False
    CheckBox3.Value = False
    CheckBox4.Value = False
    CheckBox5.Value = False
    CheckBox6.Value = False
    CheckBox7.Value = False
    CheckBox8.Value = False
    CheckBox9.Value = True
    CheckBox10.Value = False
    CheckBox11.Value = False
    CheckBox12.Value = False
    CheckBox13.Value = False
    CheckBox14.Value = False
    CheckBox15.Value = True
    CheckBox16.Value = False
    CheckBox17.Value = False
    CheckBox18.Value = True
    CheckBox19.Value = True
    CheckBox20.Value = False
    CheckBox21.Value = False
     
    CheckBox200.Value = False
    CheckBox201.Value = False
    CheckBox202.Value = False
    CheckBox203.Value = False
    End If
    End Sub
    Est-ce qu'il y a un moyen pour simplifier ce code? Une sorte de boucle à laquelle on peut rajouter des exceptions? Car là, si je veut faire des boucles comme au dessus, ça me prends plus de ligne que le truc que j'ai créé.

    ps: désolé de poster autant de problème depuis quelques jours Mais bon, ça commence à rentrer, rassurez-vous

Discussions similaires

  1. Vérifier les valeurs d'un fichier en entrée
    Par delphine_lep dans le forum Oracle
    Réponses: 1
    Dernier message: 15/05/2006, 16h49
  2. [Tableaux] Valeur checkbox
    Par baillador dans le forum Langage
    Réponses: 7
    Dernier message: 13/04/2006, 10h25
  3. [VB]vérifier des valeurs dans un fichiers et trier
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/02/2006, 17h35
  4. [C#][WinForms][DataGrid]Vérifier les valeurs saisies
    Par loverdose dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/12/2005, 11h29
  5. Vérifier la valeur d'un <select> <opt...> </s
    Par Sigur ros dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/08/2005, 16h40

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