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

Macros et VBA Excel Discussion :

Affichage informations à coté de formes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 91
    Par défaut Affichage informations à coté de formes
    Bonjour à tous,



    Je vous expose ici mon problème, car dans le passé, mes demandes ont toujours été résolues, merci à vous J

    Je vous ai joint une image qui vous fera comprendre directement mon problème.

    J’ai un plan avec plusieurs opérations, et j’aimerais lorsque je clique sur une opération, que Excel puisse m’afficher les informations correspondant à cette opération juste à côté.

    Et en recliquant sur l’opération, que les informations soient masquées.

    Actuellement j’ai utilisé des formes pour définir les opérations (Je sais pas si c’est faisable dans la mesure où la solution de mon projet passe par des évènements).

    Ainsi voici mes interrogations concernant ce projet :

    - Puis-je garder des formes, ou dois-je remplacer celles-ci par des boutons, pour définir mes rectangles « Opérations » (Dans mon exemple, OP140 et OP150) ?

    - Comment pouvoir afficher les informations relatives à l’opération cliquée juste à côté de son rectangle ?

    Voici mon premier soucis, le second sera le changement de couleur de l’opération en fonction de la disponibilité ou non de l’outillage, mais ce second soucis sera traité prochainement.

    Je vous remercie d’avance !

    Guillaume
    Nom : Plan d'op.PNG
