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 :

Problème checkbox et cellule boolean


Sujet :

Macros et VBA Excel

  1. #21
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je fournirai le projet complet dans la soirée ou demain, vous pourrez ainsi vérifier mes dires.
    Je veux bien, mais uniquement le code, car je n'ouvrirai en aucun cas un classeur !

    Bonjour AlainTech

    regarde ce que j'avais mis dans mon code plus haut, en commentaires, sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheckBox1.Value = toto.Value '* -1
    C'était justement en prévision d'une checkBox sur un userform (à décommenter dans ce cas), alors même que nous ne savions pas encore si sur feuille ou si sur Userform
    Amitiés

    Et de toutes manières (si l'on analyse tout ce mic-mac) :
    Que cherche-t-il finalement à faire, sinon donner en colonne B la valeur de la chechbox en fonction de ce qu'il y a en colonne C, sur la même ligne) ?
    Pourquoi alors tout ce Saint-Frusquin ?
    Il suffirait de procéder aux vérifications d' "acceptabilité" et de décider seulement alors de l'état de la checkBox, puis seulement alors d'affecter sa valeur au besoin rectifiée à la colonne B. Quand au 1 ou 0 à y mettre, c'est toujours bon en utilisant le carré de la valeur de la checkbox
    Mais bon ... on en est là à de l'analyse pure et simple.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  2. #22
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    @AlainTech

    J'avais compris que la réactivation venait de là, le problème, c'est que le Application.EnableEvents = false devrait empêcher l'appel à cette fonction à nouveau.
    Qui plus, j'ai lu dans la fiche technique microsoft (msdn), que les valeurs true et false étaient traduites de la manière suivante dans une feuille de classeur :
    0 indique False
    -1 indique true
    Ces deux valeurs sont exactement identiques à true et false et peuvent être utilisées en tant que variables booléennes, car c'est ainsi que le mot "true" et le mot "false" sont transcrits par l'interprétation du code. C'est également le seul moyen pour contourner la portabilité d'une application fonctionnant sur des machines françaises et anglaises (je parle des paramètres régionaux), car les true et false sont automatiquement traduits en français en VRAI et FAUX. L'erreur, d'après le site officiel de microsoft, ne viendrait donc pas de là.

    @unparia
    Je ne donne que mes codes ne tkt pas, jamais de classeur.
    Ensuite, ce que je cherche à faire, c'est enregistré la valeur de L1, qui correspond à si l'utilisateur a lu ou non un texte.
    Vous pourrez le constater par vous même avec mon code complet.
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  3. #23
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    ne tkt pas
    Traduction, s'il te plait ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #24
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Difficile à suivre...
    En VB/VBA False = False et True = True
    Laisse tomber les valeurs numériques

    Essaie ceci
    et regarde de qui est inscrit dans la cellule
    MPi²

  5. #25
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Parmi
    Son problème n'est pas vraiment là.
    Il commence en fait par une mauvaise analyse (et conception) et se termine par une mauvaise compréhension.
    Exécute déjà ceci depuis un userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox application.name
    et tu sauras quels sont les évènements qu'il inhibe ou autorise par ses "Application.EnableEvents".
    Les inhibitions et autorisations qu'il souhaite faire ne peuvent s'obtenir que par utilisation d'une variable booléenne tremplin
    Mais attendons donc de connaître tous les tenants et aboutissants. Il est tout-à-fait probable que la solution soit très simple : une approche totalement différente, en fait.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #26
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    @unparia
    Désolé pour "ne tkt pas". C'est l'abréviation de "ne t'inquiète pas".

    @parmi
    Regarde le résultat : Nom : Capture.JPG
Affichages : 208
Taille : 119,3 Ko
    C'est ce que j'expliquais, à cause des paramètres régionaux, les TRUE et FALSE sont traduits dans la langue utilisée, ce qui cause problème.

    @unparia
    Tu m'intrigues, pourrais-tu me donner plus de détails, s'il-te-plait?

    Explication de la conversion du true et false en -1 et 0 : https://msdn.microsoft.com/en-us/lib...or=-2147217396

    Voici le code du projet correspondant :

    dans l'usf :
    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
     
    Private Sub UserForm_Initialize()
        Module1.ligne = 2 'indique la ligne de la première consigne affichée
        Call Module1.remplirTexte(Me) 'Remplissage des consignes
    End Sub
     
    Private Sub L1_Click()
        Application.EnableEvents = False
        With Sheets(1).Range("B" & Module1.ligne)
            If Sheets(1).Range("C" & Module1.ligne).Value = False Then
                If .Value = False Then
                    .Value = 1
                Else
                    .Value = 0
                End If
            Else
                Me.L1.Value = 1
            End If
            Me.L1.Value = .Value
        End With
        Application.EnableEvents = True
    End Sub
    Il y a un textbox nommé consigne et une checkbox nommée L1.

    dans le module1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public ligne As Integer
     
    Public Sub remplirTexte(usf As UserForm)
        With Sheets(Module1.role)
                usf.Controls.Item("consigne").Value = .Range("A" & ligne).Value 'consigne texte
                usf.Controls.Item("consigne").BackColor = .Range("E" & ligne).Interior.Color   'consigne couleur
                usf.Controls.Item("consigne").Value = .Range("B" & ligne).Value 'checkbox "lu"
        End With
    End Sub
    et dans ma feuille :
    Nom : Capture.JPG
Affichages : 220
Taille : 66,5 Ko
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  7. #27
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    On dirait que je n'ai pas été assez clair.

    Dans ton dernier code, il y a encore des
    et
    Ces instructions font "sauter" le EnableEvents. Dans le deuxième cas, si .Value vaut 1.

    Pour éviter tout problème d'encodage par les utilisateurs, l'idéal, pour ne pas modifier totalement le projet, est de mettre des cases à cocher sur les cellules où tu demandes de mettre des 1 ou 0.
    Ces cases à cocher seraient liées à la valeur de la cellule sur laquelle elles sont.
    Ou alors, toujours pour ne pas perturber les utilisateurs, utiliser la technique du "* - 1", dans le code, proposée par unparia.

    De plus, ton problème de langue n'en est pas un.
    C'est Excel qui interprète True ou False en fonction de la langue utilisateur. VBA, lui, s'y retrouvera toujours et sa langue est l'anglais.
    Tu peux donc avoir Vrai dans une cellule Excel en français, VBA lira la propriété Value de cette cellule comme True.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #28
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    1) Si tu veux de l'aide, ami, il va falloir que tu te montres au moins précis, soigneux et cohérent !
    Ce n'est pas le cas et j'en veux pour preuve, déjà, la coexistence de ces deux lignes dans la même procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     usf.Controls.Item("consigne").Value = .Range("A" & ligne).Value 'consigne texte
     ...
     usf.Controls.Item("consigne").Value = .Range("B" & ligne).Value 'checkbox "lu"
    La seconde vient bien manifestement écraser la première dans la textbox Consigne ! A quoi sert donc la 1ère ?
    Ah ! Ce n'est alors finalement pas ton VRAI code ? Tiens donc ! Et pourquoi donc ?

    2) oublie complètement ton code et décris-nous, pas à pas, en langage naturel (en français de tous les jours) le mécanisme que tu veux mettre en oeuvre.
    Soit très clair dans tes explications, sans roman. Et précise-nous entre autres à quoi tu reconnais qu'il y a eu lecture ou non.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #29
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    @AlainTech
    Oups désolé, mauvaise version du code (même si selon la spé microsoft ça ne change rien).

    Voilà le code mis à jour :

    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
    Private Sub UserForm_Initialize()
        Module1.ligne = 2 'indique la ligne de la première consigne affichée
        Call Module1.remplirTexte(Me) 'Remplissage des consignes
    End Sub
     
    Private Sub L1_Click()
        Application.EnableEvents = False
        With Sheets(1).Range("B" & Module1.ligne)
            If Sheets(1).Range("C" & Module1.ligne).Value = False Then
                If .Value = False Then
                    .Value = -1
                Else
                    .Value = 0
                End If
            End If
            Me.L1.Value = .Value
        End With
        Application.EnableEvents = True
    End Sub
    @unparia
    Merci, je n'avais même pas remarqué! Oui c'est totalement absurde, voici la correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public ligne As Integer
     
    Public Sub remplirTexte(usf As UserForm)
        With Sheets(Module1.role)
                usf.Controls.Item("consigne").Value = .Range("A" & ligne).Value 'consigne texte
                usf.Controls.Item("consigne").BackColor = .Range("E" & ligne).Interior.Color   'consigne couleur
                usf.Controls.Item("L1").Value = .Range("B" & ligne).Value 'checkbox "lu"
        End With
    End Sub
    Heureusement que vous êtes là, j'ai avancé dans mon projet sans me rendre compte de ce problème!
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  10. #30
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Et les réponses à mon point 2 ? (à rédiger non en code, mais en langage naturel). Aux oubliettes ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #31
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je ne voies pas l'utilité de ce code et encore moins la finalité!

    mais je note que 33 postes sur un code de 16 ligne pose clairement un manque de précision sur les tenant et les aboutissant? voir une incompréhension du demandeur sur la finalité de sont propre code!

    ce que je voies c'est que la seule valeur qu'il l’intéresse c'est Me.L1.Value = .Value hors si c'est un booléen c'est mieux vue que c'est justement ce que veut me.li?

    si c'est une présentation de 0/1 dans la feuille excel c'est autre chose!

    je ne pense pas être capable de venir en aide à notre amis (trop d’incohérence dans le raisonnement), mais si je peux l'aiguiller pourquoi pas!

    la fonction ABS retour la valeur absolu d'un nombre positif ou négatif!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    debug.print Abs(-1) '=1 
    debug.print Abs(True) '=1
    debug.print Abs(0) '=0
    debug.print Abs(False) '=0
    un booléen ne pren que 2 valeurs True/false seule le false est test 0/????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print Cbool(1234567890) '=true!
    inutile de tester un booléen pour affecter la même valeur ou son contraire à un autre booléen!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim a as booleent,b as booleen
    a=true
    b= a 
    b = not a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim a as booleant
    dim b as integer
    a= true
    b=abs(a)
    a= cbool(b)
    a= not cbool(b)

  12. #32
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Et dans le dernier code, il y a toujours un qui va tout faire planter si .Value vaut 1.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #33
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je suis content de voir que l'on vient peu à peu à la sagesse, rdurupt et AlainTech
    1) rappelons (je l'ai dit plus haut, que Application.EnableEvents ne saurait concerner les évènements d'un UserForm, l'objet Application n'étant que l'Application Excel)
    2) la valeur absolue de -1 est en effet 1 et l'utilisation de l'opérateur And (en comparaison de bits) ferait parfaitement l'affaire
    3) et surtout : je ne vois pas quel est l'intérêt de la mise en place d'un contrôle de lecture basé sur le fait que la lecture a été faite. Si l'on sait (en colonne C) que la lecture a été faite, pourquoi contrôler qu'elle l'a été ? Bizarre !. Et par ailleurs : si l'on a mis un "drapeau" en colonne C du seul fait de l'affichage d'un texte, cela ne prouve en aucune manière qu'il a été LU. On ne parlerait alors plus de lecture, mais d'affichage à un moment donné.
    Allons allons ! je ne connais personnellement aucune autre manière de vérifier qu'une lecture a bien été faite que celle d'une/des question(s) relative(s) à ce qui figurait dans le texte à lire. Cette/ces question(s) peu(ven)t faire l'objet de cases à cocher et de vérification selon que la "coche" est celle attendue. Cette vérification peut se faire de la manière la plus "bête" du monde : la réponse attendue (1 ou 0) en propriété tag de la checkBox. Et le contrôle de la justesse, par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Abs(chekbox1.value) And Val(chekBox1.tag) = 1
    .
    4) et maintenant, toujours pour être logique : écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CheckBox1.Value = Abs(chekbox1.value) And Val(chekBox1.tag) = 1
    pour cocher la textbox si juste ou la décocher si faux relèverait de l' ingénuité la plus totale ! L'utilisateur saurait ainsi que son geste n'était pas le bon et le corrigerait !
    La logique voudrait qu'on le rejette (ou l'invite à relire) à la fin de ses "réponses", si ne nombre des réponses "justes" n'est pas suffisant.
    Ai-je fait le tour ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  14. #34
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut
    Bonjour Robert,
    je note que 33 postes sur un code de 16 ligne pose clairement un manque de précision sur les tenant et les aboutissant? voir une incompréhension du demandeur sur la finalité de sont propre code!
    Je ne peux qu'abonder dans ton sens
    et pour ma part, j'aurais conservé la valeur booléenne dans la feuille excel, soit la valeur du contrôle CheckBox. Bien plus simple à gérer.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  15. #35
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Tout son problème résulte des différents va-et-vient successifs.
    En cliquant sur la combobox, il en modifie déjà la valeur. Il la remodifie ensuite depuis et déclenche donc à nouveau l'évènement click etc etc ..., mis de pire en pire car il modifie également des cellules de la feuilles de calcul, cellules dont il se sert de la valeur pour modifier celle de la combobox ... etc ...
    C'est toute sa démarche qu'il faudrait redéfinir plus proprement, mais cela ne peut se proposer valablement qu'en parfaite connaissance des tenants et des aboutissants (tous) que l'on ne connait toujours pas.
    S'il persiste toutefois dans ce mic-mac, qu'il s'y prenne au moins autrement :
    ceci, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private toto As Boolean
    Private Sub CheckBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
      toto = CheckBox1.Value
    End Sub
     
    Private Sub CheckBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
      CheckBox1.Value = Not toto '=====>>> ICI
    End Sub
    permet, on le voit bien, d'utiliser la combo sans déclencher son click ni modifier la valeur tout en permettant une autre action sur la valeur. Il lui suffit de remplacer la ligne où j'ai mi "ICI" en commentaires par sa sa décision d'attribution d'une valeur en fonctions de ses "trucs" dans ses cellules.
    A lui de se débrouiller avec cela, s'il tient vraiment à son étrange mécanisme.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #36
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    @unparia
    Petit oubli. En langage humain, ce que je veux simplement c'est :
    Cliquer sur une checkbox (cela veut dire que le message dans la textbox a été lu)
    Enregistrer cette valeur
    Et à la prochaine ouverture de l'application, que la checkbox reprenne la valeur enregistrée.

    @AlainTech
    Cela a été modifié dans le code. Les seules valeurs possibles sont -1 et 0 (voir dernier code donné) et dans ma feuille, il n'y a initialement qu'une seule valeur qui est 0. (Et toujours selon la spec microsoft vba, toute valeur différente de 0 utilisée dans un booléen est considérée comme true) même si pour empêcher l'ambiguïté, j'ai corrigé cela. Et le est nécessaire pour récupérer la valeur contenue dans la feuille.

    @unparia
    Il s'agit d'une application de communication entre 2 équipes. L'équipe du matin entre les consignes dans la textbox et celle de l'après-midi clique sur la checkbox pour confirmer avoir lu la consigne et le lendemain matin, l'équipe du matin vérifie que la consigne a été traitée, si elle ne l'a pas été, elle peut ainsi vérifier si la consigne a été lue ou non (c'est pour une question de responsabilité).
    Ensuite tu as mal interprété mon fichier, il n'y a rien dans la colonne C, ce que tu vois est seulement le texte de la colonne B qui déborde sur la colonne C.
    Je parle bien de lecture et non d'affichage. Le texte est affiché automatique, mais c'est à l'utilisateur de signaler le fait qu'il ai lu la consigne.

    Certes, mais je travaille dans une usine où les équipes n'ont que 3 minutes pour se donner entre 10 et 50 consignes selon la quantité de travail (elles sont écrites sur un cahier actuellement). Pas le temps de poser des questions donc sur le contenu des consignes, et ce n'est pas le but. Mon application est en fait un journal de bord quotidien, pour faciliter la communication entre 2 équipes de 10 personnes chacune. Il ne s'agit pas ici d'un questionnaire, mais d'une imputation de responsabilités associées à des événements.


    En très simple, je veux :
    A l'ouverture, un usf avec checkbox vide
    Cocher la checkbox
    Enregistrer sa valeur dans une feuille
    Fermer l'application
    Ouvrir l'application avec la checkbox cochée si c'était le cas la dernière fois

    @unparia
    ton code ne fait absolument, et même en ajoutant ma partie, il ne se passe rien du tout (la checkbox ne change pas, la valeur dans la feuille ne change, et je ne suis pas idiot, j'ai changé toto et checkbox1 avec mes valeurs)

    @unparia
    Qu'est censé faire le Application.EnableEvents alors?
    Car selon la spec micro vba, et les utilisations que j'ai pu en voir, il permet justement d'empêcher l'appel à des évènements, aussi bien du classeur que de l'usf, car l'usf est associé au classeur, et donc à l'application.
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  17. #37
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Cliquer sur une checkbox (cela veut dire que le message dans la textbox a été lu)
    Bien : qui clique ? l'utilisateur ?
    Enregistrer cette valeur
    Et à la prochaine ouverture de l'application, que la checkbox reprenne la valeur enregistrée.
    où ? précise donc (même si je devine ce que tu ne sais pas préciser
    Ensuite tu as mal interprété mon fichier, il n'y a rien dans la colonne C
    Ouais ? Mais ton code montre une utilisation de la colonne C ! Remplie par quoi et comment ?
    A l'ouverture, un usf avec checkbox vide
    Une checkbox ne saurait être "vide". Elle est cochée ou non cochée
    Enregistrer sa valeur dans une feuille
    Ou ? quand ? Comment ?
    Etc ... etc ...
    Ta réponse est un lot impressionnant d'imprécisions
    ton code ne fait absolument, et même en ajoutant ma partie, il ne se passe rien du tout (la checkbox ne change pas, la valeur dans la feuille ne change, et je ne suis pas idiot, j'ai changé toto et checkbox1 avec mes valeurs)
    Puisque TU le dis (et que l'on ne voit pas le code écrit) !!!!
    Qu'est censé faire le Application.EnableEvents alors?
    Car selon la spec micro vba, et les utilisations que j'ai pu en voir, il permet justement d'empêcher l'appel à des évènements, aussi bien du classeur que de l'usf, car l'usf est associé au classeur, et donc à l'application
    .
    NON, NON et re-NON : seuls sont concernés les évènements de l'Application (Excel) et en aucun cas deux de VBA (et donc de l'UserForm) !
    Tu commences à être pour le moins assez usant. Et je vais donc te laisser là.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #38
    Invité
    Invité(e)
    Par défaut
    Je confirme il n'est pas possible d'inhiber les évènements dans un userform!

    La seule façon que je connais est de déclarer un booléen et de le tester pour faire un exit de l'événement;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim inhiber as booleen
    private sub évènements()
    If inhiber = True then exit sub
    inhiber = True
    'Traitement 
    inhiber =False
    End sub
    mais j'ai des excuses, je n'ai jamais lu les spec micro vba!
    Dernière modification par Invité ; 07/05/2016 à 21h32.

  19. #39
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Points : 505
    Points
    505
    Par défaut
    @unparia
    1) Non mon chien! Oui évidemment l'utilisateur qui clique
    2) C'est écrit dans le code, il suffit de savoir lire : colonne B
    3) La colonne C est dans le cas où une réponse a été fournie. Non utilisée ici (si tu as remarqué, elle n'a aucune incidence sur le déroulement du code)
    4) Par vide j'entends non cochée
    5) Ou? Quand? Comment? : A propos de quoi sont ces questions? Toutes les questions que tu m'as posées dans ce message sont strictement inutiles (mis à part celle de la colonne C, et encore...)

    Par contre, il semblerait en effet que je me sois mépris à propos de l'utilisation de Application.EnableEvents. Je vous présente mes excuses à ce propos.

    @rdurupt
    Si c'est réellement le cas, alors tout ce sujet ne sert à rien.
    Politesse, respect et humilité sont les 3 éléments nécessaires dans une bonne relation d'entraide. Nous faisons cela par plaisir d'aider, ne nous le retirez pas

  20. #40
    Invité
    Invité(e)
    Par défaut
    @rdurupt
    Si c'est réellement le cas, alors tout ce sujet ne sert à rien.
    c'est Ok pour moi!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Problème selectOneItem avec un boolean
    Par toutoune60 dans le forum JSF
    Réponses: 28
    Dernier message: 05/11/2007, 22h23
  2. Problème alignement dans cellule sous IE
    Par mauriceuh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/02/2007, 13h08
  3. [VBA-E] Problème d'offset cellule
    Par GI_GI dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/01/2007, 10h47
  4. [VBA - Excel] Problème de deux cellules sur l'evenement OnChange
    Par champmart dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/01/2007, 17h06
  5. [VBA] problème choix de cellule dans feuille excel
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/02/2006, 10h48

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