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

IHM Discussion :

[Sous-formulaire] Ajuster la taille automatiquement selon le contenu


Sujet :

IHM

  1. #1
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut [Sous-formulaire] Ajuster la taille automatiquement selon le contenu
    Bonjour,

    Je souhaite savoir s'il existe un moyen d'ajuster la taille d'un sous-formulaire en fonction du nombre d'enregistrements qu'il contient, c'est à dire à la taille minimum pour que l'on puisse voir tous les enregistrements.

    Cela est-il possible ?

    Merci pour vos réponses,

    Stéphanie
    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. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Dans les propriétés du sous-form :

    Taille ajustée : Oui , ça change quelques chose ou pas ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tu pourrais jouer sur le nombre d'enregistrements de ton sous-formulaire.

    1 - Prendre le nombre d'enregistrements
    2 - Tu connais la taille (hauteur) que prends un enregistrement dans la zone détail
    3- Tu multiplies le nombre d'enregistrements par la taille de ta zone détail du sous-formulaire et tu l'affectes à la propriété Height de ton sous-formulaire.

    C'est juste une idée, peut-être un peu folle, je n'ai jamais testé.

    Starec

  4. #4
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut
    Bonjour Herman,

    Non, ça ne change rien, c'est ce que j'avais essayé, mais ça ne change rien du tout.

    Bonjour Starec,

    Ton idée me semble bonne, seulement, le problème, c'est que mon sous-formulaire dépend d'une zone de liste. Il contient donc parfois deux enregistrements, et parfois 15 !

    Donc le nombre d'enregistrement n'est pas fixe... C'est là tout le problème
    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 !

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Oui c'est pas grave si le nombre d'enregistrements n'est pas fixe. Tu peux compter combien il y en a, et tu multiplies ensuite.

  6. #6
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut
    Oui, mais ça m'oblige à changer à chaque fois alors ? Ou alors il y a quelque chose que je ne comprends pas...
    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 !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    Ben Oui, c'est ce que tu demandes.

    Starec

  8. #8
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut
    @ Starec :

    pardon, c'est que je ne comprends pas comment il faut que je m'y prenne... je fais ça en VBA ?

    Re,

    En fait, j'ai été voir dans la FAQ comment on compte le nombre d'enregistrements

    Compter le nombre d'enregistrements [haut]

    Utilisez la fonction Dcount de MS-Access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nb = DCount("*","NomRequete")

    ou la propriété recordcount de l'objet recordset en VBA.
    Comme je ne sais pas ce qu'est un recordset, j'ai cherché à savoir ce que c'était...

    Et j'ai trouvé ça :

    L'objet Recordset, comme son nom l'indique, permet de récupérer un ensemble d'enregistrements. La seule requête SQL permettant de récupérer un jeu d'enregistrements est le SELECT. Vous pouvez tout aussi bien utiliser cet objet pour faire des UPDATE, DROP, ALTER, ...
    Dans le cas de ces dernières opérations on utilisera plutôt Command qui fera l'objet du prochain chapitre.

    Pour utiliser cette propiété il faut toujours que le recordset soit rempli et avant de lire la propriété il est souvent nécessaire de faire un
    Sauf s'il s'agit d'un Recordset de type dbOpenTable.
    Mais je ne comprends pas ce que signifie :
    récupérer un ensemble d'enregistrements
    Est-ce que quelqu'un pourrait m'expliquer la différence entre un recodset et une requête sql ?
    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 !

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Le RecordSet contiendra les enregistrements que tu as sélectionné avec ta requête.

    Un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim nombre As DAO.Recordset
    Dim Db As DAO.Database
    Dim nombre_enregistrement as integer
     
    Set Db = CurrentDb
    nombre = Db.OpenRecordset("SELECT idx FROM ta_table WHERE Idx = blabla ")
    nombre_enregistrement = nombre.Recordcount
    Me.ton_form.Height = nombre_enregistrement * 2 (si la taille du formulaire avec un seul enregistrement fait 2 cm)
    Il faut que tu fasses un truc de ce genre, je ne sais pas si tel quel ça fonctionne.
    Tu sélectionnes tous tes index (ou je ne sais quel champs, j'ai pas le nom de tes champs sous les yeux ) d'un enregistrement particulier (WHERE Idx = quelque_chose), et ensuite tu les comptes.

  10. #10
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut
    Re Herman,

    Et merci de me répondre

    Mais où est-ce que je dois mettre ce genre de code ?

    Il doit être sur la page de VBA du sous formulaire tel quel, ou bien faut-il le placer sur un événement ?
    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 !

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Soit tu en as besoin ocasionnellement et sur un seul formulaire, alors tu le mets sur un évènement (reste à voir sur quel évènement, tout dépend du moment à partir duquel tes enregistrements sont affichés).

    Sinon si tu doit l'utiliser dans plein de formulaire, tu te fait une fonction dans un module.

  12. #12
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut
    Re Herman,

    Je veux juste le faire dans celui-là, donc, j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Current()
     
    Dim nombre As DAO.Recordset
    Dim Db As DAO.Database
    Dim nombre_enregistrement As Integer
     
    Set Db = CurrentDb
    nombre = Db.OpenRecordset("SELECT T_Livraisons.DateLivraisonSouhaitee, T_Tiers.fNumTypeTournee, T_Livraisons.Retour, T_Livraisons.Transport, T_Livraisons.HeureLivraison, T_Tiers.RefGPTiers, T_Tiers.NomTiers, T_Tiers.fNumPL, T_Livraisons.DistanceParcourue, T_Livraisons.Montant, T_Livraisons.fNumTournee, T_Livraisons.NbColis, T_Livraisons.Poids FROM T_Tiers INNER JOIN T_Livraisons ON T_Tiers.NumTiers=T_Livraisons.fNumTiers ORDER BY T_Livraisons.HeureLivraison;  ")
    nombre_enregistrement = nombre.RecordCount
    Me.Form.Height = nombre_enregistrement * 2
    '(si la taille du formulaire avec un seul enregistrement fait 2 cm)
     
    End Sub
    Mais j'ai un message d'erreur qui me dit :

    Erreur de compilation :
    Utilisation incorrecte de la propriété
    Qu'en penses-tu ?
    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 !

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Sur quelle ligne ?

    Mais dans ton SELECT, pourquoi tu sélectionnes autant de champs ? que tu sélectionnes 15 champs, ou 1 seul, au final tu auras autant d'enregistrements sélectionnés non ?

    Imaginons une base de données avec une table "personne" et des champs, "nom", "prenom", "age "avec 4 personnes d'enregistrées

    que tu fasses un :
    SELECT nom FROM personne;
    OU
    SELECT nom,prenom FROM personne;
    OU
    SELECT nom,prénom,age FROM personne;

    au final ton recordcount te renverra toujours 4 !

  14. #14
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut
    oui tu as raison...

    J'ai modifié, voilà le nouveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Current()
     
    Dim nombre As DAO.Recordset
    Dim Db As DAO.Database
    Dim nombre_enregistrement As Integer
     
    Set Db = CurrentDb
    nombre = Db.OpenRecordset("SELECT T_Tiers.RefGPTiers,  FROM T_Tiers;  ")
    nombre_enregistrement = nombre.RecordCount
    Me.Form.Height = nombre_enregistrement * 2
    '(si la taille du formulaire avec un seul enregistrement fait 2 cm)
     
    End Sub
    J'ai toujours le même message d'erreur,
    et le mot "nombre" en dessous de "SetDb" est grisé...
    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 !

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je pense que cela vient de ta requête tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre = Db.OpenRecordset("SELECT T_Tiers.RefGPTiers,  FROM T_Tiers;  ")
    écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre = Db.OpenRecordset("SELECT T_Tiers.RefGPTiers  FROM T_Tiers;")
    Cela viendrait de ta virgule
    Starec

  16. #16
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Ton RecordSet ne renvoie rien déjà, tu n'as pas bien regardé la syntaxe que j'ai mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre = Db.OpenRecordset("SELECT T_Tiers.RefGPTiers,  FROM T_Tiers;  ")
    ==>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nombre = Db.OpenRecordset("SELECT T_Tiers.RefGPTiers FROM T_Tiers ")
    Y'a une virgule et un ";" en trop.
    Allez hop

  17. #17
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut


    OK,

    J'ai rectifié mes bêtises...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Current()
     
    Dim nombre As DAO.Recordset
    Dim Db As DAO.Database
    Dim nombre_enregistrement As Integer
     
    Set Db = CurrentDb
    nombre = Db.OpenRecordset("SELECT T_Tiers.RefGPTiers  FROM T_Tiers")
    nombre_enregistrement = nombre.RecordCount
    Me.Form.Height = nombre_enregistrement * 2
    '(si la taille du formulaire avec un seul enregistrement fait 2 cm)
     
    End Sub
    J'ai toujours le même message, je vais essayer de ^mettre le code sur un autre événement, pour voir.
    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 !

  18. #18
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Pour tes tests fait un bouton, et sur l'évènement sur click tu met ce code, comme ça tu es au moins sure que lorsque tu click ton évènement se lancera bien.

    PS pour Starec : Pour la requête dans un RecordSet, y'a un ";" à la fin ou pas ? Parce que je t'ai vu en mettre un, mais dans les miens je n'en ai pas et la requête fonctionne.

  19. #19
    Membre averti
    Avatar de The_Super_Steph
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 445
    Points : 359
    Points
    359
    Par défaut
    Re,

    entretemps j'ai essayé de placer le code sur ouverture du Formulaire (et plus sur activation du sous-formulaire), et j'ai toujours le même message.

    La première ligne (Private Sub ...) se met en jaune.

    Peut-être n'ai-je pas placé le code sur le bon événement.

    Je vais faire ce que tu dis et le mettre sur un bouton.
    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 !

  20. #20
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Oula pardon, je viens de voir pourquoi ça ne marches pas ^^ petit oublie dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim nombre As DAO.Recordset
    Dim Db As DAO.Database
    Dim nombre_enregistrement As Integer
     
    Set Db = CurrentDb
    Set nombre = Db.OpenRecordset("SELECT T_Tiers.RefGPTiers FROM T_Tiers")
    nombre_enregistrement = nombre.RecordCount
    Me.Form.Height = nombre_enregistrement * 2
    '(si la taille du formulaire avec un seul enregistrement fait 2 cm)
    Il faut mettre SET devant nombre xD et met ce code sur click d'un bouton oui

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/02/2009, 13h53
  2. Réponses: 0
    Dernier message: 25/01/2008, 11h21
  3. Réponses: 6
    Dernier message: 12/01/2007, 19h10
  4. Ajuster la taille d'un formulaire
    Par tabtab dans le forum Access
    Réponses: 21
    Dernier message: 31/05/2006, 22h35
  5. Sous-formulaire créer une saisie automatique
    Par Mimi-des-îles dans le forum Access
    Réponses: 2
    Dernier message: 23/02/2006, 14h47

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