Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Auto-extension d'un champs : appliquer la même hauteur à tous.

59 views
Skip to first unread message

Soya

unread,
May 28, 2007, 9:55:00 AM5/28/07
to
Bonjour les pros,

Dans un état, j'ai un champs auto-extensible. Comment faire pour que,
lorsque ce champs "s'auto-extentionne", les autres champs sur la même ligne
fassent la même chose ? Histoire d'esthétique...

Merci et bon lundi !

Soya

Raymond [mvp]

unread,
May 28, 2007, 10:30:02 AM5/28/07
to
Bonjour.

Lorsqu'un contrôle s'agrandit, les contrôles situés en dessous se déplacent
vers le bas dans la page, sans effet sur les autres.
La seule solution pour que tous les autres controles situés sur la même
ligne suivant l'agrandissement, c'est de tous les placer dans un sous-état.
la section détail du sous-état prenant tout l'espace horizontal, c'est une
bonne simulation d'extension sans en être une.
ce n'est pas parfait comme solution.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Le multimédia vu par Windows Vista, Office 2007 et Windows Live !!!
http://www.comscamp.com/Tracker/Redirect.ashx?linkid=b064304e-439a-45c7-9d2f-c3326db58273


"Soya" <So...@discussions.microsoft.com> a écrit dans le message de news:
DEC91668-0545-4730...@microsoft.com...

Soya

unread,
May 28, 2007, 11:28:03 AM5/28/07
to
Bonjour Raymond,

Ha mince... Ça ne fait pas mon affaire. Je pensais qu'il existait peut-être
quelque part une formule code de type "Abracadabra" qui dirait à tous ces
contrôles indisciplinés de se soumettre au contrôle chef quand il
s'agrandit...

Bon ben tant pis. Je vais garder mon état moche avec ses lignes pas belles.

Merci tout de même ! :)

"Raymond [mvp]" a écrit :

MF

unread,
May 30, 2007, 12:23:57 PM5/30/07
to
Bonjour Soya et Raymond,

C'est vraiment triste de devoir garder un état moche avec des lignes pas
belles !...

J'ai ce problème aussi depuis un bon moment pour la mise en forme de devis
et factures notamment.
J'ai utilisé ta technique, Raymond, en plaçant des lignes verticales entre
les contrôles du sous-état. Ces lignes peuvent "grandir" en fonction de
l'extension, en utilisant une technique que j'ai trouvée dans
http://support.microsoft.com/default.aspx?scid=kb;fr;286247
Ca marche très bien.
Je peux vous envoyer l'exemple si vous voulez.

Mais j'ai encore un petit truc à améliorer (Saint Raymond, priez pour nous
!) :
Dans mon sous-état, j'ai par exemple les contrôles suivants :
Col 1 Col 2 Col 3 Col 4 Col 5
N° art. Désignation Quantité Prix unit. Prix total

