Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sous-formulaires auto-extensible

4 réponses
Avatar
Gérald
Hello, bonjour,
j'ai besoin d'un peu d'aide, j'ai un formulaire qui contient plusieurs
sous formulaires. Lorsque l'un des sous-formulaire ne contient pas de donnée
je le fais disparaître par le VBA suivant :
Me.SF_Listing_Blocage.Visible = (Me."non du
sous-formulaire".Form.RecordsetClone.RecordCount > 0)
A l'écran le sous-formulaire disparaît mais me laisse sa place vide. La
fonction autoxtensible ne fonctionne pas. Comment y remédier?
Merci d'avance
Gérald

4 réponses

Avatar
LiR
Bonjour,

Ce serait plutôt la propriété Auto réductible (CanShrink)...
Mais ces propriétés ne fonctionnenet pas en mode formulaire, comme indiqué
comme suit dans l'aide d'Access :

"Cette propriété affecte l'affichage des sections et des contrôles de
formulaire uniquement lorsque le formulaire est imprimé ou affiché en mode
Aperçu avant impression, et non lorsqu'il est affiché en mode Formulaire, en
mode Feuille de données ou en mode Création."



Hello, bonjour,
j'ai besoin d'un peu d'aide, j'ai un formulaire qui contient plusieurs
sous formulaires. Lorsque l'un des sous-formulaire ne contient pas de donnée
je le fais disparaître par le VBA suivant :
Me.SF_Listing_Blocage.Visible = (Me."non du
sous-formulaire".Form.RecordsetClone.RecordCount > 0)
A l'écran le sous-formulaire disparaît mais me laisse sa place vide. La
fonction autoxtensible ne fonctionne pas. Comment y remédier?
Merci d'avance
Gérald


Avatar
Gérald
Merci de votre réponse,
je sais que cela ne fonctionne pas, mais n'y a t'il pas une possibilité en
instructions VBA
Gérald


Bonjour,

Ce serait plutôt la propriété Auto réductible (CanShrink)...
Mais ces propriétés ne fonctionnenet pas en mode formulaire, comme indiqué
comme suit dans l'aide d'Access :

"Cette propriété affecte l'affichage des sections et des contrôles de
formulaire uniquement lorsque le formulaire est imprimé ou affiché en mode
Aperçu avant impression, et non lorsqu'il est affiché en mode Formulaire, en
mode Feuille de données ou en mode Création."



Hello, bonjour,
j'ai besoin d'un peu d'aide, j'ai un formulaire qui contient plusieurs
sous formulaires. Lorsque l'un des sous-formulaire ne contient pas de donnée
je le fais disparaître par le VBA suivant :
Me.SF_Listing_Blocage.Visible = (Me."non du
sous-formulaire".Form.RecordsetClone.RecordCount > 0)
A l'écran le sous-formulaire disparaît mais me laisse sa place vide. La
fonction autoxtensible ne fonctionne pas. Comment y remédier?
Merci d'avance
Gérald




Avatar
LiR
Et bien, il faudrait programmer manuellement le décalage successif des
contrôles vers le haut (ou le bas lorsque le sous-formulaire est réaffiché)...
Ce qui n'est pas évident, surtout s'il y a beaucoup de sous-formulaires
formulaires successifs.

Par exemple comme suit :

Public Sub AdjustAffichage()

Dim offy as Integer ' Décalage vertical de contrôles

Dim bVav As Boolean ' Sous-formulaire initialement visible
Dim bVap As Boolean ' Sous-formulaire rendu visible

' ---[ Affichage Sous-formulaire 1? ]-----

bVav = sf1.Visible
bVap = sf1.Form.RecordsetClone.RecordCount>0
sf1.Visible = bVap

' Si bVap, offy = offy + sf1.Height. Sinon, offy = offy - sf1.Height
If bVap <> bVav Then offy = offy + (-2*bVap - 1) *sf1.Height

' Décalage contrôles situés
' sous le Sous-formulaire 1 et jusqu'au Sous-formulaire 2
label2.Top = label2.Top + offy ' exemple
'[etc.]
sf2.Top = sf2.Top + offy

' ---[ Affichage Sous-formulaire 2? ]-----

bVav = sf2.Visible
bVap = sf2.Form.RecordsetClone.RecordCount>0
sf2.Visible = bVap

If bVap <> bVav Then offy = offy + (-2*bVap - 1) *sf2.Height

' Décalage contrôles situés
' sous le Sous-formulaire 2 et jusqu'au Sous-formulaire 3
label3.Top = label3.Top + offy ' exemple
'[etc.]
sf3.Top = sf3.Top + offy

' ---[ Affichage Sous-formulaire N? ]-----
'
' ... Ainsi de suite...
'
End Sub

Le principe est donné en exemple, il pourrait être amélioré bien entendu.
Une autre idée de traitemet automatique serait de classer les contrôles dans
un tableau en les triant par leur position .Top du plus haut au plus bas,
puis de décaler successivement les contrôles sous le formulaire
redimensionnés.


Merci de votre réponse,
je sais que cela ne fonctionne pas, mais n'y a t'il pas une possibilité en
instructions VBA
Gérald


Bonjour,

Ce serait plutôt la propriété Auto réductible (CanShrink)...
Mais ces propriétés ne fonctionnenet pas en mode formulaire, comme indiqué
comme suit dans l'aide d'Access :

"Cette propriété affecte l'affichage des sections et des contrôles de
formulaire uniquement lorsque le formulaire est imprimé ou affiché en mode
Aperçu avant impression, et non lorsqu'il est affiché en mode Formulaire, en
mode Feuille de données ou en mode Création."



Hello, bonjour,
j'ai besoin d'un peu d'aide, j'ai un formulaire qui contient plusieurs
sous formulaires. Lorsque l'un des sous-formulaire ne contient pas de donnée
je le fais disparaître par le VBA suivant :
Me.SF_Listing_Blocage.Visible = (Me."non du
sous-formulaire".Form.RecordsetClone.RecordCount > 0)
A l'écran le sous-formulaire disparaît mais me laisse sa place vide. La
fonction autoxtensible ne fonctionne pas. Comment y remédier?
Merci d'avance
Gérald






Avatar
Gérald
merci beaucoup


Et bien, il faudrait programmer manuellement le décalage successif des
contrôles vers le haut (ou le bas lorsque le sous-formulaire est réaffiché)...
Ce qui n'est pas évident, surtout s'il y a beaucoup de sous-formulaires
formulaires successifs.

Par exemple comme suit :

Public Sub AdjustAffichage()

Dim offy as Integer ' Décalage vertical de contrôles

Dim bVav As Boolean ' Sous-formulaire initialement visible
Dim bVap As Boolean ' Sous-formulaire rendu visible

' ---[ Affichage Sous-formulaire 1? ]-----

bVav = sf1.Visible
bVap = sf1.Form.RecordsetClone.RecordCount>0
sf1.Visible = bVap

' Si bVap, offy = offy + sf1.Height. Sinon, offy = offy - sf1.Height
If bVap <> bVav Then offy = offy + (-2*bVap - 1) *sf1.Height

' Décalage contrôles situés
' sous le Sous-formulaire 1 et jusqu'au Sous-formulaire 2
label2.Top = label2.Top + offy ' exemple
'[etc.]
sf2.Top = sf2.Top + offy

' ---[ Affichage Sous-formulaire 2? ]-----

bVav = sf2.Visible
bVap = sf2.Form.RecordsetClone.RecordCount>0
sf2.Visible = bVap

If bVap <> bVav Then offy = offy + (-2*bVap - 1) *sf2.Height

' Décalage contrôles situés
' sous le Sous-formulaire 2 et jusqu'au Sous-formulaire 3
label3.Top = label3.Top + offy ' exemple
'[etc.]
sf3.Top = sf3.Top + offy

' ---[ Affichage Sous-formulaire N? ]-----
'
' ... Ainsi de suite...
'
End Sub

Le principe est donné en exemple, il pourrait être amélioré bien entendu.
Une autre idée de traitemet automatique serait de classer les contrôles dans
un tableau en les triant par leur position .Top du plus haut au plus bas,
puis de décaler successivement les contrôles sous le formulaire
redimensionnés.


Merci de votre réponse,
je sais que cela ne fonctionne pas, mais n'y a t'il pas une possibilité en
instructions VBA
Gérald


Bonjour,

Ce serait plutôt la propriété Auto réductible (CanShrink)...
Mais ces propriétés ne fonctionnenet pas en mode formulaire, comme indiqué
comme suit dans l'aide d'Access :

"Cette propriété affecte l'affichage des sections et des contrôles de
formulaire uniquement lorsque le formulaire est imprimé ou affiché en mode
Aperçu avant impression, et non lorsqu'il est affiché en mode Formulaire, en
mode Feuille de données ou en mode Création."



Hello, bonjour,
j'ai besoin d'un peu d'aide, j'ai un formulaire qui contient plusieurs
sous formulaires. Lorsque l'un des sous-formulaire ne contient pas de donnée
je le fais disparaître par le VBA suivant :
Me.SF_Listing_Blocage.Visible = (Me."non du
sous-formulaire".Form.RecordsetClone.RecordCount > 0)
A l'écran le sous-formulaire disparaît mais me laisse sa place vide. La
fonction autoxtensible ne fonctionne pas. Comment y remédier?
Merci d'avance
Gérald