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 :

UserForm / Focus


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut UserForm / Focus
    Bonjour,

    J'ai une application excel sous la forme d'un UserForm qui me génere des classeurs excel en sortie. Je souhaiterais que quand je génere un nouveau classeur et que je le selectionne, mon userform disparaisse. (Une histoire de Focus?) et que quand je selectionne mon classeur contenant le userform il me le réaffiche.

    Merci.

    Laurent

  2. #2
    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
    Non ! Une histoire de Hide ->
    Si tu as un problème avec ton clavier, tu dis, on t'indiquera la voie à suivre

    Edit
    Bon, pour être tout à fait honnête, c'est un tout petit peu plus compliqué "après", pour le ré-afficher... Là il te faut un moyen. Je suggère le bouton dans une barre d'outils, que tu places à l'ouverture de ton fichier dans une barre d'outils d'Excel, et que tu supprimes à la fermeture de ton fichier.
    Ensuite, ton userform doit avoir la propriété ShowModal = False, sinon tu ne pourras pas accéder à ta feuille de calculs.
    Bref, tu vois et tu nous tiens au courant

  3. #3
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir, comme le dit ouskel'n'or, tu "hide" ton userform

    Dans le classeur d'origine, tu insères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub AfficherUF
    userform1.show
    End Sub
    et dans le classeur généré, tu codes dans ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_Activate()
     Run "ClasseurOrigine.xls" & "!AfficherUF"
    End Sub
    @+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    Par défaut
    Bonjour,

    Merci pour les infos.

    Donc premièrement, mon classeur résultat peut être généré à partir de différents formulaires (4). Donc existe-t-il une variable qui pointe sur le formulaire actif ou ouvert en dernier...

    Deuxiemement, comment créer la fonction WorkbookActivate du classeur généré à partir du classeur d'origine???

    Merci,

    Laurent

  5. #5
    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
    Comment génères-tu ce classeur ?

    Tiens, un exemple pour écrire du code dans un module (ici ThisWorkbook)
    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 EcrireDuCodeDansUnModule()
    Dim i, nomFich, x As Long
    nomFich = ThisWorkbook.Name 'Nom du classeur concerné à adapter
        For i = 1 To Application.VBE.VBProjects.Count
            'vérifie le nom du classeur
            If InStr(Application.VBE.VBProjects(i).Filename, nomFich) <> 0 Then
                'vérifie le nom du module
                For Each LeModule In Application.VBE.VBProjects(i).VBComponents
                    If LeModule.Name = "Module1" Then
                        x = LeModule.CodeModule.CountOfLines
                        LeModule.CodeModule.InsertLines x + 1, "Private Sub LaMacroInseree()"
                        LeModule.CodeModule.InsertLines x + 2, "    Msgbox ""Bienvenue sur le forum !"""
                        LeModule.CodeModule.InsertLines x + 3, "End sub"
                    End If
                Next
            End If
        Next i
    End Sub
    Le mieux serait de faire un tableau des ligne à insérer puis d'insérer les éléments du tableau dans une boucle for i = x + 1 to NbLignes.
    Cela éviterait d'avoir à incrémenter manuellement le N° de ligne
    A+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 201
    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
    13
    14
    15
    16
    17
    18
    Sub EcrireDuCodeDansUnModule(FinalWorkbook As Workbook)
    Dim i, nomFich, x As Long
    nomFich = FinalWorkbook.Name 'Nom du classeur concerné à adapter
        For i = 1 To Application.VBE.VBProjects.Count
            'vérifie le nom du classeur
            If InStr(Application.VBE.VBProjects(i).Filename, nomFich) <> 0 Then
                'vérifie le nom du module
                For Each LeModule In Application.VBE.VBProjects(i).VBComponents
                    If LeModule.Name = "ThisWorkBook" Then
                        x = LeModule.CodeModule.CountOfLines
                        LeModule.CodeModule.InsertLines x + 1, "Private Sub Workbook_Activate()"
                        LeModule.CodeModule.InsertLines x + 2, "    Run /"ClasseurOrigine.xls/" & /"!AfficherUF/""
                        LeModule.CodeModule.InsertLines x + 3, "End sub"
                    End If
                Next
            End If
        Next i
    End Sub
    Ca marche pour thisWorkbook?

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

Discussions similaires

  1. [XL-2007] Donner le focus à la feuille après un clic sur UserForm
    Par ESVBA dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 28/06/2017, 10h47
  2. Détecter qu'une UserForm a le focus
    Par Lisarien dans le forum Général VBA
    Réponses: 1
    Dernier message: 18/11/2011, 11h56
  3. [XL-2007] Focus Excel ou Userform non-modal
    Par ferdi67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/05/2011, 10h37
  4. focus sur TextBox dans UserForm
    Par Touffe54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/11/2010, 22h58
  5. [XL-2003] Focus ouverture fichier via userform
    Par patop_2010 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/08/2010, 23h00

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