Le contrôle "Désignation" doit être extensible, donc c'est lui le "chef".
Mais je voudrais, pour faire joli et compréhensible par le client que,
lorsqu'il s'étend sur plusieurs lignes, l'écriture des colonnes suivantes
s'aligne en bas, donc au niveau de la dernière ligne du contrôle
"Désignation".
(Dans un tableau Excel, c'est possible de formater les cellules comme cela)
Est-ce que je me fais bien comprendre ?

Qu'en pensez-vous? Quelqu'un a-t-il un tuyau ?

Merci pour vos lumières.

Maurice FAUX

"Soya" <So...@discussions.microsoft.com> a écrit dans le message de news:

CC050B59-E4DC-476D...@microsoft.com...

Raymond [mvp]

unread,
May 30, 2007, 2:06:03 PM5/30/07
to
Bonsoir.

La seule solution qu'on a trouvé pour l'instant c'est de placer les lignes
dans un sous-formulaire mais ça pose d'énormes problèmes sur les calculs.
je n'ai pas fini de tester la version 2007, qui est nettement plus
"efficace" que ses précédentes, et si j'apercevais une lueur d'espoir j'en
ferais part ici même.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Le multimédia vu par Windows Vista, Office 2007 et Windows Live !!!
http://www.comscamp.com/Tracker/Redirect.ashx?linkid=b064304e-439a-45c7-9d2f-c3326db58273


"MF" <mauri...@skynet.be> a écrit dans le message de news:
%23bN86bt...@TK2MSFTNGP04.phx.gbl...

Raymond [mvp]

unread,
May 30, 2007, 3:17:14 PM5/30/07
to
.../...

j'ajoute pour ceux qui ne sauraient pas de quoi on parle, que ce soi-disant
"problème" ne concerne que les états à disposition verticale ou justifiée et
ne concerne pas les états tabulaires qui représentent la grosse majorité des
états.
Apparemment la version 2007 traite les états de la même façon que 2003.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Le multimédia vu par Windows Vista, Office 2007 et Windows Live !!!
http://www.comscamp.com/Tracker/Redirect.ashx?linkid=b064304e-439a-45c7-9d2f-c3326db58273


"Raymond [mvp]" <xyzofficesys...@free.fr> a écrit dans le message
de news: OC6SuUuo...@TK2MSFTNGP03.phx.gbl...

Momo

unread,
May 30, 2007, 4:35:14 PM5/30/07
to
Bonsoir,
et merci à toi Raymond, pour ta disponibilité et ta compétence

Maurice FAUX

"Raymond [mvp]" <xyzofficesys...@free.fr> a écrit dans le message

de news: efKgf8uo...@TK2MSFTNGP03.phx.gbl...

Gilles MOUGNOZ

unread,
May 31, 2007, 3:45:31 AM5/31/07
to
Bonjour à tous,
J'ai récemment expérimenté une solution qui consiste à créer les bordures "à
la main".
Sur l'événement Print des différentes sections, il est possible de récupérer
la hauteur finale d'un contrôle auto-extensible et ainsi de créer les lignes
aux dimensions souhaitées avec l'instruction Me.Line (voir l'aide pour plus
de détails).
Cela donne quelque chose comme ça:

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)
Dim vnTypeGauche As Long
Dim vnCommentaireHauteur As Long
Dim vnCommentaireDroite As Long
Dim cnChamps As Long
Me.ForeColor = RGB(0, 0, 0) ' Couleur noir
vnTypeGauche = Me.Controls("TYPE_DESIGNATION").Left
With Me.Controls("COMMENTAIRE") ' champ auto-extensible
vnCommentaireHauteur = .Top + .Height ' hauteur totale du sommet de
la section au bas du contrôle commentaire
vnCommentaireDroite = .Left + .Width ' largeur totale de la gauche
de la section à la droite du contrôle commentaire
End With
Me.DrawWidth = 10 ' Epaisseur de ligne grasse
Me.Line (0, 0)-(0, vnCommentaireHauteur) ' Ligne verticale grasse de
gauche
Me.Line (vnCommentaireDroite, 0)-(vnCommentaireDroite,
vnCommentaireHauteur) ' Ligne verticale grasse de droite
Me.DrawWidth = 1 ' Epaisseur de ligne normale
Me.Line (vnTypeGauche, 0)-(vnTypeGauche, vnCommentaireHauteur) ' Ligne
verticale normale à gauche du type
End Sub

J'espère avoir fait avancer le schmilblick (en étant bien conscient que
c'est du bricolage!).
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
"Momo" a écrit :


> Bonsoir,
> et merci à toi Raymond, pour ta disponibilité et ta compétence
> Maurice FAUX

> "Raymond [mvp]" a écrit :


>> .../...
>> j'ajoute pour ceux qui ne sauraient pas de quoi on parle, que ce
>> soi-disant
>> "problème" ne concerne que les états à disposition verticale ou justifiée
>> et
>> ne concerne pas les états tabulaires qui représentent la grosse majorité
>> des
>> états.
>> Apparemment la version 2007 traite les états de la même façon que 2003.
>> --
>> @+
>> Raymond Access MVP http://OfficeSystem.Access.free.fr/
>> Pour débuter sur le forum: http://www.mpfa.info/
>> Le multimédia vu par Windows Vista, Office 2007 et Windows Live !!!
>> http://www.comscamp.com/Tracker/Redirect.ashx?linkid=b064304e-439a-45c7-9d2f-c3326db58273

>> "Raymond [mvp]" a écrit :

Raymond [mvp]

unread,
May 31, 2007, 4:10:30 PM5/31/07
to
Bonsoir Gilles .

le problème restant entier pour les contrôles à alignement libre de la
section détail.
je crois qu'on demande toujours trop et souvent qu'on ne cherche pas une
solution simple dans les états, la majorité des états étant des simples
clones d'états manuels . enfin !

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Le multimédia vu par Windows Vista, Office 2007 et Windows Live !!!
http://www.comscamp.com/Tracker/Redirect.ashx?linkid=b064304e-439a-45c7-9d2f-c3326db58273


