Déssiner un rectangle en vba

Résolu
GrandLynx Messages postés 16 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 22 mai 2012 - 5 déc. 2008 à 11:36
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

8 réponses

piloulac Messages postés 21 Date d'inscription dimanche 10 juin 2007 Statut Membre Dernière intervention 28 décembre 2008
20 déc. 2008 à 16:26
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
3
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
5 déc. 2008 à 17:29
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
0
Utilisateur anonyme
7 déc. 2008 à 13:16
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
0
GrandLynx Messages postés 16 Date d'inscription mardi 3 juillet 2007 Statut Membre Dernière intervention 22 mai 2012
17 déc. 2008 à 13:48
comment ça je ne les teste pas orohena?

El Grande Lynce
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
17 déc. 2008 à 18:39
GrandLynx, quand une fonction de l'api échoue tu n'as pas de message d'erreur. Tu dois tester le code retour.


 
0
piloulac Messages postés 21 Date d'inscription dimanche 10 juin 2007 Statut Membre Dernière intervention 28 décembre 2008
20 déc. 2008 à 02:16
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
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
20 déc. 2008 à 03:28
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
0
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
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
0
Rejoignez-nous