Flux rss
Collection CommentCaMarche.net

VBA : Trouver Hdc d'une feuille Excell et Userform

Publié par lermite222, dernière mise à jour le mercredi 14 mai 2008 à 13:04:46 par lermite222
Pour démontrer la façon de trouver les Hdc j'ai ajouté deux petits exemples de dessin.
En cliquant sur la Feuil1 l'Userform est affiché.
Mettre le pointeur sur l'UF, maintenir le bouton gauche enfoncé et déplacer la souris.
En fermant l'UF la sub continue et dessine un arc de cercle sur la feuille.

PREPARATION


Un nouveau classeur
Ajouter un UserForm name=UserForm1

Dans un module de feuille


Coller le code suivant dans Feuil1...
Private monhdc As Long
Private Declare Function Arc Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Private Declare Function ArcTo Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim B As Long
    'activer un UC et dessiner dessus (trouver sont HDC)
    UserForm1.Show
    'Trouver le HDC d'une feuille Excel
    monhdc = 0
    Do While monhdc = 0
        monhdc = GetForegroundWindow()
        B = monhdc
        monhdc = GetDC(monhdc)
    Loop

    'Dessiner directement sur une feuille Excel
    B = Arc(monhdc, 120, 500, 320, 400, 320, 400, 780, 500)
End Sub

Dans le module de l'UserForm


Coller le code suivant...
Private Type POINTAPI
  X As Long
  Y As Long
End Type
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, _
  ByVal X As Long, ByVal Y As Long, lpPoint As Any) As Long

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Byte
Private monhdc As Long
Dim Buff As Boolean


Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Buff = True
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    Do While monhdc = 0
        monhdc = GetForegroundWindow()
        monhdc = GetDC(monhdc)
    Loop
    If Button <> 1 Then Exit Sub
    hRPen = CreatePen(PS_SOLID, 10, RGB(0, 255, 0))
    DeleteObject SelectObject(monhdc, hRPen)
    If Buff Then
        MoveToEx monhdc, X * 1.32, Y * 1.32, &H0
        Buff = False
    End If
    LineTo monhdc, X * 1.32, Y * 1.32
    DoEvents

End Sub
[vba] recopier x fois une feuille Excel (Résolu) Bonsoir le forum Comment en vba copier une feuille appelée "Valeur" en une autre nommée "Position 1" puis relancer la macro qui va à nouveau copier la même feuille "Valeur" et l'appeler "Position 2" puis relancer la macro ............. etc....... www.commentcamarche.net/forum/affich-1858185-vba-recopier-x-fois-une-feuille-excel
Ajout dynamique de controles sur un UserForm (Résolu) Bonjour, Une fois n'est pas coutume .. J'ai besoin d'une aide concernant VBA et l'utilisation des UserForm. Etait-il possible de créer dynamiquement des contrôles sur un UserForm ? Voilà, j'ai plusieurs controles sur un... www.commentcamarche.net/forum/affich-4186022-ajout-dynamique-de-controles-sur-un-userform
[Excel et VBA] Détecter un groupe de travail (Résolu) Bonjour, J'aimerais pouvoir détecter avec VBA si plusieurs feuilles sont sélectionnées (groupe de travail) car je ne veux pas que l'utilisateur puisse exécuter la macro si je suis dans cette configuration. Je ne trouve pas la solution,... www.commentcamarche.net/forum/affich-2166669-excel-et-vba-detecter-un-groupe-de-travail
VBA et les collections d'objets.VBA et les collections d'objets Quand plusieurs (beaucoup de) contrôles sont mis sur une feuille ou un Userform il est parfois fastidieux d'écrire du code dans chaque évènement des contrôles. Ce Tuto vous permet de traiter vos contrôles comme... www.commentcamarche.net/faq/sujet-10397-vba-et-les-collections-d-objets
Formules sur Matrice Multi-FeuillesFormules sur feuilles multiples Le sommaire est le suivant: Introduction Syntaxe Exemples Code Introduction Seules les Formules Somme, Moyenne, Nb, Nbval permettent de faire des calculs sur des plages discontinues ou Multi-Feuilles... www.commentcamarche.net/faq/sujet-13258-formules-sur-matrice-multi-feuilles
VBA Un timer une seconde tout simpleEn VBA, il n'y a pas (du moins à ma connaissance) de composant Timer. On peut en créer un très facilement. Dans un module de feuille Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Pour exemple d'application : Démarre/Arrête le... www.commentcamarche.net/faq/sujet-10315-vba-un-timer-une-seconde-tout-simple
VBA excel pb compatibilité (Résolu)bonjour a tous, voila j'ai créé par VBA une macro utilisant des userform. Aucun soucis sur mon pc mais dès que je le fais passer à une autre personne le programme bug dès le début en soulignant la userform_initialize en jaune. Bref il n'y a... www.commentcamarche.net/forum/affich-3365013-vba-excel-pb-compatibilite
Dimension userform en fonction du bouton (Résolu)Bonjour à tous, j'ai une petite question, en fait j'aimerai redimensionner un userform2 en fonction du bouton (qui se trouve sur un autre userform1) sur lequel je clique donc avec la propriété "height". le truc c'est que je ne sais aps... www.commentcamarche.net/forum/affich-5851325-dimension-userform-en-fonction-du-bouton
[VBA] trouver une feuille excel ds pls docs (Résolu)Bonjour, je suis toute nouvelle sur ce forum et j'ai besoin d'aide. En fait je voudrais faire une truc en VBA mais je ne sais pas si c'est possible. Sachant que je ne sais pas programmer en VBA je préfère me renseigner quand à la... www.commentcamarche.net/forum/affich-2733465-vba-trouver-une-feuille-excel-ds-pls-docs