Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2007, 14h18   #1
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Par défaut [IHM] Gérer la résolution des formulaires

Hello,

Voici un code à placer dans un module... Il permet de détecter la résolution actuelle de l'écran et de redimensionner en fonction de la résolution de développement.

Ca existait déjà, les petits + sont :
+ Gestion des contrôles spéciaux : Onglets, boutons radios, listes, sections...
+ Lisibilité améliorée des polices (par un léger agrandissement à prendre en compte lors de la création)
+ Gestion des résolutions plus élevées, mais aussi plus petites
+ Gestion des contrôles ActiveX (Comme le calendrier. Attention toutefois, les polices de celui-ci étant intégrées, il arrive que pour certaines résolutions, le texte de la date disparaisse s'il est trop petit, comme le Calendrier, par exemple. mais c'est à prendre à compte lors de la conception)...

Voici le code. Je suis ouvert à toutes les remarques et à tous les bugs PS : Comme c'est la première que je poste ici, soyez indulgent, hein ???

Code :
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
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
Option Compare Database
Option Explicit
'
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
 
Private Const HORZRES As Long = 8
Private Const VERTRES As Long = 10
Private Const HWND_DESKTOP = 0
 
Private Const ResolutionInitialeX = 1024
Private Const ResolutionInitialeY = 768
 
Private FactRedimX As Double
Private FactRedimY As Double
 
Private CoordsFD(0 To 255, 0 To 255) As Long
'
'
'###################################'
'                                   '
'          CODE RESOLUTION          '
'                                   '
'###################################'
Private Sub ResolutionActuelle()
On Error GoTo Erreur
 
    Dim hdc As Long
    Dim ResolutionActuelleX As Long
    Dim ResolutionActuelleY As Long
    Dim RatioX As Double
    Dim RatioY As Double
 
    'Donne la résolution actuelle en pixels...
    hdc = GetDC(HWND_DESKTOP)
    ResolutionActuelleX = GetDeviceCaps(hdc, HORZRES)
    ResolutionActuelleY = GetDeviceCaps(hdc, VERTRES)
    ReleaseDC HWND_DESKTOP, hdc
 
    'Facteur de redimensionnement...
    FactRedimX = ResolutionActuelleX / ResolutionInitialeX
    FactRedimY = ResolutionActuelleY / ResolutionInitialeY
 
    'Ratio permettant d'agrandir légèrement les contrôles et les formulaires pour un facteur
    'inférieur ou égale à 1 (exemple : Initiale 1024 x 768, Actuelle 800 x 600)
    'afin de rendre certaines polices ou certains contrôles lisibles...
    'Il est IMPORTANT de vérifier constamment qu'un formulaire agrandi ne dépasse pas de la zone écran !!!
    RatioX = FactRedimX / FactRedimY
    RatioY = FactRedimY / FactRedimX
    If (ResolutionActuelleX <> ResolutionInitialeX) Or (ResolutionActuelleY <> ResolutionActuelleY) Then
        If RatioX <= 1 Then FactRedimX = FactRedimX * 1.1
        If RatioY <= 1 Then FactRedimY = FactRedimY * 1.05
    End If
 
Sortie:
    Exit Sub
 
Erreur:
    MsgBoxPlusErreur "modResolution", "ResolutionActuelle", CStr(Err.Number), Err.Description
    Err.Clear
    Resume Sortie
 
