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 :

Optimisation de code avec les noms des CheckBox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut Optimisation de code avec les noms des CheckBox
    Bonjour à tous,

    J'ai créé un petit UseFerm avec plein de jolies petites CheckBox.
    J'ai un commandButton qui me permet d'en sélectionner plusieurs en même temps seulement le code est un gros copié/collé bourrin :
    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
    Private Sub CommandButton9_Click()
        'Colonne 1
        If (CheckBox1 = False) Then
            CheckBox1 = True
        Else
            CheckBox1 = False
        End If
        If (CheckBox2 = False) Then
            CheckBox2 = True
        Else
            CheckBox2 = False
        End If
        If (CheckBox3 = False) Then
            CheckBox3 = True
        Else
            CheckBox3 = False
        End If
        If (CheckBox4 = False) Then
            CheckBox4 = True
        Else
            CheckBox4 = False
        End If
        If (CheckBox5 = False) Then
            CheckBox5 = True
        Else
            CheckBox5 = False
        End If
        If (CheckBox6 = False) Then
            CheckBox6 = True
        Else
            CheckBox6 = False
        End If
        If (CheckBox7 = False) Then
            CheckBox7 = True
        Else
            CheckBox7 = False
        End If
        If (CheckBox8 = False) Then
            CheckBox8 = True
        Else
            CheckBox8 = False
        End If
    End Sub
    Vous comprenez que c'est réellement moche !

    Du coup j'ai essayé plusieurs fois de rentrer ce pavé dans une boucle seulement tout ce que j'ai essayé a loupé.

    J'ai essayé les :
    variable_str = "CheckBox" & i
    ==> avec i le numéro de checkbox qui fait la boucle

    J'ai essayé plein d'autres choses qui ne marchent pas plus les unes que les autres.
    En même temps je ne m'y connais pas trop dans la façon de gérer ces betes la :s

    Bref si quelqu'un connait la solution à mon problème, il est le bienvenue

    Cordialement

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    Un peu de lecture

    Bon courage

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Bonjour casefayere,

    Merci de l'attention et merci pour le lien, cependant je l'ai déja regardé et j'ai déja essayé d'adapter ce qu'il y a dessus.

    Cependant ce que je n'arrive pas a faire c'est donner à une variable intermédiaire le numéro dune checkbox et ensuite à intégrer ce numéro à la checkbox, j'ai toujorus des erreurs de compilation.

    Cordialement

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Re,
    Cependant ce que je n'arrive pas a faire c'est donner à une variable intermédiaire le numéro dune checkbox et ensuite à intégrer ce numéro à la checkbox, j'ai toujorus des erreurs de compilation.
    Montres ce code ou envoies un fichier bidon.

    Je regarderai car pour l'instant je ne comprends pas trop

  5. #5
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Tu dois sans doute confondre l'objet CheckBox avec son nom. Il faudrait faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton9_Click()
        Dim cbx As CheckBox
        Dim i As Integer
     
        For i = 1 to 8
          Set cbx = Me.Controls("CheckBox" & i)
          cbx.Value = Not cbx.Value
        Next i
    End Sub
    Je n'ai pas testé...

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Et bien voila, c'est quasi-exactement le code que j'avais fait. Cependant le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set cbx = Me.Controls("CheckBox" & i)
    me marque une incompatibilité de type, et en essayant de changer ce code, c'est toujours la ligne de code ou apparait dedans la concaténation suivante :
    Donc je ne suis meme pas persuadé qu'il y ai une solution à ce problème en ne pouvant pas "indicer" ou "numéroter" les CheckBox, je cherche juste une solution à ce problème !

    Edit : Je n'avais même pas pensé au "not" ... Quel bleu !

  7. #7
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    bonjour à tous, il me semble que tu as déjà une solution pour faire une boucle sur tes checkbox. voir ce récent post.

    il te suffit de l'adapter à ce que tu souhaites faire.

    comme çà (pas tester):
    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
    Private Sub CommandButton1_Click()
    Dim Ctrl As Control
     
    For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is MSForms.CheckBox Then
            Select Case Ctrl.Object.Value
                Case True
                    Ctrl.Object.value = False
                Case False
                    Ctrl.Object.value = True
            End Select
        End If
    Next Ctrl
     
    End Sub

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Bonjour rvtoulon,

    En effet je me rappelle de ce post, c'est le mien

    Cependant j'ai 32 CheckBox et au final je veux les inverser 8 par 8, donc il me faudrait forcément un moyen de les numéroter.

    Ou alors je fais une boucle qui me le fait que 8 fois mais du coup ça partira toujours de la premiere CheckBox et de la 9 a la 32 il me serait impossible de les bidouiller.

    Enfin voila, avis aux personnes ayant envie de se pencher plus dessus ce n'est qu'une optimisation comme marqué dans le titre donc ne vous prenez pas trop la tête dessus vu que le code marche quand meme

    Mais c'est pour un soucis de propreté quoi (je suis en stage et je dois imprimer mon code pour mon rapport ... ça fait tache quand meme ...)

  9. #9
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Un autre exemple qui fonctionne (comme tous ceux donnés précédemment)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton9_Click()
    Dim i As Byte
     
    For i = 1 To 8
        Me.Controls("CheckBox" & i).Value = Not Me.Controls("CheckBox" & i).Value
    Next
     
    End Sub

  10. #10
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    re, avec le code de ZebreLoup

    remplace par EDIT: Désolé j'ai posté en doublon avec Fring

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    "Un autre exemple qui fonctionne (comme tous ceux donnés précédemment)
    "

    Euh ... Bah non, soit c'est moi qui suit complètement con, soit c'est la version, soit on est déja le 21 décembre...

  12. #12
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par brownthefou Voir le message
    mais du coup ça partira toujours de la premiere CheckBox et de la 9 a la 32 il me serait impossible de les bidouiller
    Il y a des tas de possibilités mais comment comptes-tu "bidouiller" ? En d'autres termes, comment vas-tu définir la CheckBox de départ ?

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 85
    Points : 96
    Points
    96
    Par défaut
    Bien joué

    rvtoulon tu as vu juste, je n'avais pas du tout vu ça et ça fonctionne (enfin !!)

    Merci à tous pour vos essais

    Cordialement

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

Discussions similaires

  1. [XL-2003] Remplir un tableau avec les noms des cellules
    Par tioch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2011, 19h24
  2. Export vers Excel avec les noms des colonnes
    Par JauB dans le forum AS/400
    Réponses: 7
    Dernier message: 04/02/2011, 10h18
  3. liste déroulante avec les noms des feuilles d'un classeur fermé
    Par winclass dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/12/2008, 23h39
  4. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 14h47
  5. Réponses: 2
    Dernier message: 01/08/2006, 14h38

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