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 Access Discussion :

Réajuster automatiquement le format d' une BDD access sur differents ecrans PC


Sujet :

VBA Access

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut Réajuster automatiquement le format d' une BDD access sur differents ecrans PC
    Bonjour,

    Il y a quelques de mois de cela, j'avais posté une discussion sur "comment réajuster automatiquement sur un écran PC les differents élements ( formulaires, graphiques, sous formulaire..) d' une base de données accées.
    Puis ,appélé sur d'autre missions plus urgentes, j'avais laissé de coté cette problèmatique.

    Me revoila donc a relancer ce sujet.
    Ma BDD access est utilisé sur differents ecran PC qui n'ont pas toutes la même resolution ce qui empeche une lecture correct des graphiques et formulaires.
    J'ai trouvé sur ce form, des codes vba qui étaient suceptibles de répondre à mon problème.
    Mais honnetement, je ne sais pas comment me servir de ces codes.

    Pour information , ces codes sont enregistré dans ma BDD dans la rubrique "Modules" et sous un même module intitulé "modResolution"


    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    Option Compare Database
    Option Explicit
     
    '** Ratio = 0.8             '800*600    =>  640*480
    '** Ratio = 0.78125         '1024*768   =>  800*600
    '** Ratio = 0.625           '1024*768   =>  640*480
    '** Ratio = 1.25            '640*480    =>  800*600
    '** Ratio = 1.28            '800*600    =>  1024*768
    '** Ratio = 1.6             '640*480    =>  1024*768
     
    '** Déclaration des API
        Public Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _
            (ByVal hDc As Long, ByVal nIndex As Long) As Long
     
        Public Declare Function apiGetDC Lib "user32" _
            Alias "GetDC" (ByVal hwnd As Long) As Long
     
        Public Declare Function apiReleaseDC Lib "user32" _
            Alias "ReleaseDC" (ByVal hwnd As Long, _
            ByVal hDc As Long) As Long
     
    '** Déclaration des constantes
        Public Const LOGPIXELSY = 90
        Public Const LOGPIXELSX = 88
     
        Public Const HorzRes = 8
        Public Const VertRes = 10
     
        Public Const HWND_DESKTOP = 0
        Public Const SPI_GETWORKAREA = 48
     
    '** Déclaration des variables
        Public strRes As String
        Public strResIni As String
     
        Public ResHorzIni As Integer
        Public ResVertIni As Integer
        Public ResHorz As Integer
        Public ResVert As Integer
     
        Public RatioHorz As Single
        Public RatioVert As Single
     
    Function EXE_Test()
        EXE_UpDateRes "frmManuResized"
    End Function
     
    Public Function EXE_UpDateRes(strForm As String)
    '** Nécessite une propriété personnaliser à la base
    '** appelée : "Résolution"
    '** Utilises la fonction : "ResEcran()"
    '** Utilises la fonction : "IniVariableRes()"
    '** Utilises la fonction : "CalculRatio()"
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
        Dim strMsg      As String
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
     
        With doc
            strResIni = .Properties("Résolution")
            strRes = ResEcran()
            If strRes <> strResIni Then
                strMsg = "Votre résolution est différente de celle utilisée " _
                    & "lors du développement de cette application." _
                    & vbCrLf & vbCrLf & "Résolution lors du développement :" _
                    & vbCrLf & vbCrLf & vbTab & "- " & strResIni _
                    & vbCrLf & vbCrLf & "Résolution de votre poste :" _
                    & vbCrLf & vbCrLf & vbTab & "- " & strRes _
                    & vbCrLf & vbCrLf & "Voulez-vous que l'application " _
                    & "mette à jour la résolution de tous les formulaires " _
                    & "de l'application à jour ?"
     
                If MsgBox(strMsg, vbYesNo, "Modification de la résolution") _
                    = vbYes Then
                    IniVariableRes
                    CalculRatio
                    Dim gdb As New classGridBag
                    DoCmd.OpenForm strForm, acDesign
                    gdb.InitForm Forms(strForm)
                    gdb.ReSizeForm Forms(strForm)
                    DoCmd.Close acForm, strForm, acSaveYes
                    gdb.DestroyForm: Set gdb = Nothing
                    EditPropRes
                End If
            End If
        End With
    End Function
     
    Public Function apiHauteurEcran()
    '** Résolution verticale de l'écran
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiHauteurEcran = apiGetDeviceCaps(hDc, VertRes)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLargeurEcran()
    '** Résolution horizontale de l'écran
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLargeurEcran = apiGetDeviceCaps(hDc, HorzRes)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLOGPIXELSX()
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLOGPIXELSX = apiGetDeviceCaps(hDc, LOGPIXELSX)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLOGPIXELSY()
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLOGPIXELSY = apiGetDeviceCaps(hDc, LOGPIXELSY)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function ResEcran() As String
    '** Donne la résolution en cours de l'écran
        ResEcran = apiLargeurEcran & " x " & apiHauteurEcran & " (" & apiLOGPIXELSX & "x" & apiLOGPIXELSY & ")"
    End Function
     
    Public Sub CalculRatio()
    '** Déterminer l'échelle d'agrandissement
        RatioHorz = ResHorz / ResHorzIni
        RatioVert = ResVert / ResVertIni
    End Sub
     
    Public Function IniVariableRes()
    '** Initialise les variables concernant les résolutions
        ResHorz = apiLargeurEcran
        ResVert = apiHauteurEcran
        ResHorzIni = Left(strResIni, InStr(strResIni, "x") - 2)
        ResVertIni = Mid(strResIni, InStr(strResIni, "x") + 2, _
            (InStr(strResIni, "(") - 1) - (InStr(strResIni, "x") + 2))
    End Function
    Public Function EditPropRes()
    '** Modifie la propriétés personnalisé : "Résolution"
    '** de la base de donnée en cours
    '** Utilises la fonction : "ResEcran()"
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
     
        With doc
            .Properties("Résolution") = ResEcran()
        End With
    End Function

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Le code semble provenir d'ici : http://access.jessy.free.fr/htm/DownLoad/AutoResize.htm

    Il nécessite d'ajouter une propriété "résolution" ou d'écrire cette résolution en dur ligne 64

    Il faut aussi les 3 modules de classe présents dans la bd exemple du lien

    Ensuite il suffit d'appeler la fonction EXE_UpDateRes avec le nom de la fenêtre à redimensionner en paramètre

    Ca marche super bien je garde ça au chaud au cas où

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Nico,

    J'ai enregistré les modules de classe :
    - classControlSize,
    - classFormSize,
    - classGridBag
    dans la rubrique "Modules".

    Mais lorsque tu ecris :
    Il nécessite d'ajouter une propriété "résolution" ou d'écrire cette résolution en dur ligne 64
    où dois je chercher cette propriété "résolution" ?.

  4. #4
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Il nécessite d'ajouter une propriété "résolution" ou d'écrire cette résolution en dur ligne 64
    Meuh non ! c'est fait à la ligne 155

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Properties("Résolution") = ResEcran()
    quand EditPropRes est lancé sur changement de résolution !

    A moins que tu ne penses que la première fois çà va planter ligne 64 parce qu'elle n'existe pas encore ?

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour mumen

    Que veux tu dire lorsque tu ecris :
    quand EditPropRes est lancé sur changement de résolution !

    A moins que tu ne penses que la première fois çà va planter ligne 64 parce qu'elle n'existe pas encore ?

  6. #6
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Citation Envoyé par facteur Voir le message
    Bonjour mumen

    Que veux tu dire lorsque tu ecris :
    quand EditPropRes est lancé sur changement de résolution !

    A moins que tu ne penses que la première fois çà va planter ligne 64 parce qu'elle n'existe pas encore ?
    Salut facteur

    En fait, c'est à Nico que je répond quand j'écris cela. Quand il dit :

    Il nécessite d'ajouter une propriété "résolution" ou d'écrire cette résolution en dur ligne 64
    Il a raison sur le premier point et n'est pas assez explicite sur le second. Quand à moi, la réponse que je fournis n'est pas assez fouillée !

    Avec ça tu es servi.

    Clarifions la chose en disant que l'auteur de l'utilitaire n'a pas entièrement léché son outil quand il à négligé de prendre en compte la première utilisation de son outil autrement que par une remarque laconique (ligne 49).

    Il te laisse le soin de faire cette première assignation sans laquelle son code plantera la première fois qu'on l'utilise. C'est dommage pour lui, car les moins expérimentés laisseront tomber à cause de ce handicap.

    La solution pour l'auteur du code aurait été, par exemple, d'ajouter une procédure comme suit qui initialise (avec n'importe quoi dedans "xxx" par exemple) la propriété s'i elle n'existe pas encore :

    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
     
    Private Sub InitPropRes()
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
        Dim lngErreur   As Long
        Dim strTemp     As String
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
        With doc
            On Error Resume Next
            strTemp = .Properties("Résolution")
            lngErreur = Err.Number
            On Error GoTo 0
            If lngErreur = 3270 Then     ' Propriété non trouvée.
                Set prp = .CreateProperty("Résolution", dbText, "xxx")
                .Properties.Append prp
            End If
        End With
    End Sub
    Ensuite il lui aurait fallu modifier sa procédure 'EXE_UpDateRes' pour insérer le premier appel à cette vérification. Par exemple à la ligne 62, juste ajouter 'InitPropRes'. Et du coup enlever les deux premières lignes de remarque.
    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
     
    Public Function EXE_UpDateRes(strForm As String)
    '** Utilises la fonction : "ResEcran()"
    '** Utilises la fonction : "IniVariableRes()"
    '** Utilises la fonction : "CalculRatio()"
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
        Dim strMsg      As String
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
     
        InitPropRes
     
        With doc
            strResIni = .Properties("Résolution")
            strRes = ResEcran()
            If strRes <> strResIni Then
    Il y a d'autres façons de procéder, j'ai juste choisi celle qui ne touche pas trop à son code.

  7. #7
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Mumen,

    J'essaie de comprendre ton explication mais je dois t'avouer que je nage en eaux troubles...
    Essayons de faire simple ...

    1) Les deux codes que tu as postés : Private Sub InitPropRes() et Public Function EXE_UpDateRes(strForm As String) remplacent elle le code inititial
    que j'avais posté dans mon premier message ?

    3) Si oui, tes 2 codes suffisent elle à réajuster automatiquement sur un écran PC les differents élements ( formulaires, graphiques, sous formulaire..) d' une BDD ?

    3) je ne comprends pas lorsque tu ecris
    ....d'ajouter une procédure comme suit qui initialise (avec n'importe quoi dedans "xxx" par exemple) la propriété s'i elle n'existe pas encore :
    ,
    On retrouve cette explication dans la ligne 18 du code
    Set prp = .CreateProperty("Résolution", dbText, "xxx")
    , que doit reprensenter les xxx ?

    4) Et enfin , si tes 2 codes ne remplacent pas le code initial, viennent ils en complément du code initial ?

  8. #8
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Clarifions la chose en disant que l'auteur de l'utilitaire n'a pas entièrement léché son outil quand il à négligé de prendre en compte la première utilisation de son outil autrement que par une remarque laconique (ligne 49).
    Ca tu as compris, je suppose. Je paraphrase quand même pour être clair : le codeur de cet outil, que je n'ai pas essayé, a volontairement oublié de faire une initialisation, et donc il met l'utilisateur néophyte dans l'embarras à la première utilisation. Ce que je te propose, c'est de corriger cet oubli. Ce que j'ignore, c'est si tu es toi même avant la première utilisation ou bien après. C'est à dire si tu as réussi à franchir ou non cette difficulté.

    Ce que je donne comme modification, c'est :

    1. Ajouter au code fourni une procédure que j'ai écrite et que j'ai nommée InitPropRes qui vérifie que la propriété existe bien et qui la créee si ce n'est pas le cas. Ce qu'on met dans cette propriété à ce moment là (xxx) n'a pas d'importance, car le code va de toutes façons y mettre la bonne valeur ensuite. A la première utilisation, il te dira :

      Votre résolution est différente de celle utilisée lors du développement de cette application.

      Résolution lors du développement : xxx

      Résolution de votre poste : ???
      etc.
    2. Mettre au bon endroit l'appel de cette procédure InitPropRes dans la procédure EXE_UpDateRes, à la ligne 62.


    Donc si tu es avant la première utilisation de la procédure dans ta base de données, ou que tu as l'intention de l'utiliser dans d'autres bases de données, je te conseille de modifier le code et conserver ce code modifié quelque part pour une utilisation ultérieure.

    C'est clair maintenant ?

  9. #9
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Comme je l'écris dans le message précédent je n'ai pas cherché à comprendre complètement ce que faisait ce code, mais juste cette partie qui t'empêche de l'utiliser facilement.

    3) Si oui, tes 2 codes suffisent elle à réajuster automatiquement sur un écran PC les differents élements ( formulaires, graphiques, sous formulaire..) d' une BDD ?
    Pour répondre à cette question, la réponse est non...

    Il manque le principal, c'est à dire le module qui fait la mise à la taille à l'aide de la commande ReSizeForm. Cette commande se trouve dans un module que tu dois aussi importer dans ton propre code qui s'appelle classGridBag. Ce module doit obligatoirement copié collé dans une module spécial qui s'appelle un module de classe.

  10. #10
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonsoir Mumen,
    Merci pour ces explications tres tres explicites.
    A ta question :
    Ce que j'ignore, c'est si tu es toi même avant la première utilisation ou bien après. C'est à dire si tu as réussi à franchir ou non cette difficulté
    je n aie meme pas fanchi cette difficulte .
    J avais betement copie le code et lorsque j 'avais fais un test sur un autre ordinateur dont la resolution est differente de mon PC, il n y avait aucun reajustement des mes formulaires, etats et graphiques.
    Et maintenant je sais pourquoi.

    Au sujet du module de class classGridBag, je l avais deja enregiste.

    Des lundi , je mets a execution tes precieux renseignements et j espere reussir
    Dans le cas contraire je devrais encore t embeter numen...

    Bon week end a toi

  11. #11
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Mumen,

    Malgré les corrections apporté , aucun de mes formulaire ne se réajustent automatiquement lorsque je change la résolution de mon ecran PC.
    Voici les étapes que j'ai effectué :

    1) Modification de la procédure EXE_UpDateRes en y inserant procédure InitPropRes .
    D'ailleurs, à la ligne 63, est il normal que l'appel de la procédure InitPropRes n'est pas précédé de Call ?
    je précise que cette procédure EXE_UpDateRes se trouve dans le module intitulée "modResolution"
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    'Ce module contrôle la propriété personalisée "Resolution" de la base de donnée, si elle est différente de la résolution de l'écran en cour, alors elle redimensionne le formulaire "frmManuResized" et met à jour la propriété "Resolution" de la base.
     
     
    Option Compare Database
    Option Explicit
     
    '** Ratio = 0.8             '800*600    =>  640*480
    '** Ratio = 0.78125         '1024*768   =>  800*600
    '** Ratio = 0.625           '1024*768   =>  640*480
    '** Ratio = 1.25            '640*480    =>  800*600
    '** Ratio = 1.28            '800*600    =>  1024*768
    '** Ratio = 1.6             '640*480    =>  1024*768
     
    '** Déclaration des API
        Public Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _
            (ByVal hDc As Long, ByVal nIndex As Long) As Long
     
        Public Declare Function apiGetDC Lib "user32" _
            Alias "GetDC" (ByVal hwnd As Long) As Long
     
        Public Declare Function apiReleaseDC Lib "user32" _
            Alias "ReleaseDC" (ByVal hwnd As Long, _
            ByVal hDc As Long) As Long
     
    '** Déclaration des constantes
        Public Const LOGPIXELSY = 90
        Public Const LOGPIXELSX = 88
     
        Public Const HorzRes = 8
        Public Const VertRes = 10
     
        Public Const HWND_DESKTOP = 0
        Public Const SPI_GETWORKAREA = 48
     
    '** Déclaration des variables
        Public strRes As String
        Public strResIni As String
     
        Public ResHorzIni As Integer
        Public ResVertIni As Integer
        Public ResHorz As Integer
        Public ResVert As Integer
     
        Public RatioHorz As Single
        Public RatioVert As Single
     
     
     
    Public Function EXE_UpDateRes(strForm As String)
     
    '** Utilises la fonction : "ResEcran()"
    '** Utilises la fonction : "IniVariableRes()"
    '** Utilises la fonction : "CalculRatio()"
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
        Dim strMsg      As String
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
     
       InitPropRes
     
     
        With doc
            strResIni = .Properties("Résolution")
            strRes = ResEcran()
            If strRes <> strResIni Then
                strMsg = "Votre résolution est différente de celle utilisée " _
                    & "lors du développement de cette application." _
                    & vbCrLf & vbCrLf & "Résolution lors du développement :" _
                    & vbCrLf & vbCrLf & vbTab & "- " & strResIni _
                    & vbCrLf & vbCrLf & "Résolution de votre poste :" _
                    & vbCrLf & vbCrLf & vbTab & "- " & strRes _
                    & vbCrLf & vbCrLf & "Voulez-vous que l'application " _
                    & "mette à jour la résolution de tous les formulaires " _
                    & "de l'application à jour ?"
     
                If MsgBox(strMsg, vbYesNo, "Modification de la résolution") _
                    = vbYes Then
                    IniVariableRes
                    CalculRatio
                    Dim gdb As New classGridBag
                    DoCmd.OpenForm strForm, acDesign
                    gdb.InitForm Forms(strForm)
                    gdb.ReSizeForm Forms(strForm)
                    DoCmd.Close acForm, strForm, acSaveYes
                    gdb.DestroyForm: Set gdb = Nothing
                    EditPropRes
                End If
            End If
        End With
    End Function
     
    Public Function apiHauteurEcran()
    '** Résolution verticale de l'écran
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiHauteurEcran = apiGetDeviceCaps(hDc, VertRes)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLargeurEcran()
    '** Résolution horizontale de l'écran
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLargeurEcran = apiGetDeviceCaps(hDc, HorzRes)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLOGPIXELSX()
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLOGPIXELSX = apiGetDeviceCaps(hDc, LOGPIXELSX)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLOGPIXELSY()
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLOGPIXELSY = apiGetDeviceCaps(hDc, LOGPIXELSY)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function ResEcran() As String
    '** Donne la résolution en cours de l'écran
        ResEcran = apiLargeurEcran & " x " & apiHauteurEcran & " (" & apiLOGPIXELSX & "x" & apiLOGPIXELSY & ")"
    End Function
     
    Public Sub CalculRatio()
    '** Déterminer l'échelle d'agrandissement
        RatioHorz = ResHorz / ResHorzIni
        RatioVert = ResVert / ResVertIni
    End Sub
     
    Public Function IniVariableRes()
    '** Initialise les variables concernant les résolutions
        ResHorz = apiLargeurEcran
        ResVert = apiHauteurEcran
        ResHorzIni = Left(strResIni, InStr(strResIni, "x") - 2)
        ResVertIni = Mid(strResIni, InStr(strResIni, "x") + 2, _
            (InStr(strResIni, "(") - 1) - (InStr(strResIni, "x") + 2))
    End Function
    Public Function EditPropRes()
    '** Modifie la propriétés personnalisé : "Résolution"
    '** de la base de donnée en cours
    '** Utilises la fonction : "ResEcran()"
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
     
        With doc
            .Properties("Résolution") = ResEcran()
        End With
    End Function
    2) J'ai inséré en copié/collé le module de class classGridBag.
    Dont le code est ci dessous :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    'Le module de classe "classGridBag" permet quant à lui d'intialiser toutes les classes objet à l'ouverture et à chaque redimensionnement du formulaire.
     
     
    '************************************************
    '** Code à inclure dans un form pour qu'il se
    '** redimensionne automatiquement :
     
    '** Private gdb As New GridBag
     
    '** Private Sub Form_Close()
    '**     gdb.DestroyFormAuto
    '**     Set gdb = Nothing
    '** End Sub
     
    '** Private Sub Form_Open(Cancel As Integer)
    '**     DoCmd.Restore
    '**     gdb.InitFormAuto Me
    '** End Sub
     
    '** Private Sub Form_Resize()
    '**     gdb.ReSizeFormAuto
    '** End Sub
    '************************************************
     
    Option Compare Database
    Option Explicit
     
    Public lngFormWidth         As Long
    Public lngFormHeight        As Long
     
    Public blnMinSizeEnabled    As Boolean
    Public blnHorizontalEnabled As Boolean
    Public blnVerticalEnabled   As Boolean
     
    Public frm                  As Form
    Public colControls          As New Collection
    Public colForms             As New Collection
     
    Sub InitForm(frm As Form)
        Dim ctr                 As Control
        Dim csz                 As classControlSize
        Dim fsz                 As classFormSize
     
        On Error Resume Next
     
        Set frm = frm
        Set fsz = New classFormSize
        fsz.strName = frm.Name
        fsz.lngInsideWidth = frm.InsideWidth
        fsz.lngInsideHeight = frm.Section(acDetail).Height
        colForms.Add fsz, fsz.strName
     
        For Each ctr In frm.Controls
            Set csz = New classControlSize
     
            csz.lngHeight = ctr.Properties!Height
            csz.lngLeft = ctr.Properties!Left
            csz.lngTop = ctr.Properties!Top
            csz.lngWidth = ctr.Properties!Width
            csz.strName = ctr.Properties!Name
            csz.lngFontSize = ctr.FontSize
     
            colControls.Add csz, csz.strName
        Next
     
    End Sub
     
    Sub InitFormAuto(frmSource As Form, _
        Optional blnFormSizeIsMinSize As Boolean = False, _
        Optional blnHorizontalZoomingEnabled As Boolean = True, _
        Optional blnVerticalZoomingEnabled As Boolean = True)
     
        Dim ctr                 As Control
        Dim csz                 As classControlSize
     
        On Error Resume Next
     
        blnMinSizeEnabled = blnFormSizeIsMinSize
        blnHorizontalEnabled = blnHorizontalZoomingEnabled
        blnVerticalEnabled = blnVerticalZoomingEnabled
     
        Set frm = frmSource
        lngFormWidth = frm.InsideWidth
        lngFormHeight = frm.InsideHeight
     
        For Each ctr In frm.Controls
            Set csz = New classControlSize
     
            csz.lngHeight = ctr.Properties!Height
            csz.lngLeft = ctr.Properties!Left
            csz.lngTop = ctr.Properties!Top
            csz.lngWidth = ctr.Properties!Width
            csz.strName = ctr.Properties!Name
            csz.lngFontSize = ctr.FontSize
     
            colControls.Add csz, csz.strName
        Next
     
        ReSizeFormAuto
    End Sub
     
    Sub DestroyForm()
        Set frm = Nothing
        Set colControls = Nothing
        Set colForms = Nothing
    End Sub
     
    Sub DestroyFormAuto()
        Set frm = Nothing
        Set colControls = Nothing
    End Sub
     
    Sub ReSizeForm(frm As Form)
        On Error Resume Next
     
        Dim cnt                 As Control
        Dim blnOk               As Boolean
        Dim lngOldValue         As Long
        Dim dblAV               As Double
        Dim dblAH               As Double
     
        '** Redimensionnement horizontal
        If RatioHorz <> 1 Then
                blnOk = False
                Do While blnOk = False
                    blnOk = True
                    For Each cnt In frm.Controls
                        lngOldValue = colControls(cnt.Name).lngLeft * RatioHorz
                        cnt.Left = colControls(cnt.Name).lngLeft * RatioHorz
                        If cnt.Left <> lngOldValue Then blnOk = False
     
                        lngOldValue = colControls(cnt.Name).lngWidth * RatioHorz
                        cnt.Width = colControls(cnt.Name).lngWidth * RatioHorz
                        If cnt.Width <> lngOldValue Then blnOk = False
                    Next
                Loop
                frm.Width = colForms(frm.Name).lngInsideWidth * RatioHorz
        End If
        '** Redimensionnement vertical
        If RatioVert <> 1 Then
            frm.Section(acDetail).Height = _
                colForms(frm.Name).lngInsideHeight * RatioVert
            blnOk = False
                Do While blnOk = False
                    blnOk = True
                    For Each cnt In frm.Controls
                        lngOldValue = colControls(cnt.Name).lngTop * RatioVert
                        cnt.Top = colControls(cnt.Name).lngTop * RatioVert
                        If cnt.Top <> lngOldValue Then blnOk = False
     
                        lngOldValue = colControls(cnt.Name).lngHeight * RatioVert
                        cnt.Height = colControls(cnt.Name).lngHeight * RatioVert
                        If cnt.Height <> lngOldValue Then blnOk = False
                    Next
                Loop
            frm.Section(acDetail).Height = _
                colForms(frm.Name).lngInsideHeight * RatioVert
        End If
     
        '** Redimensionnement de la police
        For Each cnt In frm.Controls
            cnt.FontSize = colControls.Item(cnt.Properties!Name).lngFontSize _
                * (IIf(RatioHorz > RatioVert, RatioVert, RatioHorz))
        Next
    End Sub
     
    Sub ReSizeFormAuto()
        On Error Resume Next
     
        Dim cnt         As Control
        Dim blnOk       As Boolean
        Dim lngOldValue As Long
        Dim dblAV       As Double
        Dim dblAH       As Double
     
        If blnHorizontalEnabled Then
        '** Redimensionnement horizontal autorisé
            If frm.InsideWidth < lngFormWidth And blnMinSizeEnabled Then _
                frm.InsideWidth = lngFormWidth
            dblAH = frm.InsideWidth / lngFormWidth
            If dblAH <> 1 Then
                blnOk = False
                Do While blnOk = False
                    blnOk = True
                    For Each cnt In frm.Controls
                        lngOldValue = colControls(cnt.Name).lngLeft * dblAH
                        cnt.Left = colControls(cnt.Name).lngLeft * dblAH
                        If cnt.Left <> lngOldValue Then blnOk = False
     
                        lngOldValue = colControls(cnt.Name).lngWidth * dblAH
                        cnt.Width = colControls(cnt.Name).lngWidth * dblAH
                        If cnt.Width <> lngOldValue Then blnOk = False
                    Next
                Loop
                frm.Width = frm.InsideWidth
            End If
        Else
            frm.InsideWidth = lngFormWidth
        End If
     
        If blnVerticalEnabled Then
        '** Redimensionnement vertical autorisé
            If frm.InsideHeight < lngFormHeight And blnMinSizeEnabled Then _
                frm.InsideHeight = lngFormHeight
            dblAV = frm.InsideHeight / lngFormHeight
            If dblAV <> 1 Then
                frm.Section(acDetail).Height = frm.InsideHeight
                blnOk = False
                Do While blnOk = False
                    blnOk = True
                    For Each cnt In frm.Controls
                        lngOldValue = colControls(cnt.Name).lngTop * dblAV
                        cnt.Top = colControls(cnt.Name).lngTop * dblAV
                        If cnt.Top <> lngOldValue Then blnOk = False
     
                        lngOldValue = colControls(cnt.Name).lngHeight * dblAV
                        cnt.Height = colControls(cnt.Name).lngHeight * dblAV
                        If cnt.Height <> lngOldValue Then blnOk = False
                    Next
                Loop
                frm.Section(acDetail).Height = frm.InsideHeight
            End If
        Else
            frm.InsideHeight = lngFormHeight
        End If
     
        '** Redimensionnement de la police
        For Each cnt In frm.Controls
            cnt.FontSize = colControls.Item(cnt.Properties!Name).lngFontSize _
                * (IIf(dblAH > dblAV, dblAV, dblAH))
        Next
    End Sub

  12. #12
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Salut facteur

    D'une part tu n'a pas ajouté la procédure 'InitPropRes' au premier des deux code. Regardes à la fin de ce qui suit, ligne 161 et plus :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    'Ce module contrôle la propriété personalisée "Resolution" de la base de donnée, si elle est différente de la résolution de l'écran en cour, alors elle redimensionne le formulaire "frmManuResized" et met à jour la propriété "Resolution" de la base.
     
     
    Option Compare Database
    Option Explicit
     
    '** Ratio = 0.8             '800*600    =>  640*480
    '** Ratio = 0.78125         '1024*768   =>  800*600
    '** Ratio = 0.625           '1024*768   =>  640*480
    '** Ratio = 1.25            '640*480    =>  800*600
    '** Ratio = 1.28            '800*600    =>  1024*768
    '** Ratio = 1.6             '640*480    =>  1024*768
     
    '** Déclaration des API
        Public Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _
            (ByVal hDc As Long, ByVal nIndex As Long) As Long
     
        Public Declare Function apiGetDC Lib "user32" _
            Alias "GetDC" (ByVal hwnd As Long) As Long
     
        Public Declare Function apiReleaseDC Lib "user32" _
            Alias "ReleaseDC" (ByVal hwnd As Long, _
            ByVal hDc As Long) As Long
     
    '** Déclaration des constantes
        Public Const LOGPIXELSY = 90
        Public Const LOGPIXELSX = 88
     
        Public Const HorzRes = 8
        Public Const VertRes = 10
     
        Public Const HWND_DESKTOP = 0
        Public Const SPI_GETWORKAREA = 48
     
    '** Déclaration des variables
        Public strRes As String
        Public strResIni As String
     
        Public ResHorzIni As Integer
        Public ResVertIni As Integer
        Public ResHorz As Integer
        Public ResVert As Integer
     
        Public RatioHorz As Single
        Public RatioVert As Single
     
     
     
    Public Function EXE_UpDateRes(strForm As String)
     
    '** Utilises la fonction : "ResEcran()"
    '** Utilises la fonction : "IniVariableRes()"
    '** Utilises la fonction : "CalculRatio()"
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
        Dim strMsg      As String
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
     
       InitPropRes
     
     
        With doc
            strResIni = .Properties("Résolution")
            strRes = ResEcran()
            If strRes <> strResIni Then
                strMsg = "Votre résolution est différente de celle utilisée " _
                    & "lors du développement de cette application." _
                    & vbCrLf & vbCrLf & "Résolution lors du développement :" _
                    & vbCrLf & vbCrLf & vbTab & "- " & strResIni _
                    & vbCrLf & vbCrLf & "Résolution de votre poste :" _
                    & vbCrLf & vbCrLf & vbTab & "- " & strRes _
                    & vbCrLf & vbCrLf & "Voulez-vous que l'application " _
                    & "mette à jour la résolution de tous les formulaires " _
                    & "de l'application à jour ?"
     
                If MsgBox(strMsg, vbYesNo, "Modification de la résolution") _
                    = vbYes Then
                    IniVariableRes
                    CalculRatio
                    Dim gdb As New classGridBag
                    DoCmd.OpenForm strForm, acDesign
                    gdb.InitForm Forms(strForm)
                    gdb.ReSizeForm Forms(strForm)
                    DoCmd.Close acForm, strForm, acSaveYes
                    gdb.DestroyForm: Set gdb = Nothing
                    EditPropRes
                End If
            End If
        End With
    End Function
     
    Public Function apiHauteurEcran()
    '** Résolution verticale de l'écran
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiHauteurEcran = apiGetDeviceCaps(hDc, VertRes)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLargeurEcran()
    '** Résolution horizontale de l'écran
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLargeurEcran = apiGetDeviceCaps(hDc, HorzRes)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLOGPIXELSX()
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLOGPIXELSX = apiGetDeviceCaps(hDc, LOGPIXELSX)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function apiLOGPIXELSY()
        Dim hDc     As Long
        hDc = apiGetDC(HWND_DESKTOP)
        apiLOGPIXELSY = apiGetDeviceCaps(hDc, LOGPIXELSY)
        apiReleaseDC HWND_DESKTOP, hDc
    End Function
     
    Public Function ResEcran() As String
    '** Donne la résolution en cours de l'écran
        ResEcran = apiLargeurEcran & " x " & apiHauteurEcran & " (" & apiLOGPIXELSX & "x" & apiLOGPIXELSY & ")"
    End Function
     
    Public Sub CalculRatio()
    '** Déterminer l'échelle d'agrandissement
        RatioHorz = ResHorz / ResHorzIni
        RatioVert = ResVert / ResVertIni
    End Sub
     
    Public Function IniVariableRes()
    '** Initialise les variables concernant les résolutions
        ResHorz = apiLargeurEcran
        ResVert = apiHauteurEcran
        ResHorzIni = Left(strResIni, InStr(strResIni, "x") - 2)
        ResVertIni = Mid(strResIni, InStr(strResIni, "x") + 2, _
            (InStr(strResIni, "(") - 1) - (InStr(strResIni, "x") + 2))
    End Function
    Public Function EditPropRes()
    '** Modifie la propriétés personnalisé : "Résolution"
    '** de la base de donnée en cours
    '** Utilises la fonction : "ResEcran()"
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
     
        With doc
            .Properties("Résolution") = ResEcran()
        End With
    End Function
     
    Sub InitPropRes()
        Dim db          As Database
        Dim prp         As Property
        Dim cnt         As Container
        Dim doc         As Document
        Dim lngErreur   As Long
        Dim strTemp     As String
     
        Set db = CurrentDb: Set cnt = db.Containers!Databases
        Set doc = cnt.Documents!UserDefined
        With doc
            On Error Resume Next
            strTemp = .Properties("Résolution")
            lngErreur = Err.Number
            On Error GoTo 0
            If lngErreur = 3270 Then     ' Propriété non trouvée.
                Set prp = .CreateProperty("Résolution", dbText, "xxx")
                .Properties.Append prp
            End If
        End With
    End Sub
    Ensuite tu dois tenir compte de ça :
    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
     
    '************************************************
    '** Code à inclure dans un form pour qu'il se
    '** redimensionne automatiquement :
     
    '** Private gdb As New GridBag
     
    '** Private Sub Form_Close()
    '**     gdb.DestroyFormAuto
    '**     Set gdb = Nothing
    '** End Sub
     
    '** Private Sub Form_Open(Cancel As Integer)
    '**     DoCmd.Restore
    '**     gdb.InitFormAuto Me
    '** End Sub
     
    '** Private Sub Form_Resize()
    '**     gdb.ReSizeFormAuto
    '** End Sub
    '************************************************
    Dans chaque formulaire que tu veux voir se redimensionner, tu dois ajouter obligatoirement ce code

    Ouvre ton formulaire en mode design, ouvre son module et copie colle ceci
    après la ligne
    "Option Compare Database"
    et après la ligne
    "Option Explicit"
    si tu en as une.


    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
     
    Private gdb As New GridBag
     
    Private Sub Form_Close()
        gdb.DestroyFormAuto
        Set gdb = Nothing
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
        DoCmd.Restore
        gdb.InitFormAuto Me
    End Sub
     
    Private Sub Form_Resize()
        gdb.ReSizeFormAuto
    End Sub
    Normalement, c'est tout

  13. #13
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Mumen,

    J'ai apporté les corrections à la procédure EXE_UpDateRes.
    Ensuite j'ai ouvert le formulaire en mode création . J'ai cliqué sur l'onglet "affichage", puis "code".
    J'ai copié/collé les codes de cette manière :

    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
    Option Compare Database
    Private gdb As New GridBag
     
    Private Sub Form_Close()
        gdb.DestroyFormAuto
        Set gdb = Nothing
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
        DoCmd.Restore
        gdb.InitFormAuto Me
    End Sub
     
    Private Sub Form_Resize()
        gdb.ReSizeFormAuto
    End Sub
    mais j'ai un message d'erreur qui s'affiche
    "L'expression Sur ouverture entrée comme paramètre de la propriété de type évenement est à l'origine d'une erreur. Type défini par l'utilisateur non défini.
    Le resultat de l'expression n 'est pas le nom d'une macro , le nom d'une fonction définie par l'utilisateur ou [EventProcédure].
    Une erreur a peut etre été commise lors de lévaluation d'une fonction, d'un évenement ou d'une macro"

  14. #14
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Tu donnes un message d'erreur, mais pas l'endroit ou il a lieu.

    Je devine que c'est sur GridBag qu'il plante.

    Remplace
    Private gdb As New GridBag
    par
    Private gdb As New classGridBag

  15. #15
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Mumen,

    effectivement en remplacant "Private gdb As New GridBag" par Private gdb As New classGridBag , je n'ai plus de message d'erreur.
    Mais le formulaire ne s'affiche qu'à moitié et ne repond plus ( j'ai le sablier qui apparait et ça mouline...)

  16. #16
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Citation Envoyé par facteur Voir le message
    Mumen,

    effectivement en remplacant "Private gdb As New GridBag" par Private gdb As New classGridBag , je n'ai plus de message d'erreur.
    Mais le formulaire ne s'affiche qu'à moitié et ne repond plus ( j'ai le sablier qui apparait et ça mouline...)
    Ouch

    Je cale et je n'ai pas assez de temps pour tester ça maintenant. Si tu as de la patience, je le ferai sous peu, mais sans garantie que je comprenne ce qui t'arrive.

    En attendant, essaye d'autres formulaires très simples, essaye d'isoler ce sur quoi ça plante, éventuellement met ici une copie d'écran du formulaire avec plantage et sans, etc...

  17. #17
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Bonjour Mumen

    De mon coté, je n'ai pas eu le temps de réaliser les testes
    En attendant, essaye d'autres formulaires très simples, essaye d'isoler ce sur quoi ça plante, éventuellement met ici une copie d'écran du formulaire avec plantage et sans, etc
    .
    J'ai du m'absenter de mon travail durant 2 semaines.
    me revoila donc.
    Je vais tester les codes sur un formuliare simple pour savoir pourquoi il bloque et ne repond plus

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Up
    Bonjour,

    je remonte le post car il me semble indispensable d'améliorer la qualité de cet outil formidable !
    Comment ?

    En incluant aussi les sous formulaires contenus dans un contrôle onglet !

    J'ai beau chercher, je n'arrive pas à les intégrer dans le redimensionnement.
    Tout fonctionne plutot très bien (meme si j'ai mis un compteur pour eviter un trop grand nombre de boucles de redimensionnement dans le sub ReSizeFormAuto() ), le contrôle onglet se redimensionne aussi, mais pas les sous formulaires à l'intérieur.
    j'ai essayé de redimensionner les formulaires en dur dans le code (test avec des inside.width et insideheight modifiés) lors de l'appel du process puis appel du resize d'un sous formulaire, mais ça ne donne rien . Peut-être ce ne sont pas les bons paramètres à modifier

    Quelqu'un à une idée ?

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 154
    Points : 230
    Points
    230
    Par défaut Jessie "Le Retour"
    Citation Envoyé par elnyo Voir le message
    Bonjour,

    je remonte le post car il me semble indispensable d'améliorer la qualité de cet outil formidable !
    Comment ?

    Quelqu'un à une idée ?
    Bonjour, ce sujet m'intéresse au plus haut point.
    J'ai même testé l'application pour vérifier son bon fonctionnement sur Virtual PC exécutant un Office 97...
    Le redimensionnement des contrôles "classiques" est parfait. Je n'ai pas testé les sous-formulaires.
    Par contre sous Access 2016 la correction des appels de librairie ne suffit pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    '** Déclaration des API
        'Public Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" (ByVal hDc As Long, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As LongPtr, ByVal nIndex As Long) As Long
        'Public Declare Function apiGetDC Lib "user32" Alias "GetDC" (ByVal hWnd As Long) As Long
    Private Declare PtrSafe Function GetDC Lib "USER32" (ByVal hWnd As LongPtr) As LongPtr
        'Public Declare Function apiReleaseDC Lib "user32"  Alias "ReleaseDC" (ByVal hWnd As Long,  ByVal hDc As Long) As Long
    Private Declare PtrSafe Function ReleaseDC Lib "USER32" (ByVal hWnd As LongPtr, ByVal hDC As LongPtr) As Long
     '** Déclaration des constantes
    L'erreur suivante apparait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Resize()
     gdb.ReSizeFormAuto  => Erreur d'exécution 91 . Variable objet ou variable de bloc with non définie.
    End Sub
    Essai de correction par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Open(Cancel As Integer)
        DoCmd.Restore
        gdb.InitFormAuto Me
    End Sub
     
    Private Sub Form_Resize()
      gdb.ReSizeFormAuto
    End Sub
    Apparait alors l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function apiHauteurEcran()
    '** Résolution verticale de l'écran
        Dim hDC     As Long
        hDC = apiGetDC(HWND_DESKTOP)  => erreur de compilation: Sub ou fonction nondéfinie.
        apiHauteurEcran = apiGetDeviceCaps(hDC, VertRes)
        apiReleaseDC HWND_DESKTOP, hDC
    End Function
    Après le remplacement de [C]apiGetDC [/C par GetDCC'est maintenant celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function apiHauteurEcran()
    '** Résolution verticale de l'écran
        Dim hDC     As Long
        hDC = GetDC(HWND_DESKTOP) => Erreur de Compilation:  Incompatibilité de type
       apiHauteurEcran = GetDeviceCaps(hDC, VertRes)
        apiReleaseDC HWND_DESKTOP, hDC
    End Function
    Je jette l'éponge, mes très maigres connaissances des API sont mises à mal...
    Si une "pointure" ou si l'auteur du programme cité en début de discussion "Jessy SEMPERE", pouvaient quelque chose.
    Bravo, en tous cas pour ce passionnant Forum.
    https://mega.nz/#!nNEBGBiQ!EkgvUwKsr...sqyWHynGQ-K9MY

  20. #20
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    L'outil dans sa version originale fait appel à des bibliothèques 32 bits. Une 1e piste pour le faire fonctionner dans ton environnement est donc de voir s'il s'agit de l'OS ou de l'office et en fonction de ta version de ceux-ci, voir s'il faut trouver la bibliothèque 64 bits équivalente...

    Il me semble qu'en 2013 mon OS était déjà 64 bits donc je pense que ton office est 64 et que le problème vient de là

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/07/2013, 22h22
  2. Laiser une zone accessible sur un ecran
    Par thebarbarius dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 16/09/2011, 07h57
  3. [AC-2003] Test automatique sur une bdd access
    Par piere42 dans le forum Modélisation
    Réponses: 5
    Dernier message: 29/05/2009, 20h46
  4. Problème d’accès à une BDD Access sur certains OS !
    Par Alain33 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/10/2007, 21h32
  5. utilisé une BDD access sur un reseau local
    Par devlopassion dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/09/2006, 18h57

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