"Gilles MOUGNOZ" <gmou...@courrierchaud.aifair> a écrit dans le message de
news: eRQmte1o...@TK2MSFTNGP04.phx.gbl...

Gloops

unread,
May 31, 2007, 7:38:32 PM5/31/07
to
MF a écrit, le 30/05/2007 18:23 :
> Dans mon sous-état, j'ai par exemple les contrôles suivants :
> Col 1 Col 2 Col 3 Col 4 Col 5
> N° art. Désignation Quantité Prix unit. Prix total
>
> Le contrôle "Désignation" doit être extensible, donc c'est lui le "chef".
> Mais je voudrais, pour faire joli et compréhensible par le client que,
> lorsqu'il s'étend sur plusieurs lignes, l'écriture des colonnes suivantes
> s'aligne en bas, donc au niveau de la dernière ligne du contrôle
> "Désignation".

Bonjour,

Si on est prêt à se lancer dans une usine à gaz de bricolage, une
solution pourrait être de commencer par écrire une fonction qui soit
capable, à partir d'un texte, de déterminer sur combien de lignes il va
s'écrire dans une colonne.

A partir de là, connaissant le nombre de lignes du chef, dans chaque
colonne on évalue le nombre de lignes à écrire, et avant d'envoyer la
sauce on la fait précéder du nombre voulu de retours curseur (chr$(13)).

Mais alors le principe, c'est bien gentil, mais pour le mettre en
pratique, on risque de s'amuser.

La semaine dernière (ou celle d'avant ?) il y a eu ici (ou alors dans le
groupe vb ?) un fil pour évaluer la largeur d'un texte pour le centrer.
ça peut peut-être donner des éléments pour évaluer le texte écrit sur
chaque ligne, et en déduire le nombre de lignes.


Je commence à comprendre comment on trouve de la matière à sortir une
nouvelle version d'Access chaque année :)

MF

unread,
Jun 1, 2007, 5:12:00 AM6/1/07
to
Salut, et merci à tous de vos idées

En fait, Access calcule la hauteur du contrôle extensible dans l'événement
"Print" du détail de l'état.
J'y ai inséré la procédure suivante pour récupérer cette valeur:

Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer)

Dim t1 As Long, t2 As Long, H1 As Long, H2 As Long
H1 = Me.Controls("Designation").Height
H2 = Me.Controls("QU").Height
t1 = Me.Controls("Designation").Top
t2 = Me.Controls("QU").Top

'Ici on peut connaitre la hauteur du contrôle "Designation" après son
extension :

MsgBox "Formatcount : " & FormatCount & vbCrLf & _
"Designation : TOP : " & t1 & " HEIGHT : " & H1 & vbCrLf & _
"QU : TOP : " & t2 & " HEIGHT : " & H2 & vbCrLf & _
" Section Détail : " & Me.Section(0).Height

'Alors, on peut calculer la position verticale voulue pour les autres
contrôles :

t2 = t1 + H1 - H2

'Jusque là tout va bien.
'Mais maintenant qu'on a la valeur voulue t2, comment peut-on re-formater
'pour forcer l'exécution de quelque chose du genre :
' Me.Controls("QU").Top = t2
'
'En fait je ne vois pas très bien où cette instruction pourrait être lancée,
ou comment
'forcer un nouveau formatage ?

End Sub

Est-ce que cette idée vous semble intéressante ?

Merci et bonne journée

MF


"Gloops" <glo...@niark.invalid> a écrit dans le message de news:
%23Wh2Pz9...@TK2MSFTNGP05.phx.gbl...

Soya

unread,
Jun 1, 2007, 9:06:01 AM6/1/07
to
Bonjour MF,

Peux-tu m'envoyer ton exemple s'il te plaît ? Je suis davantage visuelle...
Je comprendrai mieux l'histoire du sous formulaire en l'ayant sous les yeux.

'rci !

"MF" a écrit :

Gloops

unread,
Jun 4, 2007, 4:14:48 PM6/4/07
to
Salut,

Finalement, pas besoin d'usine à gaz, alors ?

Sauf que tu sembles avoir du mal à trouver le bon événement pour gérer ça.

Alors certes il y aurait bien la solution de lancer l'état une fois pour
calculer les hauteurs des contrôles et une deuxième fois pour les
positionner, enfin parti comme tu es sur la simplification, tu vas bien
trouver mieux ?


