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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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, 09h15
  2. [VBA Excel] Lien entre userforms
    Par violette_china dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/11/2006, 02h21
  3. Réponses: 2
    Dernier message: 09/11/2006, 22h42
  4. [VB.net] Naviguation entre fenêtres WindowsForm
    Par mysterio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/10/2006, 15h58
  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, 08h45

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