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 :

Mise en forme image dans formulaire [AC-2007]


Sujet :

IHM

  1. #1
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut Mise en forme image dans formulaire
    Bonjour,
    Alors je débute dans le monde d'access.
    Je suis en train d'essayer de créer une base de données afin de gérer le stock de produit chimique au sein d'un labo.
    Chaque produit peut posséder des pictogrammes en fonction de sa dangerosité.
    J'ai donc créée un table produit avec des champs picto1, picto 2,... de type oui/non.
    Je voudrais créer un formulaire qui affiche les données pour un produit donné et que sur ce formulaire les pictogrammes correspondant au produit apparaissent et que ces derniers soient mise en forme correctement : alignés, centré horizontalement sur le formulaire et ayant un espace régulier entre chaque. En effet, pour le produit A, on va avoir le picto 1, 3 et 5 et pour le produit B le picto 2et 3.
    J'imagine qu'il va falloir coder en VBA.
    Avez vous quelques pistes à m'indiquer?
    Merci d'avance pour votre aide
    Fred

  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 594
    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 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,



    Si c'est un formulaire affiché en mode simple (un enregistrement à la fois), il suffit de prévoir des contrôles type image dont la propriété "Image" (Picture) est aménagée à la volée dans l'événement Ssur activation" (On current) du formulaire.

    Si c'est un formulaire affiché en continu, c'est un peu plus difficile : il faudrait une étape préliminaire à l'ouverture du formulaire pour créer une copie des logos utiles pour chaque enregistrement.

    Si tu débutes, ce n'est pas nécessairement une chose facile, mais je peux essayer de t'aider.

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    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 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Voici un exemple pour un formulaire qui s'affiche en mode simple.
    Les logos (1.jpg, 2.jpg, … ,5.jpg) sont logés dans un sous-dossier « Images » du répertoire de la DB.

    Le code de l'événement "Sur activation" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub Form_Current()
    Dim i As Integer
    Dim j As Integer
    Dim ctl As Control
    'Réinitialisation des contrôles images
    For Each ctl In Me.Controls
      If Left(ctl.Name, 5) = "Image" Then ctl.Picture = Empty
    Next ctl
    'On affecte les images utiles dans l'ordre
    j = 1
    For i = 1 To 5
      If Me("Picto" & i) Then
          Me("Image" & j).Picture = CurrentProject.Path & "\Images\" & i & ".jpg"
          j = j + 1
      End If
    Next i
    End Sub
    Fichiers attachés Fichiers attachés

  4. #4
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut
    Merci pour ton aide.
    Je n'ai pas encore eu le temps de regarder ta réponse en détail.
    Je vais étudier ca cette semaine.
    En tout cas encore merci de ton aide

  5. #5
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut
    Bonjour Merci, ca marche nickel.
    Juste 2 questions :
    -avec cette solution, je suis obligé de mettre les cases à cocher sur mon formulaire. Or je ne souhaite pas qu'elles apparaissent. Je les ai mis en invisible mais n'est ce pas possible que les pictogrammes apparaissent ou non en fonction de la valeur qui est saisie dans la table produit.

    -Les images apparaissent en partant de la gauche. Serait il possible de les agencer autrement? Je m'explique : si j'ai un nombre impair d'images à faire apparaitre celle du milieu est centrée sur le formulaire et les autres sont distribuées horizontalement et si j'ai un nombre paire, les images sont distribuées horizontalement de chaque coté du centre du formulaire.

    J'espère que mes demandes soient claires.
    Merci d'avance

    FRED

    PS sinon pour ma compréhension perso que signifie Left(ctl.Name, 5) = "Picto" dans ton code

  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 594
    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 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour Fred,

    avec cette solution, je suis obligé de mettre les cases à cocher sur mon formulaire. Or je ne souhaite pas qu'elles apparaissent. Je les ai mis en invisible mais n'est ce pas possible que les pictogrammes apparaissent ou non en fonction de la valeur qui est saisie dans la table produit.
    - Pour faire référence à un contrôle du formulaire, une syntaxe possible est
    Et dans ce cas on peut construire le nom du contrôle de manière dynamique. Ce que je fais ici, dans une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To 5
      If Me("Picto" & i) Then
          Me("Image" & j).Picture = CurrentProject.Path & "\Images\" & i & ".jpg"
          j = j + 1
      End If
    Next i
    - Pour faire référence à une colonne par exemple, la colonne « Picto1 », la syntaxe est
    Mais à ma connaissance, on ne peut aménager la partie entre crochets de manière dynamique dans une boucle.
    Bien sûr, on pourrait construire le code en multipliant les lignes (ici de [Picto1] à [Picto5].
    Mais en quoi, la présence de ces cases à cocher (non visibles) te dérange ?

    Les images apparaissent en partant de la gauche. Serait il possible de les agencer autrement? Je m'explique : si j'ai un nombre impair d'images à faire apparaitre celle du milieu est centrée sur le formulaire et les autres sont distribuées horizontalement et si j'ai un nombre paire, les images sont distribuées horizontalement de chaque coté du centre du formulaire.
    Ce que tu souhaites est-ce bien ceci (à supposer que l’axe représente le centre du formulaire)



    Si c’est ça, il est possible de trouver un algorithme à exécuter dans l’événement Sur activation.


    PS sinon pour ma compréhension perso que signifie Left(ctl.Name, 5) = "Picto" dans ton code
    Les 5 lettres, en commençant par la gauche, du nom de contrôle valent Picto. En l’occurrence, les contrôles « image » qui nous intéressent (Picto1 à Picto5).

    D'une manière générale, pour se documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
    - afficher l'objet en mode construction ;
    - cliquer sur la propriété => elle se met en surbrillance ;
    - enfoncer la touche <F1>
    => l'aide Access s'ouvre à la bonne page.
    De même dans le code, placer le curseur de la souris et enfoncer F1.
    On peut aussi :
    • ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
    • ouvrir la fenêtre d'exécution (<Ctrl> + G), saisir un mot-clé, y placer le curseur de la souris et enfoncer F1.

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    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 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Voici les repères utiles :




    Où se trouve le bord gauche de la 1re image ?




    ce qui peut se généraliser :




    Où se trouve le bord gauche d’une suivante ?
    Le bord gauche de la précédente + largeur + espace.

    Yapluka !

    Le formulaire





    Dans l’événement Sur ouverture :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Compare Database
    Option Explicit
    Dim Centre As Long
    Dim Largeur As Long
    Dim Espace As Long
    Private Sub Form_Open(Cancel As Integer)
    'Recherche des dimensions
    Centre = Me.Width / 2
    Largeur = Me.Image1.Width
    Espace = Me.Image2.Left - Me.Image1.Left - Largeur
    End Sub
    Dans l’événement Sur Activation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub Form_Current()
    Dim i As Integer
    Dim j As Integer
    Dim nbre As Integer
    Dim ctl As Control
    'Réinitialisation des contrôles images
    For Each ctl In Me.Controls
      If Left(ctl.Name, 5) = "Image" Then
          ctl.Picture = Empty
          ctl.Visible = False
      End If
    Next ctl
     
    'On affecte les images utiles dans l'ordre
    j = 1
    For i = 1 To 5
      If Me("Picto" & i) Then
          Me("Image" & j).Picture = CurrentProject.Path & "\Images\" & i & ".jpg"
          j = j + 1
      End If
    Next i
    'À ce stade j-1 = Nombre d'images utiles
    nbre = j - 1
    If nbre = 0 Then Exit Sub 'puisqu'il n'y a pas d'image
     
    'Placement de la première image
    Me.Image1.Visible = True
    Me.Image1.Left = Centre - ((nbre - 1) / 2) * Espace - (nbre / 2) * Largeur
     
    'Placement des images suivantes
    If nbre = 1 Then Exit Sub 'Puisqu'il n'y a qu'une seule image
     
    For i = 2 To nbre
      Me("Image" & i).Left = Me("Image" & i - 1).Left + Espace + Largeur
      Me("Image" & i).Visible = True
    Next i
     
    End Sub
    N.B. Les logos (1.jpg, 2.jpg, … ,5.jpg) sont logés dans un sous-dossier « Images » du répertoire de la DB.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut
    Bonjour ClaudeLELOUP

    Mais en quoi, la présence de ces cases à cocher (non visibles) te dérange ?
    Non en fait ca ne me dérange pas c'est très bien comme cela. C'etait juste pour savoir.


    Ce que tu souhaites est-ce bien ceci (à supposer que l’axe représente le centre du formulaire)
    C'est exactement ça que je souhaite réaliser. Mais effectivement avec un dessin c'est plus simple à comprendre.

    Yapluka !
    C'est parti et merci pour ton aide
    Allez je marque résolu!!!

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

Discussions similaires

  1. Mise en forme conditionnelle dans formulaire
    Par Joh422 dans le forum IHM
    Réponses: 7
    Dernier message: 24/05/2011, 19h36
  2. Réponses: 2
    Dernier message: 05/03/2008, 09h31
  3. Mise en forme conditionnelle dans un formulaire
    Par moilou2 dans le forum IHM
    Réponses: 1
    Dernier message: 22/02/2008, 18h13
  4. Réponses: 1
    Dernier message: 25/01/2008, 10h17
  5. Réponses: 5
    Dernier message: 22/01/2007, 13h40

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