End Sub
'
'
'
'##################################################'
'                                                  '
'          CODE REDIMENSIONNEMENT GENERAL          '
'                                                  '
'##################################################'
Public Sub proResolution(ByRef frmRedim As Form)
On Error GoTo Erreur_proResolution
 
    Dim LargeurFormulaire As Long
    Dim HauteurFormulaire As Long
 
    Dim numControle As Integer
    Dim typeControle As Variant
 
    'Os : Objets spéciaux...
    Dim Os As Boolean 'Passe à Oui si des Os sont détectés (sauf pour OsSection, toujours présents)...
    Dim OsCompteur As Integer
 
    Dim OsSection(0 To 20) As Integer 'Nombre de sections possibles dans le formulaire (!), 21 est déjà pas mal ;-)...
 
    Dim OsNom(0 To 255) As String 'Nombre d'Os possible par formulaire (chaîne)...
    Dim OsCoords(0 To 255, 1 To 6) As Double 'Coordonnéees des Os...
 
    Dim OsColonnes(0 To 255) As String 'Largeur des colonnes pour les listes (chaînes)...
    Dim OsCarColonnes(0 To 255) As Long 'Nombre de caractères pour la chaîne OsColonnes...
    Dim OsPositionCar As Integer 'Position du caractère ";" dans la chaîne OsColonnes...
    Dim OsNombreColonnes As Integer 'Nombre de colonnes à redimensionner...
    Dim OsDimensionColonne(0 To 255) As String 'Dimensions de chaque colonne des listes...
    Dim OsRedimColonnes As String 'Redimensionnement des colonnes...
 
    Dim FactRedimPolice As Double
 
'Calcul des facteurs de redimensionnement, "enregistrement" des hauteurs des sections,
'et initialisation de la variable Os...
    ResolutionActuelle
    LargeurFormulaire = frmRedim.InsideWidth
    For OsCompteur = 0 To 20
        OsSection(OsCompteur) = frmRedim.Section(OsCompteur).Height
    Next
    Os = False
 
'Surdimensionnement (x2) du formulaire afin d'éviter l'erreur 2100 lors du redimensionnement des onglets...
    'Largeur...
    frmRedim.InsideWidth = LargeurFormulaire * 2
    'Hauteur...
    HauteurFormulaire = 0
    For OsCompteur = 0 To 20
        HauteurFormulaire = HauteurFormulaire + OsSection(OsCompteur)
        frmRedim.Section(OsCompteur).Height = OsSection(OsCompteur) * 2
    Next
    frmRedim.InsideHeight = HauteurFormulaire * 2
 
'Lecture des contrôles du formulaire à la recherche des Os !! (normalement 206 dans le corps humain)...
    For numControle = 0 To (frmRedim.Controls.Count - 1)
        typeControle = frmRedim.Controls(numControle).ControlType
        Select Case typeControle
            Case acOptionGroup, acPage
                Os = True
                With frmRedim.Controls(numControle)
                    OsNom(numControle) = .Name
                    OsCoords(numControle, 1) = .Left
                    OsCoords(numControle, 2) = .Top
                    OsCoords(numControle, 3) = .Width
                    OsCoords(numControle, 4) = .Height
                End With
            Case acTabCtl
                Os = True
                With frmRedim.Controls(numControle)
                    OsNom(numControle) = .Name
                    OsCoords(numControle, 1) = .Left
                    OsCoords(numControle, 2) = .Top
                    OsCoords(numControle, 3) = .Width
                    OsCoords(numControle, 4) = .Height
                        '1 à 4 : Left, Top, Width, Height de tous les contrôles Os...
                    OsCoords(numControle, 5) = .TabFixedWidth
                    OsCoords(numControle, 6) = .TabFixedHeight
                        '5 à 6 : Largeur et hauteur des étiquettes des contrôles Os onglets...
                End With
            Case acComboBox, acListBox
                Os = True
                With frmRedim.Controls(numControle)
                    OsNom(numControle) = .Name
                    OsColonnes(numControle) = .ColumnWidths
                    OsCarColonnes(numControle) = Len(.ColumnWidths)
                End With
        End Select
    Next
 
