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 :

UserForms.Add & fonction Hide


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut UserForms.Add & fonction Hide
    Bonjour

    J'ai presque finalisé mon fichier de maintenance mais je viens de voir qu'une fonction ne marche pas autant que souhaité...Je m'explique, enfin je vais essayer. J'appelle des UserForms grâce à plusieurs boutons chacun étant relié à un contenu de case variable du dit formulaire. Pour solutionner ce besoin j'ai eu recours à une syntaxe de ce genre :

    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
     
    Private Sub M01_Click()
     
    '
    '
    '
     
    ' Start Time + Accès Module
     
    If Not IsEmpty(Range("Trigram1").Value) And Range("Flag1").Value = 1 Then
     
        Dim Top1 As Date
        If Range("Top1").Value = "" Then Range("Top1").Value = Now
        Dim UF1 As String
        UF1 = Range("G7").Value
        UserForms.Add(UF1).Show
     
    End If
     
    End Sub
    Le soucis c'est qu'ensuite et dans le même UserForm, je peux le masquer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub MasqueModule_Click()
     
    Me.Hide
     
    End Sub
    mais ensuite si je le rappelle grâce au premier code, celui-ci n'a pas gardé les modifications de l'utilisateur (check-list cochée, champ de saisie pour mesures ou autres commentaires).En fait dans ce cas il ouvre à priori un autre UserForm, identique mais vierge...

    Connaissaissez-vous une solution ou une piste pour solutionner ce pb svp ?

    Merci par avance

    Laurent

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    bonjour

    Là je ne peux plus tester...L'ordi à casa n'est malheureusement pas équipé pour. Pour ce qui est de ta déclaration UserForm je ne vois qu'une chose problématique à mes yeux et pour mon niveau de compétence actuel : où la placer pour la rendre toujours valide et pour ne pas la solliciter plusieurs fois ? "Relire" ce SET reviendrait dans ce cas au même problème non ?!?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Pardonne-moi mais je ne vois pas comment déclarer ce SET une seule et unique fois dans ce que tu nommes "l'en tête du module usf". Que représente et où se situe ce terme pour toi ? Mon formulaire ne comprends qu'un bouton par UF car il y en a déjà 27 différents et affichables en même temps... En prévoir 2 pour accéder à chaque UF surchargerait vraiment mon interface

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok, j'ai compris.
    La syntaxe que tu utilises est celle à utiliser si le nom est placé dans une variable
    J'ai donc testé et n'ai aucun problème avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click()
        Dim UF1 As String
        UF1 = Range("G7").Value
        UserForms.Add(UF1).Show
    End Sub
    Je peux masquer et ré-afficher UF1 autant que je veux. Ton pb doit être ailleurs. Je te mets mon test Pièce jointe 26389
    Comme quoi, j'apprends tous les jours. Donc, merci
    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Tu arrives avec ce code à ré-afficher l'UF en gardant les modifs utilisateur (texte, check, etc.) ?!? De mon côté j'arrive aussi à l'ouvrir de nouveau mais sans garder ce qui a changé. Hmmmm, c'est cool pour toi mais cela ne me rassure pas lol A priori tu me dis que j'ai un bug ailleurs alors, mais où ?!? Mon code et sa structure ne sont pas si complexes que ça pffff c'est pas gagné gagné comme dirait Calcifer...

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Calcifer n'y est pour rien.

    Intéresse-toi plutôt aux différents évènement d'un UserForm et à quand ils sont subis par l'UserForm.

    Lorsqu'un évènement est subi, toutes les instructions contenues dans la procédure évènementielle sont bien évidemment exécutées.

    Voyons donc un peu ce qui se passe, par exemple, lorsque tu caches (Hide) un userForm ===>> il garde toutes ses valeurs
    Voyons maintenant (toujours dans cet exemple) ce qui se passe lorsque (show) on le montre à nouveau ====>> il subit l'évènement Activate

    Si, maintenant, des instructions sont présentes dans la procédure évènementielle Activate, elles s'exécuteront bien évidemment à nouveau ...

    Si les mêmes instructions sont par contre mises dans l'évènement Initialize de l'UserForm, c'est très différent car cet évènement n'est pas redéclenché par le Show.....

    Voilà ! ce n'est qu'un exemple ... A toi de chercher parmi tous tes évènements contenant, pour cet UserForm, des instructions... et à réfléchir sur ce qui se passe alors ...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Bonjour à toi

    Certains UFs possèdent des codes dans l'évênement Activate mais malheureusement pas ceux qui me posent "problème" dès le départ Je me posais aussi une autre question : toutes mes pages possèdent dans leur en-tête l'option suivante :

    Se pourrait-il que celle-ci amène des effets secondaires indésirables avec l'utilisation d'un code du type UserForms.Add ?!?

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En effet, si tu veux avoir des variables globales, tu mets Option Explicit dans le module qui contient la macro qui ouvre ton premier userfom, et tu déclares tes variables en Public dans ce même module.
    Par contre, avec ou sans Option Explicit, Hide n'efface pas le contenu des contrôles de l'userform seulement masqué.
    Testé avec Add.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Si dans mon cas perso la macro qui ouvre l'UF n'est pas écrite dans la page MODULE mais dans les macros de la feuille1 et que cette option "explicit" se trouve aussi dans cette même feuille (là ou l'usage du code PUBLIC n'est pas autorisé) ? Répercussion ? Emploi inadapté ?

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Emploi inadapté
    Au lieu de placer la macro dans la feuille de code de feuil1, place la dans un module standard, et dans feuil1, contente toi d'un appel de cette macro, avec paramètres si nécessaire.
    Si tu as un pb avec les paramètres, tu dis
    A+

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Ok pour le code dans MODULE. J'essayerai lundi... Pour en revenir à l'Option Explicit dans chaque page, j'utilisais celle-ci pour m'obliger à une rigueur d'écriture : qui fait quoi, où et comment. Je vois trop d'ingés au boulot qui font des copier-coller de formules sans déclaration et qui voient leurs fichiers fonctionner sur un ordi et pas un autre. Ceci à priori indépendement des versions Excel + ou - récentes et des librairies associées. A croire que certaines configurations permettent à excel de retomber sur ses pattes en cas de manques et d'autres pas... Pour ce qui est des pages autres que MODULE, à activer à l'écriture et désactiver au final alors ?

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re...

    (je reste sur ma toute première impression )

    Idée simple et efficace :

    1) tu mets ceci dans tous les évènements de tous tes userforms (en première ligne de chaque procédure évènementielle) :

    msgbox "le_nom_de_l'évènement" & "/" & "nom_de_l'Userform"

    2) tu lances fais ton Hide, puis ton show et tu notes tous les messages affichés

    Aussi (et juste pour le cas où) : à l'aide de ton éditeur (onglet édition/rechercher) : tu recherches partout, sur tous tes UserForms, la présence éventuelle d'un Unload de l'UserForm qui "perd ses valeurs par le Hide" (car il est clair que si l'userform considéré est déchargé depuis quelque part à un instant donné, ses valeurs seront perdues.... et un show le remontrera certes, mais "tout neuf")

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Merci pour cette idée très intéressante. Je la testerai lundi si l'écriture du code UserForms.Add dans la page MODULE ne donne rien Promis, quelque soit le résultat je reviens vous conter le récit de mes aventures laborieuses lol

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Bonsoir à tous

    Je vais essayer de résumer ce que j'ai testé aujourd'hui. Merci pour ton exemple Ouskel mais celui-ci n'est pas tout a fait dans la configuration initiale et décrite. Pour en revenir au fil de la discussion, le problème semble toujours être là : Plusieurs UserForms ouverts pour un même nom et ce quel que soit le contenu ou l'absence de l'évênement ACTIVATE Par chance et hasard, j'ai peut-être une solution, testée cet AM et qui fonctionne ! A vous de me dire ce qui est SHADOCK ou pas, ce qui tient du miracle voire du simplifiable !

    1er test : appel normal de l'UF dans la feuille FORMULAIRE et bouton HIDE dans l'UF = ça marche mais ce n'est pas la configuration requise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ' Start Time + Accès Module
     
    If Not IsEmpty(Range("Trigram1").Value) And Range("Flag1").Value = 1 Then
        Dim Top1 As Date
        If Range("Top1").Value = "" Then Range("Top1").Value = Now
        Vérification_pré_PM.Show
    End If
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub MasqueModule_Click()
     
    Me.Hide
     
    End Sub
    2ème test : appel de l'UF (dans la feuille FORMULAIRE) avec la formule UserForms.Add = problématique du réaffichage ne gardant pas les modifs utilisateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ' Start Time + Accès Module
     
    If Not IsEmpty(Range("Trigram2").Value) And Range("Flag2").Value = 1 Then
        Dim Top2 As Date
        If Range("Top2").Value = "" Then Range("Top2").Value = Now
        UF2 = Range("G8").Value
        UserForms.Add(UF2).Show
    End If
     
    End Sub
    3ème test : "sélection" de cet Uf cette fois dans la partie MODULE et non à partir des codes de la feuille FORMULAIRE = idem, même symptôme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ' Start Time + Accès Module
     
    If Not IsEmpty(Range("Trigram3").Value) And Range("Flag3").Value = 1 Then
        Dim Top3 As Date
        If Range("Top3").Value = "" Then Range("Top3").Value = Now
        Call Check3
    End If
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Check3()
     
    Dim Etiquette3 As Range
    Set Etiquette3 = ThisWorkbook.Worksheets(FORMULAIRE_PM_WK_NAME).Cells(9, 7)
    UserForms.Add(Etiquette3.Value).Show
     
    End Sub
    4ème test : en déclarant un object cette fois = plouf, même combat raté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Check4()
     
    Dim Etiquette4 As Range
    Set Etiquette4 = ThisWorkbook.Worksheets(FORMULAIRE_PM_WK_NAME).Cells(10, 7)
    Dim Formulaire4 As Object
    Set Formulaire4 = UserForms.Add(Etiquette4.Value)
    Formulaire4.Show
     
    End Sub
    5ème test : le meilleur pour la fin (logique d'utilisation un peu différente cette fois), celui-ci marche. Allez savoir pourquoi

    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
     
    Sub Check5()
     
    Dim Etiquette5 As Range
    Set Etiquette5 = ThisWorkbook.Worksheets(FORMULAIRE_PM_WK_NAME).Cells(11, 7)
     
    Dim i As Integer
     
        For i = 1 To UserForms.Count
            If UserForms(i - 1).Name = Etiquette5.Value Then
                UserForms(i - 1).Show
                Exit Sub
            End If
        Next
     
    UserForms.Add(Etiquette5.Value).Show
     
    End Sub
    Merci d'avance pour vos lumières lollll

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    mets en remarque ta dernière ligne
    'UserForms.Add(Etiquette5.Value).Show
    Que se passe-t-il ?
    Par simple curiosité... parce que tes codes dans la boucle (UserForms.(Etiquette5.Value).Show) et sur cette ligne (UserForms.Add(Etiquette5.Value).Show) ne sont pas les mêmes... ce qui pourrait être une indication...
    Juste pour savoir
    A+

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    hmmm... En fait ces 2 types de codes sont écrits ainsi ensemble et exprès. Tu as sans doute vu l'astuce : la macro regarde dans un premier temps si l'UF existe déjà. En fonction du résultat il l'affiche avec l'une ou l'autre méthode. Avec ou en contournant le fameux SET rédhibitoire. Voilà chef

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Question subsidiaire :
    Et avec "UserForms.(Etiquette5.Value).Show" tout seul, ça ne fonctionne pas ?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Non, il s'agit d'une numérotation d'UF à priori. En cas inverse le .Add semble nécessaire et là c'est rapé. On retombe dans les travers du 3ème et 4ème cas(...)

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Merci de ta non explication
    Mais je ne comprends pas non plus, je me coucherai aussi idiot que ce matin
    Bonne chance pour la suite et que ça continue à fonctionner "comme ça"

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 40
    Par défaut
    Pardonne ma "sauvagerie" excel mais je ne connaissais pas le vba il y a un mois. Je ne possède pas le vocable d'un initié, ce qui compte pour moi dans un premier temps c'est avant tout de mettre la balle dans le panier, pas la perfection du geste. Après j'explique et interprète avec mes mots. Peux pas faire plus pour l'instant, limité le gars à ce niveau lol Ce que j'en comprends, c'est qu'excel créé des UFs numérotés de 0 à ++. Cette astuce permet juste de contourner la syntaxe .Add et donc du coup permet un hide suivi d'une possibilité d'un réaffichage correct. Après, je ne pourrai pas rentrer dans plus de détails !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. JQuery, Firefox et les fonctions hide() show()
    Par jwhy-graphiste dans le forum jQuery
    Réponses: 2
    Dernier message: 07/08/2012, 17h37
  2. [XL-2010] Userform initialisé en fonction de la ligne selectionée
    Par pyronb69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/07/2012, 16h25
  3. [XL-2003] comportement bizarre fonction hide
    Par jumpman dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/06/2012, 23h17
  4. listes liées avec les fonctions hide et show de kquery
    Par rookieweb dans le forum jQuery
    Réponses: 3
    Dernier message: 22/12/2011, 18h22
  5. fonction hide
    Par tomtom187 dans le forum C++
    Réponses: 4
    Dernier message: 27/03/2006, 14h18

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