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 :

Position d'un formulaire à son ouverture [AC-2007]


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut Position d'un formulaire à son ouverture
    Bonjur,

    J'ai une liste à l'écran contenant tous les enregistrements d'une table. Lorsque je clique sur un enregistrement pour faire afficher ses informations, j'aimerais pouvoir ouvrir le 2ième formulaire en dessous de l'enregistrement sélectionné dans la liste.

    J'ai essayé de lire la propriété "Top" du premier objet affiché dans l'enregistrement sélectionné de la liste. Mais peu importe l'enregistrement sélectionné dans la liste, la propriété "Top" est toujours la même valeur.

    Exemple de mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' ---- Ce code je l'ai mis dans le formulaire "ForDesalSous"
     Dim intHaut as integer
    ' De la Liste: "ForDesaL:      
    intHaut = ([Forms]![ForDesaL]![vNoRef].Top) * 550
    ' Du formulaire "ForDesalSous":    
    DoCmd.MoveSize 4350, intHaut, 9500, 3500    'gauche, hauteur, long, larg
    Peut-être n'aie-je pas la bonne formule!

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonsur ,

    La propriété "CurrentSectionTop" de ton formulaire te donnera une position de repère.

    Consulte l'aide Access. Dans onglet "aide intuive", saisis "CurrentSectionTop".
    Il y a un exemple, qui permet de loger dans une étiquette du formulaire la position à l'écran de l'enregistrement en cours.
    Pour positionner ton autre formulaire, fais référence au contenu de cette étiquette.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut
    Bonjour
    J'ai modifié mon code avec "CurrentSectionTop" et cela fonctionne sauf que la position retenue pour gauche est 0 et hauteur est celle de l'enregistrement. Mais si mes fenêtres s'ouvrent en mode dépendante (pour la liste) et indépendante (pour celle appelée), est-ce que cela peut faire une différence dans les positions? Est-ce possible que la hauteur tiennent compte du ruban de MSaccess?

    Voici le code que j'ai mis dans la fenêtre appelée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Form_Load()
         Dim intHaut, intGauche As Integer
     
     ' Position de l'enregistrement sélectionné dans la liste
           intHaut = ([Forms]![ForDesaL].CurrentSectionTop) 
           intGauche = ([Forms]![ForDesaL].CurrentSectionLeft) 
      ' position du formulaire appelé:
           DoCmd.MoveSize intGauche, intHaut, 9500, 3500 
    end sub
    Cette fenêtre appelée sert seulement à titre d'information. Aucune commande ne peut être faite par l'utilisateur, sauf celle de fermer la fenêtre.

    Est-ce que pour afficher ma fenêtre appelé il y aurait une autre façon plus simple ou adéquate?

    Merci!

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonsoir,

    Si tu ouvres ton formulaire principal à un endroit précis de l'écran, tu peux ensuite calculer la meilleure position de ton formulaire secondaire.

    En quelque sorte tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.MoveSize intGauche + n , intHaut+ m, 9500, 3500
    Avec n qui varie pour tenir compte de la position gauche de ton formulaire principal
    et m qui varie pour placer ton formulaire secondaire au-dessus ou en dessous de la ligne du principal (suivant la position de cette ligne à l'écran).


    Tant pis pour lui, si l'utilisateur déplace ton principal.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut Position si en bas de page
    Merci.
    Cela a bien fonctionné.

    Il me reste à régler le problème que si l'enregistrement sélectionné est en bas de page, je dois mettre une condition.

    Comment fait-on pour trouver cette position et faire en sorte que l'écran à afficher se place au dessus de l'enregistrement sélectionné?

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut [Access2000] Positionner un formulaire à un endroit précis
    Bonjour,


    Dans l’exemple annexé, j’ai deux formulaires :
    - Principal ;
    - Detail.

    Si je double-clique sur le contrôle « zdtDENOMINATION » de Principal, je voudrais que Detail s’ouvre à un endroit précis, comme ceci :



    Voici comment je procède.

    Dans le formulaire Principal, j’ai ajouté deux contrôles « techniques »
    RepereHaut et RepereDroite, qui seront provisoirement visibles.
    Dans l’événement « sur activation » du formulaire, ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
    Me.RepereHaut = Me.CurrentSectionTop
    Me.RepereDroite = Me.zdtCLASSIFICATION.Left
    End Sub
    C’est dire que :
    RepereHaut va varier en fonction de l’enregistrement actif et indiquer la distance en twips (1 cm = 567 twips) entre le coin supérieur gauche de la section en cours et le coin supérieur gauche du formulaire.
    RepereDroite restera fixe et indiquera l’éloignement en twips par rapport au bord gauche de la section.
    Pour provoquer l’ouverture du formulaire Detail, ce code dans l’événement « sur double-clic » du contrôle zdtDENOMINATION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub zdtDENOMINATION_DblClick(Cancel As Integer)
    'Fermer Detail s'il est encore ouvert (utilisation précédente)
    If CurrentProject.AllForms("Detail").IsLoaded Then
    DoCmd.Close acForm, "detail"
    End If
    'Ouvrir Detail
    DoCmd.OpenForm "Detail"
    End Sub
    Pour positionner Principal à un endroit fixé, ce code dans l’événement « sur ouverture » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.MoveSize 1000, 1000, 10500, 12000
    End Sub
    J’ouvre le formulaire Principal.
    Il se positionne sur le premier enregistrement => RepereHaut indique 285.
    Je rends actif le dernier enregistrement affiché => RepereHaut indique 10 845.
    J’en conclus que le milieu du tableau se situe à (285 + 10 845) : 2 soit 5 565.

    Dès lors, dans le processus d’ouverture de Detail, je distinguerai deux cas :
    - RepereHaut < 5 565, l’enregistrement est dans la partie supérieure de l’affichage => Detail en dessous de la ligne ;
    - RepereHaut >= 5 565, l’enregistrement est dans la partie inférieure de l’affichage => Detail au-dessous de la ligne.

    Dès lors, dans l’événement « Sur ouverture », j’indique ce code « pour essayer »:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Open(Cancel As Integer)
    If Forms!Principal!RepereHaut < 5500 Then   'afficher en dessous
         DoCmd.MoveSize Forms!Principal!RepereDroite, Forms!Principal!RepereHaut, 2000, 1000
    Else                                        'afficher au-dessus
         DoCmd.MoveSize Forms!Principal!RepereDroite, Forms!Principal!RepereHaut, 2000, 1000
    End If
    End Sub
    Voici ce que cela donne :



    Le trait bleu mesure 2.6 cm donc, à l’ouverture, dans la méthode Move.size il faut augmenter le paramètre « droite » de 1474 twips soit 2.6 x 567.
    Le trait jaune mesure 2.4 cm, s’il s’agit d’un affichage de la partie supérieure, il faut augmenter le paramètre « bas » de 1 361 twips.
    Le trait vert mesure 0.2 cm, s’il s’agit d’un affichage de la partie inférieure, il faut augmenter le paramètre « bas » de 113 twips.

    Le code de l’événement « Sur ouverture » de Detail devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Open(Cancel As Integer)
    If Forms!Principal!RepereHaut < 5500 Then   'afficher en dessous
         DoCmd.MoveSize Forms!Principal!RepereDroite + 1474, Forms!Principal!RepereHaut + 1361, 2000, 1000
    Else                                        'afficher au-dessus
         DoCmd.MoveSize Forms!Principal!RepereDroite + 1474, Forms!Principal!RepereHaut + 110, 2000, 1000
    End If
    End Sub
    On teste => bingo.

    On rend les contrôles techniques invisibles… pour éviter les questions et les longues explications.
    On prend la précaution de fermer Detail à la fermeture de Principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Close()
    'Fermer Detail s'il est encore ouvert (utilisation précédente)
    If CurrentProject.AllForms("Detail").IsLoaded Then
    DoCmd.Close acForm, "detail"
    End If
    End Sub
    Remarque :
    Quand vous mettez au point, n’ouvrez pas votre formulaire en mode « création » pour modifier le code, car lorsque vous repasserez en mode « affichage », le formulaire se déplacera légèrement : cela fausse vos mesures.
    Laissez votre formulaire en permanence en mode « affichage » et ouvrez une autre fenêtre (<Alt> + <F11>) pour adapter le code.
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 176
    Points : 95
    Points
    95
    Par défaut
    Merci,

    Je vais ajuster mon code et je crois que cela pourra marcher.
    Je n'avais pas pensé de mettre des objets de repère pour déterminer des mesures. Mais grâce à ça, tout devrait bien fonctionner.

    Encore Merci

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    en complément, pour les fans des API, il y a ça aussi :
    http://www.developpez.net/forums/d72...sous-controle/

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Merci Arkham46,

    « Tout est dit et l'on vient trop tard depuis plus de sept mille ans qu'il y a des hommes et qui pensent. » La Bruyère.

    Je pensais avoir trouvé quelque chose, mais ça existait déjà... et en mieux !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Fixer la position d'un formulaire à l'ouverture
    Par AUDOMAROIS dans le forum IHM
    Réponses: 2
    Dernier message: 23/12/2013, 09h52
  2. [AC-2003] Appliquer de la mise en forme sur un formulaire à son ouverture
    Par Dr Byby'San dans le forum VBA Access
    Réponses: 4
    Dernier message: 05/12/2012, 14h25
  3. Réponses: 12
    Dernier message: 11/11/2008, 10h14
  4. Remplir les contrôles d'un formulaire à son ouverture
    Par nunurs83 dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/05/2007, 10h26
  5. Préciser la position d'un formulaire à l'ouverture?
    Par Jean_Benoit dans le forum IHM
    Réponses: 6
    Dernier message: 06/03/2007, 10h18

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