'Redimensionnement des contrôles...
    'Placement de tous les contrôles, sauf les onglets et les pages d'onglets...
    For numControle = 0 To (frmRedim.Controls.Count - 1)
        typeControle = frmRedim.Controls(numControle).ControlType
        Select Case typeControle
            Case acTabCtl, acPage
            Case Else
            frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left * FactRedimX, _
                                                Top:=frmRedim.Controls(numControle).Top * FactRedimY
        End Select
    Next
 
    'Redimensionnement des contrôles...
    For numControle = 0 To (frmRedim.Controls.Count - 1)
        typeControle = frmRedim.Controls(numControle).ControlType
        Select Case typeControle
            Case acOptionGroup, acPage 'Os
                If Os = True Then
                    frmRedim.Controls(numControle).Move Left:=OsCoords(numControle, 1) * FactRedimX, _
                                                        Top:=OsCoords(numControle, 2) * FactRedimY, _
                                                        Width:=OsCoords(numControle, 3) * FactRedimX, _
                                                        Height:=OsCoords(numControle, 4) * FactRedimY
                End If
            Case acTabCtl 'Os
                If Os = True Then
                    frmRedim.Controls(numControle).TabFixedWidth = OsCoords(numControle, 5) * FactRedimX
                    frmRedim.Controls(numControle).TabFixedHeight = OsCoords(numControle, 6) * FactRedimY
                    frmRedim.Controls(numControle).Move Left:=OsCoords(numControle, 1) * FactRedimX, _
                                                        Top:=OsCoords(numControle, 2) * FactRedimY, _
                                                        Width:=OsCoords(numControle, 3) * FactRedimX, _
                                                        Height:=OsCoords(numControle, 4) * FactRedimY
                End If
            Case acComboBox, acListBox 'Os
                If Os = True Then
                    frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left, _
                                                        Top:=frmRedim.Controls(numControle).Top, _
                                                        Width:=frmRedim.Controls(numControle).Width * FactRedimX, _
                                                        Height:=frmRedim.Controls(numControle).Height * FactRedimY
                    'Si des dimensions ont été renseignées à la création des listes...
                    If OsCarColonnes(numControle) > 0 Then
                        OsNombreColonnes = 1
                        'Test de la variable dimensions à la recherche des ";"...
                        For OsCompteur = 1 To OsCarColonnes(numControle)
                            OsPositionCar = InStr(OsCompteur, OsColonnes(numControle), ";", vbTextCompare)
                            If OsPositionCar <> 0 Then
                                OsNombreColonnes = OsNombreColonnes + 1
                                OsCompteur = OsPositionCar + 1
                            End If
                        Next
                    OsRedimColonnes = ""
                    'Redimensionne chaque colonne...
                    For OsCompteur = 0 To OsNombreColonnes - 1
                        OsDimensionColonne(OsCompteur) = Split(OsColonnes(numControle), ";")(OsCompteur)
                        'Si colonne non renseignée (sauf la dernière), elle est égale à zéro...
                        If Len(OsDimensionColonne(OsCompteur)) = 0 Then OsDimensionColonne(OsCompteur) = "0"
                        OsDimensionColonne(OsCompteur) = CDbl(OsDimensionColonne(OsCompteur)) * FactRedimX
                        OsRedimColonnes = OsRedimColonnes & OsDimensionColonne(OsCompteur) & ";"
                    Next
                    frmRedim.Controls(numControle).ColumnWidths = Left(OsRedimColonnes, Len(OsRedimColonnes) - 1)
                                                                  'Enlève le dernier ";"...
                    End If
                End If
            Case acOptionButton, acCheckBox 'Contrôles non redimensionnables...
                'La longueur ("virtuelle") est redimensionnée afin d'éviter au texte d'être trop collé...
                frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left, _
                                                    Top:=frmRedim.Controls(numControle).Top, _
                                                    Width:=frmRedim.Controls(numControle).Width * FactRedimX, _
                                                    Height:=frmRedim.Controls(numControle).Height
            Case Else 'Tous les autres contrôles...
                frmRedim.Controls(numControle).Move Left:=frmRedim.Controls(numControle).Left, _
                                                    Top:=frmRedim.Controls(numControle).Top, _
                                                    Width:=frmRedim.Controls(numControle).Width * FactRedimX, _
                                                    Height:=frmRedim.Controls(numControle).Height * FactRedimY
        End Select
    Next
 
   'Redimensionnement des polices...
    FactRedimPolice = (IIf(FactRedimX > FactRedimY, FactRedimY, FactRedimX))
    For numControle = 0 To (frmRedim.Controls.Count - 1)
        typeControle = frmRedim.Controls(numControle).ControlType
        Select Case typeControle
            Case acOptionGroup, acPage, acRectangle, acLine, acCheckBox, acOptionButton, acImage, acCustomControl, _
                acSubform, acPageBreak, acBoundObjectFrame, acObjectFrame
                'Contrôles n'ayant pas de police...
            Case Else
                frmRedim.Controls(numControle).FontSize = frmRedim.Controls(numControle).FontSize * FactRedimPolice
        End Select
    Next
 
