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

VBA Discussion :

Comparaison de UserForm


Sujet :

VBA

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    janvier 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Comparaison de UserForm
    Bonjour à vous,

    Dans le but de gérer des versions de composants, je cherche à pouvoir comparer deux UserForm l'un par rapport à l'autre.

    Pour ce faire j'ai réussi à balayer la liste des UserForm puis j'ai pu balayer la liste des Properties.

    La plupart des porperties du UserForm possèdent une value mais pas toutes.

    Il y a par exemple "Font" qui contient des "sous données" qui elles possèdent des values et c'est là que je bloque.
    Je ne parviens pas à accéder à ces "sous données" et du coup à leur value...

    Pouvez-vous m'aider ?
    Ci joint 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
     
     
    Private Sub CommandButton1_Click()
        Dim VBUserCmp As Object
        Dim VBUserProp As Object
        Dim VBUserSsProp As Object
        Dim objFont As Font
        Dim VBCmp As VBComponent
        Dim i As Long
        Dim str As String
        Dim ctrl As Control
     
        'Référence à ajouter
        '   - Microsoft Visual Basic For Applications Extensibility 5.3
        '   - Outils d'Excel -> Macro -> Sécurité -> Onglets Sources fiables -> Cocher "Faire confiance au projet Visual Basic"
        '   - Pour Excel 2007 => Menu Office -> Options Excel -> Centre de gestion de la confidentialité -> Paramètres du Centre de gestion de la confidentialité -> Paramètres des macros -> Accèes approuvé au modèle d'objet du projet VBA
        For Each VBCmp In ThisWorkbook.VBProject.VBComponents
            ' Type 100 => Thisworkbook et Feuil1
            ' Type 1   => Module
            ' Type 2   => Module de Classe
            ' Type 3   => UserForm
            If VBCmp.Type = 3 Then
                'balayage des propriétés de la Userform
                For i = 1 To VBCmp.Properties.Count
                        'ne pas planter si la propriété n'a pas de value
                        On Error Resume Next
                        str = VBCmp.Properties(i).Name & "---" & VBCmp.Properties(i).Value
                        If Err.Number > 0 Then
                           'ici ce que je ne parviens pas à faire le Msgbox donne les propriétés ne possédant pas de value directement
     
                           'MsgBox "----------------------" & VBCmp.Properties(i).Name & "---"
     
                        End If
                        On Error GoTo 0
                Next i
     
     
                'balayage des Controls de la userForm
                For Each VBUserCmp In ThisWorkbook.VBProject.VBComponents(VBCmp.Name).Designer.Controls
     
     
                Next VBUserCmp
     
            End If
        Next VBCmp
    End Sub

    Je suis en congés deux jours mais je serai attentif à vos réponses au pire lundi ;-)

    Merci d'avance que vous ayez une idée, une solution ou pas du tout ;-)

    Klorickement

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 394
    Points : 50 272
    Points
    50 272
    Billets dans le blog
    92
    Par défaut
    Salut.

    Cela me semble un travail titanesque pour très peu de valeur ajoutée au final. Le mieux pour moi serait, lors d'une modification de code, de reporter les modifs apportées dans un tableau de suivi de version. Coder pour trouver les différences de structure entre deux userforms à ce niveau de détails me semble lourd et inutile, voire impossible (Penser à TOUTES les propriétés de TOUS les contrôles d'un userform dans les deux sens pour voir ce qui a été ajouté, modifié ou supprimé est du domaine de la gageure, à mon sens).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    janvier 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci à Pierre Fauconnier pour la réponse.

    Dans le principe de la gestion de configuration je suis d'accord que ça serait l'idéal.
    mais ce n'est pas toujours aisé suivant les contextes.

    J'entends bien que le sujet n'est pas simple c'est pourquoi j'ai besoin d'aide ;-)
    Faire le travail à la main (enfin à l'oeil) serait bien plus compliqué encore.

    J'ai par ailleurs tenté de définir un objet Font et de balayé les sous informations mais les properties ne sont pas dispo sur ce type d'objet.
    Je n'arrive pas par exemple à atteindre le Font.Bold.....

    J'aimerai à minima comprendre comment cela fonctionne.

    Merci d'avance

    Klorickement

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 394
    Points : 50 272
    Points
    50 272
    Billets dans le blog
    92
    Par défaut
    Dim f As Font déclare un objet Font de la bibliothèque Excel et revient donc à déclarer Dim f As Excel.Font(1).

    La bibliothèque msforms qui permet de piloter les userforms et les contrôles de userform n'expose pas d'objet Font, mais bien un objet NewFont. Tu devrais donc déclarer ton objet Dim f As NewFont ou mieux Dim f As msforms.NewFont. Tu pourras alors en manipuler la propriété Bold.


    L'explorateur d'objet(2) (F2) permet de visualiser les méthodes et propriétés de la classe NewFont, comme l'illustre l'image qui suit:

    Nom : 2021-04-16_134536.png
Affichages : 21
Taille : 14,0 Ko

    Voici comment on pourrait récupérer la police d'un contrôle de userform
    Nom : 2021-04-16_140934.png
Affichages : 19
Taille : 6,4 Ko


    Cela dit, on aurait le même résultat avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      With UserForm1.TextBox1.Font
        Debug.Print "Bold: " & .Bold
        Debug.Print "Italique: " & .Italic
        Debug.Print "Taille: " & .Size
      End With



    (1)
    Font n'est pas un objet connu de VBA. Il est issu d'une bibliothèque. Lorsque le "compilateur" doit rechercher le parent d'un objet pour savoir quelles sont les propriétés et méthodes associées, il regarde dans les références dans l'ordre proposé par la fenêtre des références (Outils\Références). Si plusieurs bibliothèques ajoutées au projet proposent des classes éponymes et en l'absence de parent défini lors de la déclaration de la variable, la classe utilisée par le compilateur sera celle de la première bibliothèque rencontrée qui expose la classe. On voit donc sur l'illustration suivante que, même si msforms exposait une classe Font, sans définition du parent, ce serait la bibliothèque Excel tout en haut de la liste qui aurait priorité. Il est donc toujours intéressant de définir le parent de la classe que l'on utilise lorsque l'on définit une variable. C'est par paresse et/ou par méconnaissance de ce mécanisme que l'on laisse la parentalité par défaut, ce qui pourrait jouer des tours dans certains cas particuliers d'utilisation.

    Nom : 2021-04-16_135421.png
Affichages : 19
Taille : 11,8 Ko


    (2)
    L'explorateur d'objet permet de retrouver les propriétés et méthodes d'une classe ainsi que le parent de cette classe. C'est donc un outil très intéressant pour explorer les objets que l'on connait moins bien, voire pas du tout (d'où son nom d'explorateur d'objets).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [XL-2003] Comparaison de date (nom d'un fichier) et date saisie dans Userform
    Par brunop3165 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/11/2009, 11h29
  2. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  3. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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