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 :

insertion d'objets dans une frame


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Par défaut insertion d'objets dans une frame
    Bonjour,

    je réalise un petit programme dans lequel j'ai besoin de tracer des cercles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes.AddShape(msoShapeOval, x1 - R1, y1 - R1, 2 * R1, 2 * R1).Select
    j'ai également créé une userform avec un frame à l'intérieur et j'aimerais tracer mes cercles dans cette dernière et non dans la feuille de calcule.
    Je ne réussi cependant pas à trouver quelle ligne de code taper. Pouvez vous m'aider ?

    merci

  2. #2
    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,

    Sur un formulaire Excel, je crois que ce n'est pas possible mais j'ai une astuce avec des Labels servant de points suffisamment près pour former un cercle relativement continu, ça vaut ce que ça vaut alors teste si ça te convient :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim X As Single
        Dim Y As Single
        Dim X0 As Integer
        Dim Y0 As Integer
        Dim I As Single
        Dim J As Integer
        Dim Haut As Integer
        Dim Gauche As Integer
     
        'diamètre (si différents l'un de l'autre --> ovale)
        X0 = 100
        Y0 = 100
     
        'décalage du cercle par rapport au bords gauche et haut de la Form
        Gauche = 100
        Haut = 100
     
        'centré sur la Form
    '    Gauche = Me.Width / 2 - X0
    '    Haut = Me.Height / 2 - Y0
     
        'de 0 à 2 x Pi pour 360°. Le pas peut être de 0.0031415
        For I = 0 To 6.2832 Step 0.006283 '<-- plus le pas est petit, plus les "points" seront près
     
            J = J + 1
     
            With Me.Controls.Add("Forms.Label.1", "Lbl" & J, True)
     
                'défini les points X et Y
                X = X0 * Cos(I)
                Y = Y0 * Sin(I)
     
                .BackColor = &H0& 'en noir
     
                .Left = X0 + X + Gauche
                .Top = Y0 + Y + Haut
     
                .Width = 2 'épaisseur du trait
                .Height = 2 'épaisseur du trait
     
            End With
     
        Next I
     
    End Sub
    Hervé.

  3. #3
    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
    Oups, pour un Frame, remplace cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    With Me.Controls.Add("Forms.Label.1", "Lbl" & J, True)
    par celle là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    With Me.Frame1.Controls.Add("Forms.Label.1", "Lbl" & J, True)
    Hervé.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 7
    Par défaut merci et plus
    Merci !
    Je suppose qu'en modifiant ce programme je peux tracer juste une ligne (ou ya plus simple ?)
    Pendant qu'on y est, saurais tu ajuster ma frame (zoom) pour que mes composants rentrent?

    merci encore

  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,

    Teste ceci et adapte :
    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
    66
    67
     
    Private Sub UserForm_Initialize()
     
        Dim X As Single
        Dim Y As Single
        Dim I As Single
        Dim J As Integer
        Dim Haut As Integer
        Dim Gauche As Integer
        Dim Pi As Single
        Dim EpaisTrait As Integer
        Dim Rayon As Integer
        Dim Couleur As Long
     
        Rayon = 100
     
        EpaisTrait = 2
        Couleur = RGB(255, 0, 0) 'rouge
     
        Pi = Application.WorksheetFunction.Pi
     
        If Me.Frame1.Height < Rayon * 2 Then Me.Frame1.Height = Rayon * 2 + 20
        If Me.Frame1.Width < Rayon * 2 Then Me.Frame1.Width = Rayon * 2 + 20
     
        'centré sur la Form
        Gauche = Me.Frame1.Width / 2 - Rayon
        Haut = Me.Frame1.Height / 2 - Rayon
     
        'plus le pas est petit( donc plus le diviseur est grand), plus les "points" seront près
        For I = 0 To 2 * Pi Step Pi / 200
     
            J = J + 1
     
            With Me.Frame1.Controls.Add("Forms.Label.1", "Lbl" & J, True)
     
                'défini les points X et Y
                X = Rayon * Cos(I)
                Y = Rayon * Sin(I)
     
                .BackColor = Couleur
     
                .Left = Rayon + X + Gauche
                .Top = Rayon + Y + Haut
     
                .Width = EpaisTrait
                .Height = EpaisTrait
     
            End With
     
        Next I
     
        J = J + 1
     
        'ici, le trait souligne le cercle
        With Me.Frame1.Controls.Add("Forms.Label.1", "Lbl" & J, True)
     
            .BackColor = Couleur
     
            .Left = 10
            .Top = Rayon * 2 + Haut
     
            .Width = Rayon * 2 'longueur du trait
            .Height = EpaisTrait
     
        End With
     
    End Sub
    Hervé.

Discussions similaires

  1. [Débutant] Insertion d'objet dans une liste
    Par Uranne-jimmy dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/10/2013, 10h03
  2. problème d'insertion des objets dans une table(sql)
    Par satinona dans le forum Hibernate
    Réponses: 3
    Dernier message: 10/05/2013, 17h15
  3. insertion d'une vidéo dans une frame de Jbuilder
    Par amelA dans le forum JBuilder
    Réponses: 2
    Dernier message: 19/01/2007, 11h46
  4. Réponses: 5
    Dernier message: 01/10/2006, 09h39
  5. insertion d'objets dans une liste chainee
    Par mathher dans le forum C++
    Réponses: 8
    Dernier message: 20/04/2006, 17h28

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