'Redimensionnement final du formulaire après redimensionnement des contrôles...
    'Largeur...
    frmRedim.InsideWidth = LargeurFormulaire * FactRedimX
    'Hauteur...
    HauteurFormulaire = 0
    For OsCompteur = 0 To 20
        HauteurFormulaire = HauteurFormulaire + OsSection(OsCompteur)
        frmRedim.Section(OsCompteur).Height = OsSection(OsCompteur) * FactRedimY
    Next
    frmRedim.InsideHeight = HauteurFormulaire * FactRedimY
 
Sortie_proResolution:
    Exit Sub
 
Erreur_proResolution:
    If Err.Number = 2462 Or Err.Number = 438 Or Err.Number = 2100 Then
        '2462 : Section inexistante, 438 : Propriété non gérée (polices), 2100 : Dépassement de capacité...
        Err.Clear
        Resume Next
    Else
        MsgBoxPlusErreur "modResolution", "proResolution", CStr(Err.Number), Err.Description
        Err.Clear
        Resume Sortie_proResolution
    End If
 
End Sub
'
'
'
'#############################################################'
'                                                             '
'          CODE REDIMENSIONNEMENT FEUILLE DE DONNEES          '
'                                                             '
'#############################################################'
Public Sub proResolutionFD(ByRef frmRedim As Form)
On Error GoTo Erreur_proResolutionFD
 
    Dim numControle As Integer
 
    For numControle = 0 To frmRedim.Controls.Count - 1
        Select Case frmRedim.Controls(numControle).ControlType
            Case 109 '109 : Contrôle colonne...
                CoordsFD(frmRedim.Count, numControle) = frmRedim.Controls(numControle).ColumnWidth
                frmRedim.Controls(numControle).ColumnWidth = frmRedim.Controls(numControle).ColumnWidth * FactRedimX
            End Select
    Next
 
Sortie_proResolutionFD:
    Exit Sub
 
Erreur_proResolutionFD:
    If Err.Number = 438 Then '438 : Propriété non gérée (colonnes)...
        Err.Clear
        Resume Next
    Else
        MsgBoxPlusErreur "modResolution", "proResolutionFD", CStr(Err.Number), Err.Description
        Err.Clear
        Resume Sortie_proResolutionFD
    End If
 
End Sub
'
'
'
Public Sub proResolutionFD_Exit(ByRef frmRedim As Form)
On Error GoTo Erreur_proResolutionFD_Exit
 
    Dim numControle As Integer
 
    For numControle = 0 To frmRedim.Controls.Count - 1
        Select Case frmRedim.Controls(numControle).ControlType
            Case 109 '109 : Contrôle colonne...
                frmRedim.Controls(numControle).ColumnWidth = CoordsFD(frmRedim.Count, numControle)
            End Select
    Next
 
Sortie_proResolutionFD_Exit:
    Exit Sub
 
Erreur_proResolutionFD_Exit:
    If Err.Number = 438 Then '438 : Propriété non gérée (colonnes)...
        Err.Clear
        Resume Next
    Else
        MsgBoxPlusErreur "modResolution", "proResolutionFD_Exit", CStr(Err.Number), Err.Description
        Err.Clear
        Resume Sortie_proResolutionFD_Exit
    End If
 
End Sub
'
'
'
'###############################'
'                               '
'          UTILISATION          '
'                               '
'###############################'
'
'Ecrire 'proResolution Me' dans la procédure VBA Form_Open du formulaire à redimensionner...
'
'Ecrire 'proResolutionFD Me' dans la procédure VBA Form_Open du formulaire feuille de données...
'
'Ecrire 'proResolutionFD_Exit Me.NomDuContrôleSousFormulaire.Form' dans la procédure VAB Form_Close
'du formulaire à redimensionner (celui contenant le(s) sous-formulaire(s) en feuille de données).
'A écrire autant de fois qu'il y a de sous-formulaires en feuille de données...
'
'Attention à bien dimensionner les colonnes au départ, sans aucun redimensionnement, et à prévoir une
'marge car l'ascenseur s'élargit lorsqu'on descend en résolution...
Le 20.07.2007 : Prise en charge des onglets et des boutons radios

