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 :

Tester la valeur d'un formulaire [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut Tester la valeur d'un formulaire
    Bonjour,

    J'ai un formulaire dans lequel je laisse la possibilité à l'utilisateur de récupérer une et une seule option parmi plus d'une dizaine.
    Chaque option si elle est choisie, va effectuer l'action que je veux dans la page choisie par l'utilisateur.

    Du coup, j'ai un code comme suit:
    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
    If PM001.Value = True Then
        val = Sheets("PM001").Index
    ElseIf PM002.Value = True Then
        val = Sheets("PM002").Index
    ElseIf PM003.Value = True Then
        val = Sheets("PM003").Index
    ElseIf PM004.Value = True Then
        val = Sheets("PM004").Index
    ElseIf PM006.Value = True Then
        val = Sheets("PM006").Index
    ElseIf PM007.Value = True Then
        val = Sheets("PM007").Index
    ElseIf PM008.Value = True Then
        val = Sheets("PM008").Index
    ElseIf PM009.Value = True Then
        val = Sheets("PM009").Index
    ElseIf PM012.Value = True Then
        val = Sheets("PM012").Index
    ElseIf PM013.Value = True Then
        val = Sheets("PM013").Index
    ElseIf PM014.Value = True Then
        val = Sheets("PM014").Index
    ElseIf PM015.Value = True Then
        val = Sheets("PM015").Index
    ElseIf PM016.Value = True Then
        val = Sheets("PM016").Index
    ElseIf PM017.Value = True Then
        val = Sheets("PM017").Index
    End If
    Je voudrais savoir si par une boucle, ou autre, il peut sortir seul la valeur "true" et en fonction, de quelle valeur est true, faire varier le val en conséquence?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste avec un module de classe qui n'est pas vraiment encapsulé puisqu'il utilise une variable de l'UserForm mais bon !
    A mettre dans un module de classe nommé "Classe1" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public WithEvents GroupeOpt As MSForms.OptionButton
     
    Private Sub GroupeOpt_Click()
        UserForm1.Valeur = Worksheets(GroupeOpt.Name).Index
    End Sub
    A mettre dans le module de l'UserForm :
    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
     
    Dim Opt() As New Classe1
    Public Valeur As Integer
     
    Private Sub UserForm_Initialize()
     
        Dim Ctrl As Control
        Dim I As Integer
     
     
        For Each Ctrl In Me.Controls
     
            If TypeName(Ctrl) = "OptionButton" Then
     
                I = I + 1: ReDim Preserve Opt(1 To I)
                Set Opt(I).GroupeOpt = Ctrl
     
            End If
     
        Next Ctrl
     
    End Sub
     
    Private Sub CommandButton1_Click()
        MsgBox Valeur
    End Sub
    Pose un bouton sur l'UserForm nommé "CommandButton1" et testes !
    Pour une boucle, comme tu as des nombres qui ne se suivent pas, il faut faire un test dans la boucle avec un Select Case :
    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
     
    Private Sub CommandButton1_Click()
     
        Dim I As Integer
        Dim Valeur As Integer
     
        For I = 1 To 17
     
            Select Case I
     
                Case 1 To 4, 6 To 9, 12 To 17
     
                If Me.Controls("PM0" & Format(I, "00")).Value = True Then
     
                    Valeur = Worksheets("PM0" & Format(I, "00")).Index
                    Exit For
     
                End If
     
            End Select
     
        Next I
     
        MsgBox Valeur
     
    End Sub

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    compte tenu des noms que je vois (les mêmes pour les boutons et les feuilles), ceci (écrit à main levée) devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    toto = Array(PM001, PM002, PM003,PM004, PM006, PM007,PM008, PM009, PM0012,PM0013, PM0014, PM0015,PM0016, PM0017)
    for k = 0 to ubound(toto)
      if toto(k) = true then v = sheets(toto(k).name).index
    next
    '   msgbox v
    Et encore : car j'ignore l'aspect du userform. Car on peut également mettre tous ces boutons dans un frame et utiliser alors une boucle for each ... next, bien plus simple.

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour au forum,

    Salut Theze, unparia,

    Si l'on considère la "valeur" 'd'un formulaire, alors on peut, à mon avis, en définir une propriété.
    La lecture de cette propriété impactera la méthode à appliquer.

    Par hypothèse:
    - Un formulaire contenant 2 boutons d'option et un bouton de commande
    - Dans le classeur, 2 feuilles de travail nommées "lawks1" et "lawks2"

    A adapter bien entendu

    Code Formulaire

    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
    Option Explicit
     
    Property Get wkschoose() As String
     
      Dim c As msforms.Control
      Dim Counter As Byte
     
    wkschoose = ""
     
      Counter = 0
      Do While Counter < Me.Controls.Count And wkschoose = ""
        Set c = Me.Controls(Counter)
        If TypeName(c) = "OptionButton" Then
        If c.Value = True Then wkschoose = "lawks" & Replace(c.Name, "OptionButton", "")
        End If
        Counter = Counter + 1
      Loop
     
    End Property
     
    Private Sub CommandButton1_Click()
    Me.Hide
    End Sub
    Code module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Sub Testwks()
      With UserForm1
        .Show
          Worksheets(.wkschoose).Select
      End With
      Unload UserForm1
    End Sub
    A mon sens, l'avantage d'un tel processus réside en sa souplesse.
    En effet, d'ailleurs par définition, apparaîtra la propriété du formulaire lors de la saisie.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Bonjour,

    J'ai ouvert 2 topics pour 2 questions différentes dans mon userform et Mercatog (que je remercie) m'a fait un code qui cumule les deux questions: Autre topic

    Cela fonctionne, je mets donc en résolu, mais je converse avec lui pour comprendre son code, qui est d'un niveau plus élevé que ce que j'ai pu faire jusqu'à maintenant.

    Merci en tout cas pour votre aide.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à l'ami mercatog, bien entendu,

    Un avis sur le processus que je propose?

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Je décrypte et je reviens vers toi ^^"

    Je suis un peu lent, cette procédure va bien au-delà du niveau que j'ai pu avoir en formation vba avec mon boulot.

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour Marcel.

    Merci, j’apprends quelque chose de nouveau

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

Discussions similaires

  1. [formulaire] tester la valeur
    Par Invité dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/04/2006, 15h59
  2. Réponses: 2
    Dernier message: 30/11/2004, 02h36
  3. Réponses: 4
    Dernier message: 01/09/2004, 16h56
  4. [servlet][tester la valeur des champs récupérés]
    Par maya5 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/05/2004, 10h06
  5. [jsp] récuperation de valeur d'un formulaire
    Par peppena dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 30/03/2004, 21h00

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