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 :

UF - OptionButton - affichage/masquage Bouton_Ok


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut UF - OptionButton - affichage/masquage Bouton_Ok
    Bonjour,

    Je bute sur une boucle (?)

    Dans un UF :
    • 2 Frames
    • Dans Frame1 : 1 seul bouton d'option (OptionButton1)
    • Dans Frame2 : 4 boutons d'option (OptionButton2 à OptionButton5)

    Objectif :

    Si aucun de ces boutons n'est sélectionné, je souhaite que le CommandButton "Bouton_OK" soit masqué.

    Ce qui suit masque le Bouton_OK mais la sélection d'un bouton d'option ne le ré-affiche pas, ce qui ne me surprend pas.
    La détection d'un OptionButton à True se fait-elle aussi dans UserForm_Initialize() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
     
        For idx = 1 To 5
            If Me.Controls("OptionButton" & idx) = False Then
                Bouton_OK.Visible = False
            Else
                Bouton_OK.Visible = True
            End If
        Next idx
    Besoin de vos lumières, si possible,
    Cordialement,
    jp

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    L'évènement Userform_Initialize se déclenche au chargement du Userform, juste avant son affichage, une fois qu'il est chargé, tu peux sélectionner tous les OptionButton que tu veux, cet événement ne se déclenchera pas.

    Quand tu sélectionnes un OptionButton, c'est l'évènement OptionButton1_Click qui se déclenche.
    C'est sur cet évènement que tu dois utiliser ton code, et il faudra le faire sur l'événement Click de chaque OptionButton.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub OptionButton2_Click()
     
        For idx = 1 To 5
            If Me.Controls("OptionButton" & idx) = False Then
                Bouton_OK.Visible = False
            Else
                Bouton_OK.Visible = True
            End If
        Next idx

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub OptionButton1_Click()
      If OptionButton1.Value = True Then CommandButton1.Visible = True
    End Sub
    Comme il n'y en a pas de trop, à répéter sur chaque bouton.

    Sauf à les mettre tous à False par macro, une fois que tu as cliqué sur un, il y en aura toujours un et un seul coché par frame.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut
    Merci à tous les deux,

    Mat955,
    Tu proposes donc ce qui suit (si j'ai bien compris) pour chaque bouton ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub OptionButton1_Click()
        Bouton_OK.Visible = True
    End Sub
    Ce qui fonctionne manifestement très bien

    Pierre,
    Tu proposes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub OptionButton1_Click()
      If OptionButton1.Value = True Then CommandButton1.Visible = True
    End Sub
    Est-il nécessaire de tester l'état du Bouton d'Option ? Pourquoi ne pas considérer que c'est au moment où on sélectionne une Option que le Bouton_OK s'affiche ?

    J'ai bien pensé à mettre un Bouton à True par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        OptionButton1.Value = True
    End Sub
    Mais ces boutons d'option se répartissent dans 2 Frames et ils sont néanmoins "liés"...

    Je viens de retomber "par hasard" sur ce (ton) commentaire :
    Normalement, l'ergonomie Windows "impose" que dans le cas de boutons d'options, il y en ai toujours un par groupe qui soit sélectionné, même à l'ouverture d'un formulaire. Perso, pour respecter cette ergonomie et ne pas perturber l'utilisateur, j'aurais ajouté une option "Aucun choix" qui serait coché par défaut. Vérifier qu'on a fait un choix reviendrait à vérifier que cette option n'est pas True.

    Dans ce fil : https://www.developpez.net/forums/d1...ons-d-options/

    Question subsidiaire : comment remettre le focus sur le Bouton_OK quand il se ré-affiche ?
    (par rapport au Bouton_Annuler)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Bouton_Annulation_Click()
        Unload MenuPrint
    End Sub

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Le code suivant fonctionne, du moment que tu le mettes sur chaque optionbutton, car il n'est en effet pas nécessaire de tester l'état du bouton puisque ce sont des optionbutton, pas des checkbox. Dès lors, dès que tu cliques sur un, que ce soit pour l'activer ou le désactiver, il y en aura forcément un activé (vu ma remarque que tu soulignes par rapport à l'ergonomie Windows).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub OptionButton1_Click()
        Bouton_OK.Visible = True
    End Sub
    Citation Envoyé par mat955 Voir le message
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub OptionButton2_Click()
     
        For idx = 1 To 5
            If Me.Controls("OptionButton" & idx) = False Then
                Bouton_OK.Visible = False
            Else
                Bouton_OK.Visible = True
            End If
        Next idx
    Par contre, il n'est pas nécessaire de vérifier l'état de tous les boutons à chaque clic comme le fait le code de Mat, au vu de ma remarque ci-dessus. De plus, la boucle proposée ne sert à rien puisque c'est en fait le dernier optionbutton qui va déterminer la visibilité du commandbutton dans le code proposé. Il aurait fallu soit sortir de la boucle dès qu'un optionbutton était activé, soit utiliser bouton_ok.visible = bouton_ok.visible or me.controls("OptionButton" & idx) = false

    Si maintenant dans ton initialize, tu mets un des optionbuttons à true, alors, ton commandbutton devrait être toujours visible, toujours pour coller à ton énoncé qui dit que le bouton doit être invisible tant qu'aucun optionbutton n'est à True => si un est à True au départ, alors, le commandbutton doit être visible.

    Si tu souhaites qu'un optionbutton soit à True dès le départ, alors tu peux le préciser directement dans la propriété Value du bouton à la conception (fenêtre des propriétés lorsque l'optionbutton est sélectionné dans le usf en mode création.

    Perso, je n'utilise que très rarement l'évènement Initialize (je crois pouvoir dire jamais, mais on pourrait peut-être me prendre en défaut sur 25 ans de carrière).


    Ah, cette magnifique discussion que tu cites ici n'est pas le meilleur exemple qui soit, car truffée d'horreurs et de conn*** sans nom. Soit. La personne en cause n'étant plus active sur nos forums, je m'abstiendrai de commentaires plus... corrosifs. Je suis néanmoins toujours d'accord avec ce que j'ai écrit à l'époque, mais qui peut (doit) s'adapter au contexte.

    Dans le cas présent, il n'y a aucune case cochée au départ et tu en veux absolument une à l'arrivée. Le cas est donc différent de celui évoqué dans ladite discussion et dès lors, ta solution de n'avoir aucune option cochée au départ pourrait tenir la route. C'est toujours une question de contexte. Perso, je verrais plus vite une listbox qu'une suite d'options, ce qui permet d'avoir 0 items sélectionnés et qui, de mon estime, est plus conforme à une ergonomie "habituelle". J'agirais différemment avec le commandbutton, en manipulant plutôt la propriété Enabled que Visible, histoire que l'utilisateur voit le bouton, mais en grisé tant qu'il n'a pas choisi une option. C'est un rappel visuel utile lui permettant de savoir qu'il pourra valider mais pas dans l'état actuel du userform.

    Sans avoir tu ton userform et donc en quoi tes frames sont "liés", il me semble malaisé d'aller plus loin dans les réflexions techniques
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut
    Le code suivant fonctionne, du moment que tu le mettes sur chaque optionbutton, car il n'est en effet pas nécessaire de tester l'état du bouton (...)
    De plus, la boucle proposée ne sert à rien puisque c'est en fait le dernier optionbutton qui va déterminer la visibilité du commandbutton (...)
    C'est pour ça que j'avais proposé la version courte, sous réserve que je n'aie pas omis un détail dans l'explication de MAT

    Perso, je n'utilise que très rarement l'évènement Initialize (...)
    J'ai mis toutes les propriétés des OptionButton à False mais l'événement Intitialize paraît néanmoins nécessaire pour la première boucle (et indispensable pour la seconde) ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
     
        For idx = 1 To 5
            If Me.Controls("OptionButton" & idx) = False Then Bouton_OK.Enabled = False
        Next idx
     
        For idx = 1 To 5
            Me.Controls("OptionButton" & idx).Caption = Range("ABX" & idx + 6)
        Next idx
    End Sub
    Ah, cette magnifique discussion que tu cites (...)
    Pas eu le temps ou la perspicacité d'y voir les horreurs ; je n'en ai retenu que ce qui m'intéressait et que j'ai cité

    J'agirais différemment avec le commandbutton, en manipulant plutôt la propriété Enabled que Visible
    C'est noté et adopté. Assurément, c'est mieux !
    Perso, je verrais plus vite une listbox qu'une suite d'options

    C'était ma première idée et finalement, je suis arrivé à une autre, qui fonctionne, sous réserve qu'il n'y ait pas quelque chose qui m'échappe...
    Voici à quoi ressemblent mes UF

    Nom : Menu1.jpg