Test effectués (Access 2003 et XP) : Boutons radios, cases à cocher, onglets avec plusieurs pages (contenant elles mêmes d'autres objets spéciaux), images, Calendrier ActiveX, et puis les contrôles standards : Boutons, listes, étiquettes...

Bogues constatés : Problème de redimensionnement des sections, colonnes des listes non redimensionnées...

Améliorations à venir :
+ Gestion de la largeur des colonnes des listes. Les listes se mettent aux bonnes dimensions, mais pas les colonnes. Elles restent fixent par rapport aux cm entrès lors de la conception...
+ Prise en charge complète des sections...

Le 21.07.2007 : Prise en charge des listes et des sections, simplification du code

Test effectués (Access 2003 et XP) : Tous les tests précédents ainsi que des tests avec différentes sections et différentes listes (fixes, déroulantes)

Le 26.07.2007 : Essai prise en charge des formulaires "feuille de données" + quelques 'tites modifs du code...

Nouveaux essais (Access 2003 et XP) : Concluants pour le 1er redimensionnement, mais les colonnes ne reprennent pas leurs dimensions originales...

Le 27.07.2007 : Prise en charge des formulaires "feuille de données"

Nouveaux essais concluants ! Petit bug constaté : Lorsqu'on change de résolution, il faut ouvrir deux fois le formulaire. La première fois, les colonnes sont invisibles, pourtant unr boite de message me certifie que celles-ci sont de largeur > 0... Je ne sais pas d'où ça vient...
Ceci dit, je pense qu'il faudrait pousser plus loin la recherche et affecter à chaque colonne, non pas une dimension, mais un pourcentage en fonction de la largeur (moins la largeur de l'ascenseur...).................

Tests à venir : Essais avec le RunTime...

Merci à tous pour vos conseils... et merci d'avance si vous souhaitez jeter un oeil à ce code et effectuer différents tests...
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/07/2007, 14h20   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 922
Points : 30 922
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Il faudrait essayer de tester evec des composants non standard qui sont souvent utiliser sous Access (DtPicker, Calendrier, et...)

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 14h22   #3
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Ok, je note...

Edit:
Pour le calendrier ActiveX, aucun problème... Il se redimensionne, j'ai juste corrigé au niveau du redimensionnement de la police (ce contrôle n'en ayant pas).

Je n'ai jamais utilisé le "dtPicker" par contre... je le trouve où ?
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 08h59   #4
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hello,

Je viens d'apporter quelques corrections à mon code de départ, notamment la gestion des onglets... J'ai également mis quelques annotations en plus...

PS : J'ai préféré corriger le code du début de mon premier messge afin qu'il n'y ait pas trop de codes ou trop de versions dans ce message... Si j'ai mal fait, n'hésitez pas à me corriger !!

Bonne journée à tous ! (euh... sous la pluie ici............)
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 12h31   #5
Membre habitué
 
Inscription : septembre 2005
Messages : 310
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2005
Messages : 310
Points : 104
Points : 104
Bonjour à tous !

Ce sujet a l'air super intéressant !

J'ai donc tester le code, je suis sous Access 97.
Sur un Form_open j'ai donc indiqué proResolution Me et là j'ai une erreur à l'ouverture du formulaire :
"Erreur de compilation, sub ou fonction non définie" sur
Code :
1
2
3
4
5
Else
        MsgBoxPlusErreur "modResolution", "proResolution", CStr(Err.Number), Err.Description
        Err.Clear
        Resume Sortie_proResolution
    End If
Par avance merci :-)
JeremieT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 13h52   #6
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hello,

Oui, tout à fait, et c'est normal !!!

C'est une gestion d'erreur perso ! Remplace ce morceau de code par :

