Déssiner un rectangle en vba [Résolu]

Messages postés
16
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
22 mai 2012
- - Dernière réponse : GrandLynx
Messages postés
16
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
22 mai 2012
- 9 janv. 2009 à 10:16
Bonjour,
est-ce que quelqu'un pourrait me dire comment on fait pour déssiner un rectangle "en dynamique" en vba!
j'ai essayé d'utiliser les apis donc g un code qui donne ça :

Dim monrectangle
Dim hd As Long
hd = apiGetDC(Me.Hwnd))
pen = apiCreatePen(0, 2, RGB(255, 0, 0))
brush = apiCreateSolidBrush(RGB(255, 0, 0))
hpen = apiSelectObject(hd, pen)
hbrush = apiSelectObject(hd, brush)
 apiRectangle hd, 500, 500, 500, 500

ça ne m'affiche aucune erreur mais ça ne m'affiche rien à l'écran.. ça devrait pas m'afficher un carré rouge?
merci beaucoup si ya qq1 qui se penche sur le pb!
       

El Grande Lynce
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
21
Date d'inscription
dimanche 10 juin 2007
Statut
Membre
Dernière intervention
28 décembre 2008
3
Merci
Ca y est, Je le tiens !!!!!

Sub Drawrectangle()


    Dim x, z, y, zz    As Single
    Dim Dwg     As Object
    Const X0 = 200          'x origin
    Const Y0 = 200         'y origin
   
    '' Règler les dimensions
    Hauteur = 80
    Largeur = 50
   
   
    DemiPerimetre = Hauteur + Largeur
    PeriMetre = 2 * DemiPerimetre
    TroisQuart = DemiPerimetre + Hauteur


With ActiveSheet
    For z = 0 To PeriMetre Step 0.2
     
        If z <= Hauteur Then   '''Premier Côté
        x = X0
        y = Y0 - z
                    If z = 0 Then
                    Set Dwg = .Drawings.Add(X0, Y0, X0, y, False)
                    Dwg.Interior.ColorIndex = xlNone
                    Dwg.Border.Weight = xlThin
                    Dwg.Border.ColorIndex = 11


                    Else
                    Dwg.AddVertex x, y
                    End If
        ElseIf z <= DemiPerimetre Then     ''' Côté Suivant

                zz = z - Hauteur
                y = Y0 - Hauteur
                x = X0 + zz
                Dwg.AddVertex x, y
             
        ElseIf z <= TroisQuart Then        ''' Côté Suivant

                zz = z - DemiPerimetre
                y = Y0 - Hauteur + zz
                x = X0 + Largeur
                Dwg.AddVertex x, y
                    
        ElseIf z <= PeriMetre Then       ''' Dernier Coté

                zz = z - TroisQuart
                y = Y0
                x = X0 + Largeur - zz
                Dwg.AddVertex x, y
        End If
    Next z
End With
End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 125 internautes nous ont dit merci ce mois-ci

Commenter la réponse de piloulac
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
Bonjour

Je suppose qu'une de tes fonctions te renvoie une erreur, mais comme tu ne les testes pas...
Tu es dans quelle application ?

Cordialement
Commenter la réponse de cs_Orohena
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
36
0
Merci
Salut,

MehWnd n'existe pas en vba. Il faut passer autrement :
http://www.codyx.org/snippet_determiner-handle-hwnd-userform-vba_256.aspx#825

__________
  Kenji
Commenter la réponse de Charles Racaud
Messages postés
16
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
22 mai 2012
0
Merci
comment ça je ne les teste pas orohena?

El Grande Lynce
Commenter la réponse de GrandLynx
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
GrandLynx, quand une fonction de l'api échoue tu n'as pas de message d'erreur. Tu dois tester le code retour.


 
Commenter la réponse de cs_Orohena
Messages postés
21
Date d'inscription
dimanche 10 juin 2007
Statut
Membre
Dernière intervention
28 décembre 2008
0
Merci
Cette sub dessine un triangle rectangle en "Dynamique"
Il suffit de modifier quelques paramètres, je pense.

Sub DrawTriangle()
    Dim x       As Integer
    Dim y       As Integer
    Dim z       As Single
    Dim Dwg     As Object
    Const A = 100
    Const B = 60
    Const X0 = 300          'x origin
    Const Y0 = 250          'y origin
   
    With ActiveSheet
    For z = 1 To 400        '
            x = 400 + z
            y = 200
            If z = 1 Then
                'First step, so use Add to start Drawing
                Set Dwg = .Drawings.Add(A + X0, Y0, x, y, True)
                Dwg.Interior.ColorIndex = xlNone
            Else
                'Add a vertex
                Dwg.AddVertex x, y
            End If
    Next z
    End With
    Dwg.Border.Weight = xlMedium
    Dwg.Border.ColorIndex = 11
    Dwg.Interior.ColorIndex = 20
End Sub
Commenter la réponse de piloulac
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
Salut


C'est top, mais ce serait quand même mieux  si ça dessinait un rectangle

GrandLynx, tu travailles sur quoi, Excel, Access, Powerpoint ...

Amicalement
Commenter la réponse de cs_Orohena
Messages postés
16
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
22 mai 2012
0
Merci
hey merci beaucoup,
je sais que si je veux du dynamique je devrais pas travailler sous vbA mais comme c'est pas moi qui choisit....
en tout cas ça m'a été très utile et si je réponds que maintenant!

El Grande Lynce
Commenter la réponse de GrandLynx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.