Gloops

unread,
Jun 4, 2007, 4:17:59 PM6/4/07
to
Argh, c'est bien le pavé tactile, mais quelquefois, si la main est trop
près, ça tire plus vite que son ombre.

Je ne me rappelle pas si un Refresh ou un Requery bien placés, dans un
état, peuvent repositionner les contrôles.

MF

unread,
Jun 5, 2007, 2:28:30 AM6/5/07
to
Soya,
j'ai essayé de t'envoyer l'exemple, mais ça ne marche pas, vu que je n'ai
pas ton adresse mail.
Peux-tu me la communiquer ?
MF
m...@skynet.be
(Remplacer mf par mauricefaux)

"Soya" <So...@discussions.microsoft.com> a écrit dans le message de news:

922F40BE-AE5B-45CB...@microsoft.com...

Fabien

unread,
Jun 5, 2007, 3:26:43 AM6/5/07
to
Soya a écrit :
Bonjour,
Une autre piste sur ce site
http://www.lebans.com/toc.htm

MF

unread,
Jun 6, 2007, 4:29:30 AM6/6/07
to
Bonjour Fabien,

"Fabien" <Urbania...@Neuf.fr> a écrit dans le message de news:
46651033$0$27397$ba4a...@news.orange.fr...

> Bonjour,
> Une autre piste sur ce site
> http://www.lebans.com/toc.htm

Effectivement, il y a là matière à creuser, mais,pour une usine à gaz, c'est
une usine à gaz ...;-)

MF


goo...@transversale.fr

unread,
Jul 2, 2007, 6:22:31 AM7/2/07
to
Salut,

Je suis confronté au même problème et je pense avoir trouvé une
solution facile à mettre en oeuvre.

Je crée en fait une fonction sur l'événement onFormat (et pas onPrint
car ça marche pas) de la liste de détail et j'effectue un changement
de hauteur conditionnel avec un ELSE (sinon la modif est permanente) :


Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)

If Len(Me.Controls("libelle").value) > 100 Then
Me.Controls("libelle").Height = 1000
Me.Controls("quantite").Height = 1000
Else
Me.Controls("libelle").Height = 200
Me.Controls("quantite").Height = 200
End If

End Sub


Avec cela, j'obtiens tous les champs de la ligne avec la même hauteur
si le contenu de "libelle" a plus de 100 caractères. Après on peut
moduler et ajuster ces valeurs évidemment.

A+
--
Hector

goo...@transversale.fr

unread,
Jul 2, 2007, 8:02:20 AM7/2/07
to
Resalut

Je suis bien content car cette manip. a l'air de bien marcher chez
moi. J'apporte simplement quelques autres précisions car
manifestement, modifier la hauteur des contrôles modifie aussi de
façon permanente la hauteur de la ligne de détail associée. Du coup,
on peut avoir un blanc entre les lignes si une ligne de contrôle est
moins haute que la ligne de détail associée. Enfin bref, l'exemple si
dessous sera plus parlant :


Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)

If Len(Me.Controls("libelle").value) > 100 Then

setHeight (1000)
Else
setHeight (400)
End If

End Sub


Private Sub setHeight(h As Integer)

Me.Controls("quantite").Height = h
Me.Controls("libelle").Height = h
Me.Controls("tva").Height = h
Me.Controls("puht").Height = h
Me.Controls("total_ht").Height = h
Détail.Height = h ' << ajustement de la ligne de détail et
Pouf ! les blancs disparaissent...

End Sub


A+
--
Hector

Gloops

unread,
Jul 3, 2007, 2:57:11 PM7/3/07
to
Effectivement j'ai fait la même chose avec un formulaire où on voulait
ajuster les listes, dans les sous-formulaires, à la taille du
formulaire, lors des redimensionnements. Toujours commencer, en
rapetissant, par les contrôles inclus.

Dans le cas où tout est inclus directement dans l'état ou le formulaire,
on gagne à commencer par s'assurer que les propriétés "auto-réduction"
et "auto-extension" ne feraient pas l'affaire, ce qui donnerait le même
résultat pour beaucoup moins de boulot. Bien entendu, pour la section,
ça ne marche pas si on oublie un des contrôles qui se trouvent dedans,
ou si pour une raison ou pour une autre un des contrôles ne peut pas
"s'auto-réduire" -ou si dans certains cas les contrôles s'étagent en
hauteur.

0 new messages