Code :
1
2
3
MsgBox Err.Number & " : " & Err.Description
Err.Clear
Resume Sortie_proResolution
Voilà...

Attenton à une chose : Je ne sais pas si c'est compatible avec des versions antérieures à Access 2003...
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 14h25   #7
Membre habitué
 
Inscription : septembre 2005
Messages : 310
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2005
Messages : 310
Points : 104
Points : 104
Merciiiiiiiiiiii :-)

Sauf que now j'ai une erreur Erreu de compilation, Etiquette non définie sur Resume Sortie_proResolution alors que j'ai bien plus loin
Code :
1
2
Sortie_proResolution:
    Exit Sub
Par avance merci ;-)
@+
JeremieT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 16h05   #8
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hello,

Je ne connais pas Access 97. Mais comme de toute façon, il n'y a pas de code dans la section "sortie", tu n'as qu'à remplacer Resume Sortie_proresolution par Exit Sub.

Comme ça, pas besoin de faire un retour sur une section qui ne sert qu'à quitter la procédure...
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 17h16   #9
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hello,

Voilà... Je viens d'apporter une nouvelle modif à mon code... Cette fois-ci, les onglets, les listes, les contrôles, les sections, etc... sont normalement pris en compte... Si l'envie vous dit de tester tout ça... Je suis preneur des bogues à corriger !!!

Bon week-end à toutes et tous !!!
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 18h42   #10
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 233
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 233
Points : 9 903
Points : 9 903
Envoyer un message via Skype™ à Domi2
Bonjour Noawsen,

Premières constatations.

Access XP, Windows XP pro. Pas de bugs, compile parfaitement.

