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 :

Lister userform de tous les classeurs pour modifier position


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 139
    Par défaut Lister userform de tous les classeurs pour modifier position
    Bonjour,
    Je souhaiterais pouvoir boucler sur tous les userform de tous les classeurs afin de pouvoir centrer les userform visibles.

    Le code que j'utilise me renvoie systématiquement "Faux" pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VBA.UserForms.Add(sVariable).Visible
    Le code:

    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
     
    Sub UsfOuverts()
     
    Dim Wb As Workbook
    For Each Wb In Application.Workbooks
     
    Debug.Print Wb.Name
    Debug.Print Windows("OutilsRechercheetSuivi2.xlsm").Visible
     
     
    If ActiveWorkbook.Name = "OutilsRechercheetSuivi2.xlsm" And Windows("OutilsRechercheetSuivi2.xlsm").Visible = "Faux" Then
     
    Windows("OutilsRechercheetSuivi2.xlsm").Visible = True
     
    End If
     
     
    Wb.Activate
     
    Dim usf As Object
     
    For Each usf In ThisWorkbook.VBProject.VBComponents
     
     
    Debug.Print usf.Type
     
    If usf.Type = 3 Then ' si c est un userform ( donc ni une feuille ni un module ni thisworkbook )
     
    Debug.Print usf.Name
     
    'End If
    '
    sVariable = usf.Name
     
    Debug.Print ActiveWorkbook.Name & " " & sVariable & " " & VBA.UserForms.Add(sVariable).Visible
     
    Application.StatusBar = ActiveWorkbook.Name & " " & sVariable & " " & VBA.UserForms.Add(sVariable).Visible
     
    UserForm10.Label23.Caption = Application.StatusBar
     
     
    If VBA.UserForms.Add(sVariable).Visible = "Vrai" Then
     
    VBA.UserForms.Add(sVariable).StartUpPosition = 2
     
    End If
     
    End If
     
    Next usf
     
    If ActiveWorkbook.Name = "OutilsRechercheetSuivi2.xlsm" Then
     
    Windows("OutilsRechercheetSuivi2.xlsm").Visible = False
     
    End If
     
    Next Wb
     
    End Sub

    Est-ce que quelqu'un voit quelque chose.
    MERCIE BEAUCOUP D'AVANCE!!!!

  2. #2
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 005
    Par défaut
    Hello,

    sans aller très loin, Windows("OutilsRechercheetSuivi2.xlsm").Visible = "Faux" et VBA.UserForms.Add(sVariable).Visible = "Vrai" sont des erreurs car c'est False ou True qu'il faut tester
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 139
    Par défaut
    J'ai mis car c'est ce que le debug.print renvoie et que ne fonctionnait pas.

  4. #4
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 005
    Par défaut
    Debug.Print renvoi la valeur dans la langue actuelle (et pas en texte), et c'est bien True ou False car ce sont des propriétés qui sont testées
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 139
    Par défaut
    En tout cas, avec mon userform, pourtant affiché, debug.print renvoie "Faux" et le If ne se déclenche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If VBA.UserForms.Add(sVariable).Visible = True Then
     
    VBA.UserForms.Add(sVariable).StartUpPosition = 2
     
    End If

  6. #6
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 005
    Par défaut
    Et juste une question bête : pourquoi vous ne modifiez pas directement la propriété "StartUpPosition" dans les formulaires ?
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    959
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 959
    Par défaut
    Bonjour, teste comme ceci:

    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
    Sub CentreUserForms()
        Dim Wb As Workbook
        Dim VBComp As Object
        Dim Usf As Object
        Dim UsfName As String
        Dim Frm As Object
     
        For Each Wb In Application.Workbooks
     
            Wb.Activate
     
            For Each VBComp In Wb.VBProject.VBComponents
                ' Vérifie si le composant est un UserForm
                If VBComp.Type = vbext_ct_MSForm Then
                    UsfName = VBComp.Name
     
                    ' Vérifie si le UserForm est chargé dans VBA.UserForms
                    For Each Usf In VBA.UserForms
                        If Usf.Name = UsfName Then
                            If Usf.Visible Then
                                Usf.StartUpPosition = 2
                            End If
                        End If
                    Next Usf
                End If
            Next VBComp
        Next Wb
    End Sub

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 139
    Par défaut
    En fait je travaille sur trois écrans et parfois les userform se baladent, la croix de fermeture sort même de l'écran.....

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 139
    Par défaut
    Alors, Franc, ton code détecte bien visible ou non mais il ne sort plus de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Usf In VBA.UserForms
    sans repartir dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each VBComp In Wb.VBProject.VBComponents
    et encore moins n'atteint le changement de classeur

  10. #10
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 139
    Par défaut
    Rectifié, j'avais laissé le 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VBComp.Type = vbext_ct_MSForm

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

Discussions similaires

  1. Boucle pour tous les classeurs ouverts
    Par ValentinD78310 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/05/2022, 10h16
  2. Lister tous les chemins pour aller d'un noeud à un autre
    Par patricia_zer dans le forum MATLAB
    Réponses: 1
    Dernier message: 14/10/2014, 16h39
  3. [XL-2003] Calcul auto pour tous les classeurs SAUF un
    Par choup67 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/05/2010, 11h51
  4. Réponses: 1
    Dernier message: 08/02/2006, 18h17
  5. [Jobs] Supprimer tous les jobs pour les recreer
    Par yolepro dans le forum Oracle
    Réponses: 3
    Dernier message: 25/11/2005, 17h47

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