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 :

Attribution de variable à des checkbox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Décembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : amateur
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2019
    Messages : 5
    Par défaut Attribution de variable à des checkbox
    Bonjour à la communauté. c'est ma première demande d'aide qui vous est acheminé.


    VBA excel Pour quelle raison mon programme exécuté en mode pas à pas fonctionne bien et en temps réel ne fonctionne pas bien.
    Le rafraîchissement des checkbox n'est pas effectué en temps réel alors qu'il l'est en mode pas à pas?
    Le programme interroge une base de donnée et sauve l'info dans des variables matriciels. l'info est bien sauvegardé dans les variables. Les valeurs affectées aux checkbox ne passent pas lorsque le programme roule en temps réelle alors que les cellules le sont.

    Merci d'avance pour le support.
    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
            For I = 0 To K - J
                    Range("A2").Value = Nom(I)
                    Range("B2").Value = Prenom(I)
                    Range("A5").Value = Date_insp(I)
                    Range("B5").Value = Modele(I)
                    Range("C5").Value = No_serie(I)
                    Range("D5").Value = Marque(I)
                    Range("E5").Value = Lot(I)
                    Range("F5").Value = Capacite(I)
                    Range("G5").Value = Date_Achat(I)
                    Range("C13").Value = Quinc_Defaut(I)
                    Range("E13").Value = Quinc_correctif(I)
                    Range("C15").Value = Sangle_Defaut(I)
                    Range("E15").Value = Sangle_correctif(I)
                    Range("C17").Value = Couture_Defaut(I)
                    Range("E17").Value = Couture_correctif(I)
                    Range("C19").Value = Etiq_Defaut(I)
                    Range("E19").Value = Etiq_correctif(I)
                    Range("C21").Value = Autre_Defaut(I)
                    Range("E21").Value = Autre_correctif(I)
                    Range("E27").Value = Inspecteur(I)
                    Range("C24").Value = Commentaire(I)
                    CheckBox1.Value = QuincAccept(I)
                    CheckBox2.Value = QuincRejet(I)
                    CheckBox3.Value = QuincNA(I)
                    CheckBox4.Value = SanglesAccept(I)
                    CheckBox5.Value = SanglesRejet(I)
                    CheckBox6.Value = SanglesNA(I)
                    CheckBox7.Value = CouturesAccept(I)
                    CheckBox8.Value = CouturesRejet(I)
                    CheckBox9.Value = CouturesNA(I)
                    CheckBox10.Value = EtiqAccept(I)
                    CheckBox11.Value = EtiqRejet(I)
                    CheckBox12.Value = EtiqNA(I)
                    CheckBox13.Value = AutreAccept(I)
                    CheckBox14.Value = AutreRejet(I)
                    CheckBox15.Value = AutreNA(I)
     
               If I = K - J Then
                    L = 1
                        For L = 1 To 15
                            ActiveSheet.OLEObjects("CheckBox" & L).Object.Value = False
                        Next L
                    Exit Sub
               Else
                ActiveSheet.PrintPreview
               End If
     
            Next I

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Pour quelle raison mon programme exécuté en mode pas à pas fonctionne bien et en temps réel ne fonctionne pas bien.
    Parce que vous êtes beaucoup plus lent que le microprocesseur de votre PC.

    mettez DoEvents après le remplissage de la dernière ChekBox (juste avant le If I = K - J Then) et essayez.

    DoEvents va permettre de laisser finir les tâches précédentes avant de passer à la boucle suivante.

    Cdlt

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    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 121
    Par défaut
    Salut

    est inutile avant une boucle for, L prendra la valeur de la 1ère borne quoi qu'il arrive.

    Pour la remise à false des checkbox, il faut la sortir de la boucle For

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'On boucle pour faire le publipostage
    For I = 0 To K - J
    '....
    Next
     
    'On boucle sur les checkbox
    For L = 1 To 15
          ActiveSheet.OLEObjects("CheckBox" & L).Object.Value = False
    Next L
    Un conseil, il est fortement recommander de renommer les contrôles, ça rend le code plus lisible et bien plus facile à entretenir/débugger par la suite. (Bien que je comprends dans le contexte de votre code que vous souhaitiez garder une racine commune "CheckBox" et un numéro d'ordre, garder "CheckBox" n'est pas parlant et risque de générer des problèmes en cas de suppression de checkbox.
    Peut-être devriez vous nous en dire un peu plus sur le code global, il y a peut-être des simplifications à réaliser.

    ++
    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

  4. #4
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Décembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : amateur
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2019
    Messages : 5
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Excusez pour le délai mais malheureusement ça ne fonctionne pas.

    Citation Envoyé par Qwazerty Voir le message

    Merci pour ton aide ! Effectivement la fonction DoEvents a réglé mon problème. Par contre il a fallu que je l'implante pour chaque checkbox.
    Merci encore pour l'info. Je n'aurais jamais pu trouver cette fonction seul.

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    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 121
    Par défaut
    Salut

    C'est ARTURO83 qui t'a guidé vers le DoEvents.

    Par contre pourrais-tu mettre ton code modifé, il n'y a pas de raison pour que DoEvents soit nécessaire aussi souvent à mon avis.

    ++
    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

  6. #6
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Décembre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : amateur
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2019
    Messages : 5
    Par défaut
    C'est peu étégant mais ça fait le travail.

    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
            For I = 0 To K - J
                    Range("A2").Value = Nom(I)
                    Range("B2").Value = Prenom(I)
                    Range("A5").Value = Date_insp(I)
                    Range("B5").Value = Modele(I)
                    Range("C5").Value = No_serie(I)
                    Range("D5").Value = Marque(I)
                    Range("E5").Value = Lot(I)
                    Range("F5").Value = Capacite(I)
                    Range("G5").Value = Date_Achat(I)
                    Range("C13").Value = Quinc_Defaut(I)
                    Range("E13").Value = Quinc_correctif(I)
                    Range("C15").Value = Sangle_Defaut(I)
                    Range("E15").Value = Sangle_correctif(I)
                    Range("C17").Value = Couture_Defaut(I)
                    Range("E17").Value = Couture_correctif(I)
                    Range("C19").Value = Etiq_Defaut(I)
                    Range("E19").Value = Etiq_correctif(I)
                    Range("C21").Value = Autre_Defaut(I)
                    Range("E21").Value = Autre_correctif(I)
                    Range("E27").Value = Inspecteur(I)
                    Range("C24").Value = Commentaire(I)
                    CheckBox1.Value = QuincAccept(I)
                    DoEvents 'DoEvents donne le temps à l'objet de prendre sa valeur
                    CheckBox2.Value = QuincRejet(I)
                    DoEvents
                    CheckBox3.Value = QuincNA(I)
                    DoEvents
                    CheckBox4.Value = SanglesAccept(I)
                    DoEvents
                    CheckBox5.Value = SanglesRejet(I)
                    DoEvents
                    CheckBox6.Value = SanglesNA(I)
                    DoEvents
                    CheckBox7.Value = CouturesAccept(I)
                    DoEvents
                    CheckBox8.Value = CouturesRejet(I)
                    DoEvents
                    CheckBox9.Value = CouturesNA(I)
                    DoEvents
                    CheckBox10.Value = EtiqAccept(I)
                    DoEvents
                    CheckBox11.Value = EtiqRejet(I)
                    DoEvents
                    CheckBox12.Value = EtiqNA(I)
                    DoEvents
                    CheckBox13.Value = AutreAccept(I)
                    DoEvents
                    CheckBox14.Value = AutreRejet(I)
                    DoEvents
                    CheckBox15.Value = AutreNA(I)
     
               If I = K - J Then
                        For L = 1 To 15
                            ActiveSheet.OLEObjects("CheckBox" & L).Object.Value = False
                        Next L
                    Exit Sub
               Else
     
                ActiveSheet.PrintPreview
     
               End If
     
            Next I

    Merci encore.

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

Discussions similaires

  1. [WD14] Problème d'accès natif avec des checkboxes
    Par Baboulinet_ dans le forum WinDev
    Réponses: 8
    Dernier message: 04/02/2013, 09h05
  2. ajouter une partie variable à des checkbox
    Par koeuf dans le forum Général VBA
    Réponses: 2
    Dernier message: 18/06/2011, 14h46
  3. [Tableaux] Problème de foreach avec des checkboxes
    Par nanor21 dans le forum Langage
    Réponses: 10
    Dernier message: 15/05/2006, 01h04
  4. Problème simple avec des checkbox
    Par nanor21 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 00h26
  5. Problème d'attribut de lecture seule sur des dossiers
    Par Redbull dans le forum Sécurité
    Réponses: 2
    Dernier message: 09/08/2005, 09h52

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