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 :

Show each picture ontime in a userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut Show each picture ontime in a userform
    Bonsoir

    J'ai dans mon userform 4 images que j'aimerai faire apparaitre tour a tour toutes les 5 secondes.
    Quelqu'un pourrait-il me donner un coup de main.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Je te propose ceci, dans le module associé au userForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
     
    Me.Image1.Visible = True
    Application.OnTime Now + TimeValue("00:00:04"), "subShowPic"
     
    End Sub
    Dans un module standard
    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
    Sub subShowPic()
    Dim i As Integer
     
    If fUsfIsLoaded("UserForm2") Then
        For i = 1 To 4
            If UserForm2.Controls("Image" & i).Visible Then Exit For
        Next i
     
        If i < 4 Then
            UserForm2.Controls("Image" & i).Visible = False
            UserForm2.Controls("Image" & i + 1).Visible = True
        Else
            UserForm2.Controls("Image4").Visible = False
            UserForm2.Controls("Image1").Visible = True
        End If
     
        Application.OnTime Now + TimeValue("00:00:05"), "subShowPic"
    End If
     
    End Sub
     
    Function fUsfIsLoaded(ByVal sUsfName As String) As Boolean
    Dim oUsf As Object
     
    For Each oUsf In VBA.UserForms
        If oUsf.Name = sUsfName Then Exit For
    Next oUsf
     
    If Not oUsf Is Nothing Then fUsfIsLoaded = True
     
    Set oUsf = Nothing
     
    End Function
    Cordialement,

    PGZ

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bojour,
    à rajouter dans ton UserForm

    Code UserForm2 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub subShowPic()
    Static i As Integer
    Me.Controls("Image1").Visible = False
    Me.Controls("Image2").Visible = False
    Me.Controls("Image3").Visible = False
    Me.Controls("Image4").Visible = False
    i = i + 1
    Me.Controls("Image" & i).Visible = True
    If i = 4 Then i = 0
        Application.OnTime Now + TimeValue("00:00:05"), "UserForm2.subShowPic"
    End Sub

  4. #4
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut
    Merci à pgz et rdurupt pour vos réponses.

    Au fait, avec la réponse de pgz, ça marchait déjà.
    Si vous pouvez mettre des commentaire a coté, se serai formidable pour pourvoir comprendre ce code que jusque là je n'y ai rien compris, même si ça fonctionne. Voilà pourquoi je vais encore attendre un peu avant de valider comme "Résolu"

    Merci encore.

    Mon Objectif est d'atteindre mon Objectif.
    RastaBomboclat

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub subShowPic() 'Je déclare un sub public dans mon formulaire pour la rendre accessible de l’extérieur.
    Static i As Integer 'je déclare une variable static pour que la valeur reste en mémoire même quand je quitte la sub et/ou le formulaire!
    'je masque toutes les images.
    Me.Controls("Image1").Visible = False
    Me.Controls("Image2").Visible = False
    Me.Controls("Image3").Visible = False
    Me.Controls("Image4").Visible = False
    i = i + 1 'incrément ma variable static pour quelle colle successivement aux images 1,2,3,4
    Me.Controls("Image" & i).Visible = True 'je rends visible limage qui correspond à i (1,2,3,4)
    If i = 4 Then i = 0 'si i match sur l'image 4 je replace i à zéro pour qu'a la prochaine incrémentation il affiche l'image1
        Application.OnTime Now + TimeValue("00:00:05"), "UserForm2.subShowPic" 'vue que ma sub est public j'y accède de l’extérieur du formulaire! 
    End Sub

  6. #6
    Membre éclairé Avatar de RastaBomboclat
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2014
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 240
    Par défaut
    Merci rdurupt

    Très claire

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Citation Envoyé par RastaBomboclat Voir le message
    Si vous pouvez mettre des commentaire a coté, se serai formidable
    Je pensais que c'était clair. Voici qq explications.

    A l'ouverture du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
     
    Me.Image1.Visible = True
    Application.OnTime Now + TimeValue("00:00:04"), "subShowPic"
     
    End Sub
    Le formulaire a été créé avec 4 images masquées. A l'ouverture du formulaire, on rend visible la première image et on commande l'exécution de "subShowPic" 5 s plus tard.
    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
    Sub subShowPic()
    Dim i As Integer
     
    If fUsfIsLoaded("UserForm2") Then
        For i = 1 To 4
            If UserForm2.Controls("Image" & i).Visible Then Exit For
        Next i
     
        If i < 4 Then
            UserForm2.Controls("Image" & i).Visible = False
            UserForm2.Controls("Image" & i + 1).Visible = True
        Else
            UserForm2.Controls("Image4").Visible = False
            UserForm2.Controls("Image1").Visible = True
        End If
     
        Application.OnTime Now + TimeValue("00:00:05"), "subShowPic"
    End If
     
    End Sub
    Le code vérifie que le formulaire est toujours ouvert et si c'est le cas, regarde quelle image est visible de Image1 à Image 4. Si c'est Image 1 à 3, alors l'image visible est masquée et la suivante est rendue visible (i et i+1). Si c'est l'image 4, alors elle est masquée et c'est la 1 qui est rendue visible (4 et 1).
    Ceci fait, on programme à nouveau l'exécution de cette procédure 5 s plus tard. ET donc toutes les 5 s, l'image visible change.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function fUsfIsLoaded(ByVal sUsfName As String) As Boolean
    Dim oUsf As Object
     
    For Each oUsf In VBA.UserForms
        If oUsf.Name = sUsfName Then Exit For
    Next oUsf
     
    If Not oUsf Is Nothing Then fUsfIsLoaded = True
     
    Set oUsf = Nothing
     
    End Function
    Cette fonction permet de s'assurer que le formulaire est ouvert. Ici on parcourt la liste des usf ouverts (= collection VBA.UserForms). SI on trouve le nôtre, on sort de la boucle et l'objet dans oUsf, c'est notre formulaire. Si on ne trouve pas, on sort de la boucle avec oUsf = Nothing.
    Cordialement,

    PGZ

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub Test
    UserForm2.subShowPic 'Lance le formulaire!
    end sub

    Code UserForm2 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub subShowPic() 'Je déclare un sub public dans mon formulaire pour la rendre accessible de l’extérieur.
    Static i As Integer 'je déclare une variable static pour que la valeur reste en mémoire même quand je quitte la sub et/ou le formulaire!
    'je masque toutes les images.
    Me.Controls("Image1").Visible = False
    Me.Controls("Image2").Visible = False
    Me.Controls("Image3").Visible = False
    Me.Controls("Image4").Visible = False
    i = i + 1 'incrément ma variable static pour quelle colle successivement aux images 1,2,3,4
    Me.Controls("Image" & i).Visible = True 'je rends visible limage qui correspond à i (1,2,3,4)
    If i = 4 Then i = 0 'si i match sur l'image 4 je replace i à zéro pour qu'a la prochaine incrémentation il affiche l'image1
        Application.OnTime Now + TimeValue("00:00:05"), "UserForm2.subShowPic" 'vue que ma sub est public j'y accède de l’extérieur du formulaire! 
    me.show 'affiche le formulaire
    End Sub

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

Discussions similaires

  1. Utiliser Application.Ontime dans un userform
    Par escalopepane dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/10/2013, 13h53
  2. [XL-2010] Bug sur userform.show
    Par Pierre67 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 25/04/2012, 19h39
  3. [Toutes versions] continuer l'exécution de la macro après un userForm.show
    Par _Jnie_ dans le forum VBA Word
    Réponses: 4
    Dernier message: 28/12/2011, 19h35
  4. [PB] Méthode Show d'un Userform
    Par truman dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/08/2007, 14h37
  5. OnTime qui restaurera userform
    Par bill7 dans le forum Général VBA
    Réponses: 2
    Dernier message: 22/04/2007, 17h18

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