Affichages : 263
Taille : 52,2 Ko

    Nom : Menu2.jpg
Affichages : 245
Taille : 45,5 Ko

    Sans avoir tu ton userform et donc en quoi tes frames sont "liés" (...)
    Mes Frames sont liés, en espérant que ça se voit sur les images ci-dessus... J'ai bien compris que ce n'était pas très académique mais ça me paraît plus clair pour l’utilisateur.

    Et le code est ici :
    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
    Option Explicit
    Dim idx As Integer
    Private Sub Bouton_Annulation_Click()
        Unload MenuPrint
    End Sub
    Private Sub Bouton_OK_Click()
     
        Col_Déb_Impress = Range("ABX7")
     
        For idx = 1 To 5
            If Me.Controls("OptionButton" & idx) Then Col_Déb_Impress = Range("ABY" & idx + 6)
        Next idx
     
        Unload MenuPrint
        Call CreerPDF
    End Sub
    Private Sub UserForm_Initialize()
     
        For idx = 1 To 5
            If Me.Controls("OptionButton" & idx) = False Then Bouton_OK.Enabled = False
        Next idx
     
        For idx = 1 To 5
            Me.Controls("OptionButton" & idx).Caption = Range("ABX" & idx + 6)
        Next idx
    End Sub
    Private Sub OptionButton1_Click()
        Bouton_OK.Enabled = True
    End Sub
    Private Sub OptionButton2_Click()
        Bouton_OK.Enabled = True
    End Sub
    Private Sub OptionButton3_Click()
        Bouton_OK.Enabled = True
    End Sub
    Private Sub OptionButton4_Click()
        Bouton_OK.Enabled = True
    End Sub
    Private Sub OptionButton5_Click()
        Bouton_OK.Enabled = True
    End Sub
        Private Sub Répertoire_PDF_Click()
        Unload MenuPrint
        Call Voir_PDF
    End Sub
    (avec un grand merci à anasecu qui m'a beaucoup aidé)

    jp

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Sur l'ergonomie, d'abord. Perso, j'aurais mis les lundi et aujourd'hui dans le même frame puisque c'est UN lundi ou aujourd'hui, mais ça ne peut pas être les deux. Conceptuellement, c'est donc la même option. En pratiquant comme tu le fais, tu t'obliges à "décocher" par code les options d'un frame lorsque tu cliques sur l'autre alors que les boutons d'option t'offrent justement la possibilité de te passer de cela (mais je n'ai pas vu le code) ^^ Tu pourrais ne pas mettre de frame, de sorte que tes boutons jouent tous dans le même groupe, par exemple, tout en les laissant à leur place actuelle. Mais si tu préfères ton ergonomie à deux frames, pas de souci (il y a un adage qui dit "plus c'est simple pour l'utilisateur, plus c'est complexe pour le programmeur", mais je ne suis pas certain que l'utilisateur gagne en simplicité dans ce cas-ci).

    Pour l'initialize, tu peux te passer de la première boucle, puisque par défaut tes optionbutton ne sont pas cochés. Il ne sert à rien de le tester. La propriété Enabled du bouton peut être mises à False à la conception, puisque ce sera toujours le cas à l'ouverture du userform. Pas besoin de la mettre par code dans le Initialize.


    Tu dis que tes frames sont liés. Conceptuellement, on le comprend (voir ma remarque sur l'ergonomie), mais ce n'est que le code qui va pouvoir dire qu'ils sont effectivement liés. Car dans le cas présent et sans code spécifique, tu pourrais te retrouver avec un lundi coché ET aujourd'hui coché. Dans ce cas, tu auras deux impressions (rappel, sauf code spécifique pour décocher les options d'un frame lorsque l'on clique sur l'autre, code que je n'ai pas vu, je ne sais donc pas dire s'il existe)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut
    Bonjour,

    Perso, j'aurais mis les lundis et aujourd'hui dans le même frame (...)
    C'est Fait !
    Nom : UF2.jpg
Affichages : 210
Taille : 23,6 Ko

    (...) Les boutons d'option t'offrent justement la possibilité de te passer de cela (mais je n'ai pas vu le code^^)
    Les propriétés Value de tous les OptionButton sont à False.

    Tu pourrais ne pas mettre de frame )...)
    J'en ai quand même gardé un, pour d'arbitraires raisons "esthétiques"

    (il y a un adage qui dit "plus c'est simple pour l'utilisateur, plus c'est complexe pour le programmeur" (...).
    Je le vérifie régulièrement et le répète souvent à mes utilisateurs . Toujours le souci que ça soit le plus simple pour eux, tout en étant efficace et surtout fiable...

    Pour l'initialize, tu peux te passer de la première boucle, puisque par défaut tes optionbutton ne sont pas cochés (...)
    Première boucle supprimée !
    J'ai ajouté un test de sorte que si le classeur est ouvert un Lundi, l'OptionButton correspondant à aujourd'hui soit grisée (testée ici avec Samedi pour ne pas changer la date système de mon PC)

    Nom : UF2b.jpg
Affichages : 213
Taille : 21,9 Ko
    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
    Private Sub UserForm_Initialize()
     
    '    For idx = 1 To 5
    '        If Me.Controls("OptionButton" & idx) = False Then Bouton_OK.Enabled = False
    '    Next idx
     
        If Range("ABZ7") = 7 Then
            OptionButton1.Enabled = False
            Label2.Enabled = False
        End If
     
        For idx = 1 To 5
    '        Me.Controls("OptionButton" & idx).Caption = Range("ABX" & idx + 6)
            Me.Controls("OptionButton" & idx).Caption = Application.Proper(Format(Range("ABX" & idx + 6), "dddd dd mmm"))
        Next idx
    End Sub
    J'ai un peu triché en utilisant JOURSEM (plutôt qu'une formule VBA avec laquelle je n'étais pas à l'aise et dont je n'étais pas sûr qu'elle soit plus efficace). La cellule "ABZ7" renvoie le JOURSEM correspondant à Aujourd'hui.

    Tu dis que tes frames sont liés (...). Car dans le cas présent et sans code spécifique, tu pourrais te retrouver avec un lundi coché ET aujourd'hui coché (...)
    A priori, mes présentes modifs évitent cette éventualité ?!

    PS : tu vas peut-être me faire remarquer que j'aurais dû préférer Visible à Enabled pour Label2.Enabled = False.
    Le fait que l'utilisateur voit que le label est grisé me paraissait cohérent avec la date grisée.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je ne discute de l'ergonomie que lorsqu'elle me semble contraire aux usages où qu'elle impose du code là où l'on pourrait s'en passer Il serait vain selon moi de discuter d'esthétique. Cela ne me semble pas hérétique de mettre un frame qui a effectivement une utilité visuelle. Et, point de vue tout à fait personnel, je préfère un truc Enabled=false qu'un truc Visible=False qui laisserait un vide entre le bord supérieur du frame et le premier lundi.

    Là où je n'ai pas compris ton propos, c'est pour l'histoire de Joursem car je ne l'ai pas vu dans ton code. Cela dit, la fonction Weekday est sa soeur jumelle en VBA, comme l'illustre la copie d'écran ci-dessous qui nous renvoie à cette autre discussion sur les infobulles informatives...

    Nom : 2020-08-08_152143.png
Affichages : 202
Taille : 5,1 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut
    Bonjour Pierre,

    Il serait vain selon moi de discuter d'esthétique (...)
    J'avais bien mis des guillemets (...) pour d'arbitraires raisons "esthétiques"

    je préfère un truc Enabled=false qu'un truc Visible=False qui laisserait un vide entre le bord supérieur du frame et le premier lundi.
    Nous sommes donc d'accord.

    la fonction Weekday est sa soeur jumelle en VBA
    Merci ! Testé avec succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub joursem()
    Dim n°_Jour_Sem
        n°_Jour_Sem = Weekday(Range("ABX7"), vbSunday)
        MsgBox test
    End Sub
    (...) cette autre discussion sur les infobulles informatives...
    Oups, pas encore le réflexe mais je vais tâcher d'y penser. Merci pour ce précieux rappel !

    Là où je n'ai pas compris ton propos, c'est pour l'histoire de Joursem car je ne l'ai pas vu dans ton code
    Dans la feuille, ça donne :
    Nom : Tab Lun Result.jpg
Affichages : 204
Taille : 39,2 Ko
    Nom : Tab Lun form.jpg
Affichages : 210
Taille : 73,1 Ko
    Et je récupère le JOURSEM ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
     
        If Range("ABZ7") = 2 Then
            OptionButton1.Enabled = False
            Label2.Enabled = False
        End If
     
        For idx = 1 To 5
            Me.Controls("OptionButton" & idx).Caption = Application.Proper(Format(Range("ABX" & idx + 6), "dddd dd mmm"))
        Next idx
    End Sub
    La question est de savoir si c'est vraiment plus intéressant de passer par la formule en VBA ou par Excel ?!
    J'ignore s'il existe une doctrine en la matière : privilégier les formules dans les feuilles et récupérer les résultats dans le code ou traiter les formules préférentiellement dans le code ?!

    La chose que je redoute par dessus tout c'est quand on me demande de modifier la structure de mes feuilles (ajout de colonnes, de lignes, etc.) dans le cas bien sûr ou le code récupère le contenu de certaines (et souvent nombreuses) cellules...
    Mais là est un autre sujet...

    PS : je ne sais pas comment on cite un contributeur en intégrant son nom dans "ajouter une balise [Quote]"

  11. #11
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut
    PS : s'agissant de la modification de la structure d'un tableau, j'ai trouvé ceci fortuitement (en jetant un oeil sur ton profil !), qui semble être une piste voire un début de solution à mon problème :

    https://fauconnier.developpez.com/tu...el/recherchev/
    IV. Utilisation avancée
    IV-A. Utilisation d'une référence à la colonne source
    C'est d'autant plus fortuit que je sois arrivé là car depuis que j'ai découvert l'intérêt de combiner EQUIV et INDEX, j'utilise moins RECHERCHEV (problème qu'elle pose quand la cible est à gauche de la zone de recherche)

    Cordialement,
    jp

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

Discussions similaires

  1. ordre d'affichage / masquage fonctions Javascript
    Par figatelliSTI dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/03/2008, 14h44
  2. Applet et Affichage/Masquage d'une div
    Par aldev.web dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/01/2008, 16h41
  3. affichage/masquage en utilisant id
    Par destructive dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/04/2007, 14h48
  4. affichage masquage de DIV
    Par bleuerouge dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/01/2007, 11h02
  5. affichage / masquage d'un div
    Par viny dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 12/09/2006, 11h33

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