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 :

Naviguer entre Userform [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut Naviguer entre Userform
    Bonjour a toutes et tous, Forum

    J'ai 6 Userforms et je souhaiterai svp un code qui me permetterai de naviguer

    entre elles par "Précedent" - "Suivante" - ("Annuler Retour" a l'UserForm1)


    Merci de votre aide et votre temps, je vous souhaite un bon Dimanche

    Cdtl Ray

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Ci-dessous un exemple de solution en partant d'une liste de nom de UserForm contenus dans la variable FormsList.
    Dans cette liste les noms des fenêtres sont dans l'ordre dans lequel il faut les afficher.

    Code ci-dessous à mettre dans un module.

    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
    65
    66
    67
    68
    69
    70
    Option Explicit
     
    Const FormsList As String = "UserForm1;UserForm2;UserForm3;UserForm4;UserForm5;UserForm6"
    Enum SensRecherche
        SEARCH_FORWARD = 0
        SEARCH_BACKWARD = 1
    End Enum
     
    Public Sub ShowNextForm(callerName As String)
        Call SetVisible(callerName, False)
        Call SetVisible(GetNextUserForm(callerName, SEARCH_FORWARD), True)
    End Sub
     
    Public Sub ShowPreviousForm(callerName As String)
        Call SetVisible(callerName, False)
        Call SetVisible(GetNextUserForm(callerName, SEARCH_BACKWARD), True)
    End Sub
     
    Public Sub ShowFirstForm(callerName As String)
        Call SetVisible(callerName, False)
        Call SetVisible(GetFirstUserForm(), True)
    End Sub
     
    Private Function GetFirstUserForm() As String
        Dim uFormNames() As String
        uFormNames = Split(FormsList, ";")
        GetFirstUserForm = uFormNames(0)
    End Function
     
    Private Function GetNextUserForm(userFormName As String, sens As SensRecherche) As String
        Dim uFormNames() As String
        uFormNames = Split(FormsList, ";")
     
        Dim i As Integer
        For i = 0 To UBound(uFormNames)
            If uFormNames(i) = userFormName Then
                Exit For
            End If
        Next i
     
        i = IIf(sens = SEARCH_FORWARD, i + 1, i - 1)
     
        If i < 0 Then i = 0
        If i > UBound(uFormNames) Then i = UBound(uFormNames)
     
        GetNextUserForm = uFormNames(i)
     
    End Function
     
    Private Sub SetVisible(userFormName As String, visible As Boolean, Optional Modal As FormShowConstants = vbModeless)
        Dim u As Object
        Dim target As Object
        For Each u In VBA.UserForms
            If u.Name = userFormName Then
                Set target = u
                Exit For
            End If
        Next u
     
        If target Is Nothing Then
            VBA.UserForms.Add (userFormName)
            Call SetVisible(userFormName, visible, Modal)
        Else
                If visible Then
                    target.Show (Modal)
                Else
                    target.Hide
                End If
        End If
    End Sub
    Enuite dans chaque UserForm :
    - le bouton <suivant> aura simplement à appeler ShowNextForm (Me.Name).
    - le bouton <précédent> aura simplement à appeler ShowPreviousForm(Me.Name).
    - le bouton <retour à la première fenêtre> aura simplement à appeler ShowFirstForm(Me.Name).

    Rmq : Dans ce code les fenêtres ne sont pas modale, pour ne pas multiplier les appels imbriqués de fonctions dans les dépiler lorsque la nouvelle
    fenêtre s'affiche.

  3. #3
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Salut BlueMonkey,

    Merci pour ta réponse, c'est sympa, donc si j'ai bien compris il me faut donc mettre 3 commandBouttons ou lequel svp qui serai le mieux adapter par UserForm

    1 Suivant le 2 Précédent et le 3 Retour UserForm1

    Voila a plus tard

    Bon Dimanche

    Ray

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Citation Envoyé par eliot.raymond Voir le message
    si j'ai bien compris il me faut donc mettre 3 commandBouttons ou lequel svp qui serai le mieux adapter par UserForm
    Si tu souhaites pouvoir avoir les 3 choix à partir de chaque fenêtre, le plus simple est en effet d'avoir les 3 boutons.

  5. #5
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Re, Salut

    J'ai essayer d'appeler les userforms avec des checkboxs ça fonctionne
    MAIS pas sur que ce soit le mieux aussi je te demande conseil svp

    je peux mettre quoi comme boutons d'appels qui serait mieux a raison de 3 par UF

    sinon quand je clic sur un checkbox l'userform1 s'efface et la 2 s'affiche c'est bon SAUF que je souhaiterai avoir toujours USF1 afficher.

    Merci a plus tard

    Ray

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Re.

    je peux mettre quoi comme boutons d'appels qui serait mieux a raison de 3 par UF
    Avec des checkBox il y a la notion de cocher/décocher. Si tu n'as pas besoin d'avoir ces 2 états, le plus simple était pour moi d'avoir les CommandButton avec le label précisé dans le post avec le code (précédent, suivant, ...)
    Mais c'est à toi de voir suivant ce qui à le plus de sens dans ton application.

    Quand je clic sur un checkbox l'userform1 s'efface et la 2 s'affiche c'est bon SAUF que je souhaiterai avoir toujours USF1 afficher.
    Si tu dois utiliser le code posté plus haut, ça serait bien que tu le comprennes un minimum.
    La routine SetVisible(userFormName As String, visible As Boolean, ...) permet d'afficher ou de masquer un fenêtre ayant le nom userFormName , suivant la valeur du paramètre visible.
    Donc si tu ne veux pas masquer les feuilles sur le clic de <suivant>, qu'est ce qu'il faut retirer dans le code
    de ShowNextForm(callerName As String)à ton avis ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Re salut

    Merci pour tes infos, je ne suis pas encore trop bon sur les userforms, mais je cherche.

    donc l'userform1 reste bien affichée, merci tu m'a bien aider.

    les autres UF se surperposent les unes aux autres.

    Peut-on faire en sorte svp qu'il ni ai qu'une seule Userform qui soit affiché a la fois car la les six se supperposent

    dans ton code je n'ai pas trouvé comment faire

    j'ai mis tous les commandbouttons suivant ton conseil c'est il fonctionnent tous

    Merci a plus tard

    Raymond

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Re.

    Si seul UserForm1 doit rester affiché, les autres doivent se masquer lorsqu'on clique sur <suivant>, remplace la routine ShowNextForm par celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub ShowNextForm(callerName As String)
        If callerName <> GetFirstUserForm() then
            Call SetVisible(callerName, False)
        End if
     
        Call SetVisible(GetNextUserForm(callerName, SEARCH_FORWARD), True)
    End Sub
    P.S. : lorsque tu souhaites simplement ajouter un réponse, le mieux est d'utiliser le bouton <Ajouter une réponse>.
    Le bouton <Citer> n'est utile que si la citation amène quelque chose à la réponse.

  9. #9
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Bonsoir BlueMonkey,

    Merci pour ta réponse hyper rapide, c'est gentil,

    Bon me reste beaucoup a apprendre, je vais bosser dessus les UserForms

    Ceci dit tous marchent très bien comme je souhaitai, grace a toi.

    je te remercie sincèrement beaucoup ainsi que de ta patience, et de ton aide.

    Une excellente soirée a toi

    Merci Cdtl Raymond

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Content que tu ais trouvé ce que tu cherchais.

    Bonne soirée également.

  11. #11
    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 : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par eliot.raymond Voir le message
    Bon me reste beaucoup a apprendre, je vais bosser dessus les UserForms
    Bonjour,

    Tant qu'à apprendre, intéresse-toi au contrôle Multipage.
    Ca permet d'avoir plusieurs UserForms en un avec possibilité de navigation entre tous sans boutons supplémentaires.
    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!

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

Discussions similaires

  1. [XL-2003] Naviguer entre des feuilles excel par UserForm
    Par P96O1004 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/04/2009, 10h15
  2. [VBA Excel] Lien entre userforms
    Par violette_china dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/11/2006, 03h21
  3. Réponses: 2
    Dernier message: 09/11/2006, 23h42
  4. [VB.net] Naviguation entre fenêtres WindowsForm
    Par mysterio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/10/2006, 16h58
  5. [VBA-E]Comment naviguer entre 2 classeur
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/03/2006, 09h45

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