Affichages : 169
Taille : 36,8 Ko

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Une idée de départ, même si je ne saisis pas vraiment pourquoi tu procèdes ainsi...
    Il y a des améliorations à apporter comme les valeurs en dur (nom de la form et sa valeur)

    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
    39
    Sub Lister()
        Dim I As Long, nbLignes As Long
        Dim Ligne As Long
     
        nbLignes = Sheets("Feuil2").Cells(Rows.Count, "A").End(xlUp).Row
        Sheets("Feuil1").Columns("D").ClearContents
     
        Select Case Application.Caller
            Case "Rectangle 1"  'Changer au besoin
                Ligne = GetLigne(Sheets("Feuil1").Shapes("Rectangle 1"))
                For I = 1 To nbLignes
                    If Sheets("Feuil2").Range("A" & I) = 140 Then
                        Sheets("Feuil1").Range("D" & Ligne) = Sheets("Feuil2").Range("B" & I)
                        Ligne = Ligne + 1
                    End If
                Next
            Case "Rectangle 2"
                Ligne = GetLigne(Sheets("Feuil1").Shapes("Rectangle 2"))
                For I = 1 To nbLignes
                    If Sheets("Feuil2").Range("A" & I) = 150 Then
                        Sheets("Feuil1").Range("D" & Ligne) = Sheets("Feuil2").Range("B" & I)
                        Ligne = Ligne + 1
                    End If
                Next
     
        End Select
    End Sub
     
    'Pour trouver la ligne de départ versus le haut de la Form
    Function GetLigne(Sh As Shape) As Long
        Dim I As Long
     
        For I = 1 To 65000  'à changer au besoin
            If Sheets("Feuil1").Range("A" & I).Top >= Sh.Top Then
                GetLigne = I
                Exit Function
            End If
        Next
    End Function

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Par défaut
    Bonjour,

    Pour ma part, j'utilise les "Contrôles ActiveX" que l'on retrouve très facilement ensuite au niveau du code VBA.
    Il y a beaucoup de contrôles disponibles et pas seulement des boutons.

    Direct dans le code : Feuilx.Frame1 par exemple.

    Bonne continuation.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 91
    Par défaut
    Bonsoir,

    Merci à vous deux pour vos réponses.
    J'essaierais ta solution parmi.


    Citation Envoyé par parmi Voir le message
    Bonjour,

    Une idée de départ, même si je ne saisis pas vraiment pourquoi tu procèdes ainsi...
    Il y a des améliorations à apporter comme les valeurs en dur (nom de la form et sa valeur)

    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
    39
    Sub Lister()
        Dim I As Long, nbLignes As Long
        Dim Ligne As Long
     
        nbLignes = Sheets("Feuil2").Cells(Rows.Count, "A").End(xlUp).Row
        Sheets("Feuil1").Columns("D").ClearContents
     
        Select Case Application.Caller
            Case "Rectangle 1"  'Changer au besoin
                Ligne = GetLigne(Sheets("Feuil1").Shapes("Rectangle 1"))
                For I = 1 To nbLignes
                    If Sheets("Feuil2").Range("A" & I) = 140 Then
                        Sheets("Feuil1").Range("D" & Ligne) = Sheets("Feuil2").Range("B" & I)
                        Ligne = Ligne + 1
                    End If
                Next
            Case "Rectangle 2"
                Ligne = GetLigne(Sheets("Feuil1").Shapes("Rectangle 2"))
                For I = 1 To nbLignes
                    If Sheets("Feuil2").Range("A" & I) = 150 Then
                        Sheets("Feuil1").Range("D" & Ligne) = Sheets("Feuil2").Range("B" & I)
                        Ligne = Ligne + 1
                    End If
                Next
     
        End Select
    End Sub
     
    'Pour trouver la ligne de départ versus le haut de la Form
    Function GetLigne(Sh As Shape) As Long
        Dim I As Long
     
        For I = 1 To 65000  'à changer au besoin
            If Sheets("Feuil1").Range("A" & I).Top >= Sh.Top Then
                GetLigne = I
                Exit Function
            End If
        Next
    End Function

    Tu me dis que tu ne procéderais pas ainsi. Comment procéderais-tu ? As-tu une alternative plus simple ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu peux aussi utiliser des boutons bascule (ToggleButton). Pose deux boutons bascule sur ta feuille "Feuil1" nommés "TglOP140" et "TglOP150" puis colle le code ci-dessous dans le module de la feuille et teste pour voir le résultat. Attention, la position et largeur des boutons a son importance car pour définir l'emplacement de la liste de valeurs, j'ai utilisé la propriété "TopLeftCell" qui retourne la cellule ou est situé le coin haut et gauche du bouton. Si en largeur le bouton couvre deux colonnes, il est nécessaire d'augmenter la valeur rajoutée à J (ici +1 pour la colonne à droite) :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    Private Sub TglOP140_Click()
     
        Outillage TglOP140, "Op140"
     
    End Sub
     
    Private Sub TglOP150_Click()
     
        Outillage TglOP150, "Op150"
     
    End Sub
     
    Sub Outillage(Btn As MSForms.ToggleButton, Outils As String)
     
        Dim Plage As Range
        Dim Cel As Range
        Dim I As Integer
        Dim J As Integer
     
        'récup de la ligne et colonne de la cellule ou se trouve le bouton
        '(position définie par sa valeur Top et Left)
        I = Btn.TopLeftCell.Row
        J = Btn.TopLeftCell.Column
     
        'suppression :
     
        'si la valeur est False, supprime les valeurs correspondantes
        If Btn.Value = False Then
     
            Do
     
                Cells(I, J + 1) = ""
                I = I + 1
     
            Loop Until Cells(I, J + 1) = ""
     
            Exit Sub
     
        End If
     
    inscription:
     
        'défini la plage de valeurs en feuille "Feuil2" et colonne A
        With Worksheets("Feuil2")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        'recherche les valeurs correspondantes pour les inscrire dans la colonne située à droite
        'attention, le bouton est sencé avoir la taille de la cellule sur laquelle il se trouve
        'dans le cas contraire, au lieu de J + 1 prendre J + 2 (faire correspondre dans la partie suppression)
        For Each Cel In Plage
     
            If Cel.Value = Outils Then
     
                Cells(I, J + 1) = Cel.Value
                I = I + 1
     
            End If
     
        Next Cel
     
    End Sub
    Hervé.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 91
    Par défaut
    C'est parfait, merci !

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

Discussions similaires

  1. VB6+VBS - Affichage d'une boite d'informations via une form en modal
    Par grouzieres dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 14/04/2008, 14h08
  2. [VB.NET 2005] thread & récupération d'information d'une form
    Par Persons dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/09/2006, 23h43
  3. [VB.Net] Transmission d'information entre 2 Form
    Par stargatejojo dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/05/2006, 11h31
  4. [C#] problème d'affichage d'une nouvelle Form
    Par michel_frederic dans le forum C#
    Réponses: 15
    Dernier message: 17/11/2005, 16h40
  5. [JSP] Affichage et mise en forme de données d'un txt
    Par benben13 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 15/09/2005, 11h28

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