Un formulaire développé en 800 x 600 (j'ai donc changé les constantes) affiché en 1024 x 768).

Ce formulaire est affiché sans barre d'état, mais avec une barre de menus personnalisée. Dimension "limite", puisqu'il fait 21cm de largeur, sur 13.5 de hauteur, sans bordure. Propriété auto centrer à Oui

L'affichage n'est pas tout à fait correct dans la mesure où il est mal positionné en haut à gauche (à vue d'oeil, je dirai 2cm trop à droite et 1.5cm trop bas). J'ai donc les barres de défilement verticale et horizontale, alors qu'il devrait occuper uniquement la quasi-totalité de l'écran.

Ton ratio de redimmensionnement est peut-être un "poil" trop généreux... Mais c'est peut-être aussi un peu trompeur. Comme il est trop grand, la propriété Auto centrer ne fait peut-être pas correctement son boulot !

Un contrôle un peu particulier, un treeview, se redimmensionne parfaitement.

Pour le reste de ce que je vois... Chapeau... C'est plus que prometteur...

Domi2
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 19h39   #11
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hello,

Citation:
L'affichage n'est pas tout à fait correct dans la mesure où il est mal positionné en haut à gauche (à vue d'oeil, je dirai 2cm trop à droite et 1.5cm trop bas). J'ai donc les barres de défilement verticale et horizontale, alors qu'il devrait occuper uniquement la quasi-totalité de l'écran.
Effectivement... Perso, j'utilise une procédure de centrage que je place après le "proResolution Me"... et que j'ai appelé... "proCentrer Me" !! (Elle est dans les sources, il me semble... je ne crois pas l'avoir retouchée...)

Citation:
Ton ratio de redimmensionnement est peut-être un "poil" trop généreux... Mais c'est peut-être aussi un peu trompeur. Comme il est trop grand, la propriété Auto centrer ne fait peut-être pas correctement son boulot !
Pour le facteur de redimensionnement, vu que tu pars d'une petite résolution et que tu montes, il n'est normalement pas nécessaire... Je l'ai prévu au cas où ce soit l'inverse (développé en 1024x768 et passé en 800x600). Je devrais peut-être changer la condition pour n'utiliser le facteur qu'en cas de résolution inférieure (pourtant, c'est bizarre, il me semble l'avoir déjà fait, et je suis revenu dessus)... A tester...
Ce ratio est donc là pour rendre les polices visibles quand on descend en résolution... A tester pour le diminuer au maximum...

Citation:
Un contrôle un peu particulier, un treeview, se redimmensionne parfaitement.
Super J'avais pas testé !

Citation:
Pour le reste de ce que je vois... Chapeau... C'est plus que prometteur...

Merci de ton aide, c'est très sympa !!! Je vais mijoter tout cela ce dimanche... J'aurais l'esprit plus frais lundi... et peut-être un peu moins mal à la gorge (dfyzefy ygfey fzyeff de temps !!!)

Bon week-end !!! Enfin... bon dimanche...
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2007, 07h00   #12
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 233
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 233
Points : 9 903
Points : 9 903
Envoyer un message via Skype™ à Domi2
Cordial et matinal bonjour,

Citation:
Effectivement... Perso, j'utilise une procédure de centrage que je place après le "proResolution Me"...
J'aurais pu y penser, d'autant qu'elle était déjà dans l'application test que j'utilise (désactivée)

Ca fonctionne "pil-poil"... Donc pas de problème de redimmensionnement...

J'ai bien regardé les contôles (étiquette et texte) où les textes étaient "limites". Ils sont à peine plus "courts" et ne sortent donc pas des contrôles, c'est ok.

Les zones de listes, les boutons, les contrôles images, le treeview, ça à l'air ok.

Les onglets, ça a l'air parfait.

Par contre, pour le groupe d'options, j'observe un léger décalage (voir photo).

Les sous-formulaires en mode continu, ça à l'air tout bon. En mode feuille de données, reste la largeur des colonnes.

Et un contrôle un peu particulier, les cases à cocher. J'ai de la peine à dire si elles se redimmensionnent. Je dirais non !

Edit :

Après vérification, elle ne semblent pas redimmensionnable et c'est pris en compte dans ton code... Ca passe par ailleurs très bien à l'oeil, pas de soucis donc !

Je vais essayer de faire le test inverse (1024x768 ==> 800x600), mais c'est sans garantie aujourd'hui.

A mon avis, tu es bientôt bon pour la postérité

Domi2
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 11h14   #13
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hello !!!

Citation:
Par contre, pour le groupe d'options, j'observe un léger décalage (voir photo).
A mon avis, cela vient du fait que je redimensionne la longueur "virtuelle" des contrôles non redimensionnables (cases à coher et boutons radios). J'ai prévu ce redimensionnement afin d'éviter au label associé d'être trop collé lorsqu'on descend en résolution... Encore une fois, je peux metre une condition (si résolution en X actuelle inférieure à la résolution initiale en X)...

Citation:
Après vérification, elle ne semblent pas redimmensionnable (cases à cocher) et c'est pris en compte dans ton code...
En fait, j'ai remarqué que les cases à cocher et les boutons radios ne se redimensionnent pas... (leur emplacement se redimensionne, ce que j'appelle le redimensionnement virtuel, mauis pas le contrôle en lui même). Je crois que ceci ne concerne que les boutons radios et les cases à cocher.

Citation:
Je vais essayer de faire le test inverse (1024x768 ==> 800x600)
J'attends tes commentaires et ensuite, je procéderai à quelques modifs... Il me reste également à intégrer dans le code quelques contrôles comme les sauts de pages, par exemple...

Citation:
Les sous-formulaires en mode continu, ça à l'air tout bon. En mode feuille de données, reste la largeur des colonnes.
Arf... un grain de sable !!! Je vais voir ce que je trouve comme info la dessus... je n'ai pas encore testé les formulaire en mode feuille de données...

Citation:
A mon avis, tu es bientôt bon pour la postérité
Si je peux éviter les paparazzis...
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 11h18   #14
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 922
Points : 30 922
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Pour info pour la largeur des colonnes en mode feuille de données il faut utiliser : ColumnWidth et pour la hauteur RowHeight (s'applique à toutes les lignes).

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 11h44   #15
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hi,

Merci... Bien noté !!!
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 12h22   #16
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 233
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 233
Points : 9 903
Points : 9 903
Envoyer un message via Skype™ à Domi2
Bonjour,

Test 1024 x 768 ==> 800 x 600.

Ca ne commence pas trop bien. J'utilise de nouveau un formulaire "limite" de 26.8 cm de largeur et de 18 cm de hauteur (sans la barre d'état).

Il ne rentre pas dans la fenêtre... De pas grand chose, mais il ne rentre pas.

J'ai bien utilisé la fonction de centrage et fait également le test avec un MoveSize.

Domi2
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 13h18   #17
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Hello,

En fait, il y a plusieurs problèmes intrinsèques à la conception lorsqu'on descend en résolution...

Par rapport au code écrit, soit on supprime le ration de redimensionnement et dans ce cas, on aura exactement la même taille quelle que soit la résolution(mais on risque d'avoir un problème au niveau des polices et des tailles de contrôles : Soit les polices sont illisibles, soit elles sortent du cadre), soit on fait des formulaires un peu plus petit afin de prendre en compte le redimensionnement par arpport au ration, ce que je préconise dans mon code...
Malheureusement, Access ne prenant pas en charge le redimensionnement, j'ai fait le choix de faire des formulaires plus petits qui ne dépasseront pas de l'écran... Une solution possible sans utiliser de facteur d'agrandissement est d'utiliser des polices dont la taille est supérieure à 10. En résolution plus petite, elles devraient rester lisibles...

Dans tous les cas, c'est donc un choix qui reste à faire à la conception... Je n'ai pas d'autre solution sous la main...
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 22h01   #18
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Bonsoir...

Voici un nouveau bout de code... Et la, j'aurais besoin de toute l'aide disponible pour un 'tit problème que je ne comprends pas...

La largeur des colonnes se redimensionne bien à la lecture du formulaire... Elle se redimensionne également à la fermeture, car si j'affiche leur largeur dans une MsgBox, je vois bien qu'elle s redimensionne... Mais le problème, c'est que la nouvelle largeur (celle d'origine, donc) ne s'enregistre pas... Ce qui fait qu'à la deuxième ouverture, les colonnes se redimensionnent en fonction du premier redimensionnement et donc s'élargissent encore + et + et ++++; jusqu'à un dépassement de capacité...

J'ai pasé un bout de temps dessus, mais je ne comprends pas... La solution serait éventuellement de programmer les largeurs des colonnes dans le Form_Load ou Form_View du formulaire feuille de données... Comme ça, plus besoin de redimensionner à la fermeture, mais j'aurais préféré qqch de plus automatisé...

Je n'ai pas encore testé avec plusieurs sous-forms en feuille de données, mais la aussi, je me demande si ça ne va pas poser quelques problèmes... Je vais voir tout ça...

A bientôt...
__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2007, 22h40   #19
Membre éclairé
 
Inscription : septembre 2006
Messages : 544
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 544
Points : 398
Points : 398
Voilà... Je continue mon monologue !!!

Je viens de mettre le code qui permet de redimensionner également les colonnes des formulaires feuille de données (avec un 'tit bug que je ne comprends pas, tout est écrit dans le 1er message)...

Ce n'est pas parfait, je pense qu'il faudrait écrire une 'tite fonction placée dans le Form_Open des formulaires feuille de données afin de gérer la largeur des colonnes en pourcentage... Ou mieux, d'écrire la largeur des colonnes en vba (une ligne pour chaque colonne)..... Mais, bon, ça à déjà le mérite d'être efficace à 95%... ........ Ouai, ouai, ouai... j'en vois déjà qui disent :"Mouiiiii, et les 5% ??? "

Bref, je vous laisse juger, essayer, critiquer, m'insulter, et même me bannir de ce forum !!!!

__________________
Il est plus important de chercher que d’avoir trouvé. (André Siegfried)
Abusez de la touche F1, de la FAQ, de la Recherche... et aussi du Résolu et du MERCI...
seb92400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 12h41   #20
Invité de passage
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 2
Points : 2
Envoyer un message via MSN à yoldz Envoyer un message via Yahoo à yoldz
salut noawsen,
et donc il est où le code final et parfait je le vois pas tu peux pe le joindre ici pour l'utiliser stp?
yoldz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h52.


 
 
 
 
Partenaires

Hébergement Web