![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| 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 |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: avril 2007
Localisation: Gujan-Mestras
Âge: 26
Messages: 443
|
Bonjour,
Voilà, sur les conseils de Kikof, je mets à disposition un code que je cherchais à mettre en place pour ajuster la taille d'un sous-formulaire en fonction du nombre d'enregistrements qu'il contient. Ainsi, Arkham46 est venu à mon secours et m'a aiguillée vers la solution suivante : Sur l'événement SurActivation du formulaire, il suffit de mettre le code suivant : Code :
Private Sub Form_Current() Me.TonSousForm.Form.InsideHeight = Me.TonSousForm.Form.Section(acHeader).Height _ + Me.TonSousForm.Form.Section(acFooter).Height _ + Me.TonSousForm.Form.Section(acDetail).Height _ * (Me.TonSousForm.Form.RecordsetClone.RecordCount _ - Me.TonSousForm.Form.AllowAdditions) Me.TonSousForm.Height = Me.TonSousForm.Form.WindowHeight End Sub Code :
Me.TazoneDeTexte.Top = Me.TonSousForm.Top + Me.TonSousForm.Height + AutantDeTwipsQueTuVeux Voilà, en espérant que cela pourra servir à d'autres... Ce code apporte réellement un plus à une appli, ça fait plus pro ! Encore merci à Arkham46, Steph
__________________
Blonde, d'origine belge et gauchère... et alors ! ![]() "N'est stupide que la stupidité" Quand il n'y a pas de solution, c'est qu'il n'y a pas de problème (\ _ /) (='.'=) Voici Lapinou, le lapin crétin-Rasta. Aidez le à conquérir le monde (")-(") en le reproduisant ! |
|
|
|
|
|
#2 (permalink) |
|
Membre Expert
![]() Date d'inscription: mai 2005
Localisation: IDF - 94
Messages: 1 070
|
Une évolution pour ce script intéressant : limiter la hauteur du sous-form à Nmax lignes :
On peut coller le code suivant dans un module standard Code :
Public Sub ssfrmHeightResize(nbMaxLignesAffichees As Integer, ctlSsFrm As Control) 'Positionnement du ss-formulaire '-------------------------------- ' twips : 567 dans 1 cm et 1440 dans 1 pouce. ' limite la hauteur du sous-form à nbMaxLignesAffichees lignes ' qd nbLignes > nbMaxLignesAffichees, on affiche le défilement vertical Dim heightMaxAllowedSsFrm As Long, heightTotalSsFrm As Long, widthSsFrm As Long Dim lineHeight As Long, calageAbsolu As Long, lngRecordCount As Long Dim oSsFrm As Form Dim rst As Recordset Set oSsFrm = ctlSsFrm.Form 'Hauteur d'une ligne du sous-form '-------------------------------- Debug.Print "width : " & Application.GetOption("default column width") 'en cm 'Debug.Print "height: " & Application.GetOption("default row height") Debug.Print "height: " & oSsFrm.RowHeight 'en twips If oSsFrm.DefaultView = 2 Then 'en mode DS lineHeight = 283 'widthSsFrm = oSsFrm.Width 'ou bien un nombre en twips Else 'en mode continu lineHeight = oSsFrm.Section(acDetail).Height 'widthSsFrm = oSsFrm.Width + 50 End If 'Nombre de records dans le sousForm '----------------------------------- If oSsFrm.RecordsetClone.RecordCount > 0 Then oSsFrm.RecordsetClone.MoveFirst oSsFrm.RecordsetClone.MoveLast 'Attention : The recordcount is unreliable when using a server side cursor lngRecordCount = oSsFrm.RecordsetClone.RecordCount Else lngRecordCount = 0 End If Debug.Print "oSsFrm. lngRecordCount: " & lngRecordCount 'Debug.Print "Form.Detail.Height avant: " & Me.Form.Section(acDetail).Height Debug.Print "oSsFrm. Detail.Height : " & oSsFrm.Section(acDetail).Height heightMaxAllowedSsFrm = oSsFrm.Section(acHeader).Height _ + IIf(oSsFrm.Section(acFooter).Visible, oSsFrm.Section(acFooter).Height, 0) _ + lineHeight _ * (IIf(oSsFrm.AllowAdditions, nbMaxLignesAffichees + 1, nbMaxLignesAffichees)) Debug.Print "heightMaxAllowedSsFrm : " & heightMaxAllowedSsFrm heightTotalSsFrm = oSsFrm.Section(acHeader).Height _ + IIf(oSsFrm.Section(acFooter).Visible, oSsFrm.Section(acFooter).Height, 0) _ + lineHeight _ * (IIf(oSsFrm.AllowAdditions, lngRecordCount + 1, lngRecordCount)) Debug.Print "heightTotalSsFrm : " & heightTotalSsFrm If heightTotalSsFrm < heightMaxAllowedSsFrm Then 'ctlSsFrm.Width = widthSsFrm + 150 'Largeur automatique du sous-form oSsFrm.InsideHeight = heightTotalSsFrm oSsFrm.ScrollBars = 0 'aucune barre de défilement Else 'ctlSsFrm.Width = widthSsFrm + 410 'Largeur automatique du sous-form oSsFrm.InsideHeight = heightMaxAllowedSsFrm oSsFrm.ScrollBars = 2 'barre de défilement verticale End If Debug.Print "lineHeight: " & lineHeight Set ctlSsFrm = Nothing Set oSsFrm = Nothing End Sub Code :
Private Sub Form_Current() Call ssfrmHeightResize(3, Me!ssf_item_vente) End Sub . SsFrm.AllowAdditions= True or False . SsFrm.Section(acFooter).Visible=True or False . pour sous-form en mode Continu ou en mode DS Adaptez le code si d'autres conditions sont différentes Cordialement EDIT 09/06/2008 : ajout Remarque EDIT 08/10/2008 : nouveau code Dernière modification par micniv ; 08/10/2008 à 21h33 |
|
|
|
|
|
#6 (permalink) |
|
Débutant(e)
Date d'inscription: juillet 2007
Localisation: Touraine
Âge: 31
Messages: 700
|
A nouveau moi,
Bonjour tout le monde. Je souhaiterais exploiter le code de micniv mais il est vrai que j'ai encore des problèmes de syntaxe. Micniv, le code que tu proposes serait donc en Private sub form_current() ? De plus qu'entends tu par objSousFrom et frmSousForm ? Que dois-je y mettre moi ? Merci par avance. |
|
|
|
|
|
#7 (permalink) | ||
|
Membre Expert
![]() Date d'inscription: mai 2005
Localisation: IDF - 94
Messages: 1 070
|
Citation:
Citation:
Set objSousForm = Me!TonSousForm Set frmSousForm = objSousForm.Form TonSousForm : est le nom du contrôle de ton sous-formulaire (à remplacer par le tien) frmSousForm : est une déclaration de variable pour le ss-form (tu n'y touches pas) A+
__________________
Merci de ne pas m'envoyer de message privé pour des pb techniques |
||
|
|
|
|
|
#8 (permalink) |
|
Débutant(e)
Date d'inscription: juillet 2007
Localisation: Touraine
Âge: 31
Messages: 700
|
Je n'arrive pas à retranscrire ton code car je ne suis aps très fortiche en syntaxe et je ne sais pas ce qui doit être changé ou gardé car syntaxe d'origine.
De toute façon, si les choses marchaient du premier coup avec moi ça se saurait... ![]() Je ne sais plus qui m'a dit que ce code ne fonctionnait qu'avec des form en mode continu Moi, il s'agit d'un sous form en mode feuille de données... SI non, si je veux un ajustement automatique de mon ss-form au nombre de lignes lorsque celui-ci est inférieur à 8 et que dès qu'il y a plus de 8 lignes, ça s'ajuste aux 8 et pas plus avec barre de défilement horizontale, comment je fais ? Comment dois-je mixer les 2 codes proposés ? |
|
|
|
|
|
#9 (permalink) |
|
Membre Expert
![]() Date d'inscription: mai 2005
Localisation: IDF - 94
Messages: 1 070
|
1 je viens de mettre à jour le code. Plus moderne : à l'apple, il passe en paramètres, le nombre de lignes max et le nom du controle du sousForm.
2: Effectivement, il ne marche que pour des sous-forms en mode continu. Mais c'est facile de passer d'un mode à l'autre et c'est souvent plus présentable en mode continu (qu'en miode DS (Feuille de données))
__________________
Merci de ne pas m'envoyer de message privé pour des pb techniques |
|
|
|
|
|
#11 (permalink) |
|
Membre Expert
![]() Date d'inscription: mai 2005
Localisation: IDF - 94
Messages: 1 070
|
Je viens de vérifier le code proposé en mode DS.
Il fonctionne ... quand on fait défiler les enregistrements dans l'ordre croissant mais bug effectivement qd on revient en arrière. J'essaie de regarder ça
__________________
Merci de ne pas m'envoyer de message privé pour des pb techniques |
|
|
|
|
|
#12 (permalink) | |
|
Débutant(e)
Date d'inscription: juillet 2007
Localisation: Touraine
Âge: 31
Messages: 700
|
Merci bcp de te pencher dessus.
Mais une tite question, est-ce que ce que je souhaite, c'est-à-dire ça : Citation:
|
|
|
|
|
|
|
#13 (permalink) | ||
|
Membre Expert
![]() Date d'inscription: mai 2005
Localisation: IDF - 94
Messages: 1 070
|
Citation:
Citation:
Code :
Private Sub Form_Current() Call ssfrmHeightResize( 8, Me!nomDuSousform) End Sub A+
__________________
Merci de ne pas m'envoyer de message privé pour des pb techniques Dernière modification par micniv ; 07/10/2008 à 11h04 |
||
|
|
|
|
|
#14 (permalink) |
|
Débutant(e)
Date d'inscription: juillet 2007
Localisation: Touraine
Âge: 31
Messages: 700
|
Ya un problème avec mon "verticale" ? Qui fait référence à la barre
Pas si vite Monsieur Micniv ! Rassure-toi j'ai compris ce que tu me disais là. ce qui me pose problème c'est les codes en eux-mêmes. J'essaie de les adapter mais parfois, il y a des syntaxes qu'il ne faut pas forcément changer, etc... et donc, c'est pour ça que ça ne marche jamais avec moi Bref, pour l'instant, je vais attendre tes corrections pour le/les codes en espérant me retrouver..... Merci |
|
|
|
![]() |
![]() |
||
[Fait]Ajuster la taille d'un sous-form en fonction du nb d'enregistrements
|
||
| Outils de la discussion | |
|
|