Créer ou afficher un point (pixel) sur l'écran ou la feuille

Messages postés
15
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
23 janvier 2006
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
- 23 janv. 2006 à 03:31
Bonjour. (sous vba)

Quelqu'un pourrais me dire qu'elle le code qu'il faut écrire pour tout simplement : créer ou afficher un point (pixel) sur l'écran ou la feuille.

Exemple:

sub toto()

worksheet.shape.point(420,250).color = 1

end sub

En vous remerciant par avance , la recherche de cette solution n'a pas été concluante j'usqu'a maintenant.

J5eme3110
Afficher la suite 

11 réponses

Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
salut,

voici 8 points, mais en VB6.....




Option Explicit

Private Declare Function SetPixel Lib "gdi32" _

(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _

ByVal crColor As Long) As Long



Private Sub Form_Load()

Me.AutoRedraw = True

Me.BackColor = vbWhite

Call SetPixel(Me.hdc, 100, 100, vbBlue)

Call SetPixel(Me.hdc, 100, 120, vbBlue)

Call SetPixel(Me.hdc, 100, 140, vbBlue)

Call SetPixel(Me.hdc, 100, 160, vbBlue)



Call SetPixel(Me.hdc, 120, 100, vbRed)

Call SetPixel(Me.hdc, 120, 120, vbRed)

Call SetPixel(Me.hdc, 120, 140, vbRed)

Call SetPixel(Me.hdc, 120, 160, vbRed)

End Sub




<small> Coloration
syntaxique automatique [AFCK]</small>



çà devrait fonctionner...

@+

PCPT [AFCK]
Messages postés
15
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
23 janvier 2006
0
Merci
Merci beaucoup. Mais cela ne fonctionne pas

"ME" ne fonctionne pas!

VBA sous (Excel 2003) ne reconnait pas non plus la fonction "SetPixel".

La fonction n'est pas dans library! Est ce cela?
Si oui, est il possible de télécharger une library?
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
Me en VB6 correspond à la Form.

essaie en remplaçant par le nom de ta UserForm (sans garantie)

si çà fonctionne dans le princpe, mais que la UserForm ne contient pas
de hDC, pose une PictureBox et met le code pour cette Pic.



pour la librairie, gdi32 fait parti de Windows.....

logiquement les API sont utilisables par les macros mais regarde les
sources... peut-être y a t'il des spécificités de déclarations...

++
Messages postés
15
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
23 janvier 2006
0
Merci
merci

alors remplacement de "me" par UF1 (userform) ok
AUTOREDRAW ne fonctionne pas avec vba alors remplacer par DRAWBUFFER


exemple: uf1.drawbuffer 170000 car uf1.drawbuffer true ne fonctionne pas car
apparement
erreur d'execution '380' Impossible de définire la propriété de drawbuffer.
Valeur de propriété non valide.Entrez une valeur entre 16000 et 1048576.

A quoi correspond autoredraw en vb ou pour mon cas drawbuffer en vba ?

Autrement en appelant la fonction "setpixel" fonction pas
"erreur de compilation :argument non facultatif"
Que faut il faire??

Je te remercie pour tes infos bien utile. Je ne suis toujours pas sortie de l'auberge.*

cordialement j5em3110
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
autoredraw pour VB6 est un booléen.

c'est pour que la fenêtre survolant la Form ne l'efface pas. (exemple, un msgbox qui supprimerait alors ces points)



je ne connais pas VBA, mais une propriétés "DrawBuffer" ne m'inspirerait pas confiance pour ce cas....



argument non facultatif.... tu es certain de la syntaxe? cad la déclaration et les parenthèses?

si pas de parenthèse, pas de Call



bon courage...
Messages postés
15
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
23 janvier 2006
0
Merci
Merci exact pas de call

Mais toujours un probleme (je me rapproche du but merci encore)
**********************************
dans la ligne -->
SetPixel(UF1.hdc, 100, 100, vbBlue) = 1
"Erreur de comp : Membre de méthode ou de données introuvable" et met en surbrillance
la variable hdc pour me signaler que la est l'erreur
***************************************
SetPixel(UF1, 100, 100, vbBlue) = 1
il me detecte encore une erreure de compilation mais je seche
Je site :
"Un appel de fonction dans la partie gauche de l'affectation doit renvoyer Variant ou Object"
**************************************************
Quand je met hdc tout seul il rale et dit : erreure de compile ça je sais lol
mais aussi "Variable non définit"
**************************************************

Et au cas ou j'arriva à aller jusqu'a la fin de la parenthese pares le = il faut que je mette quoi au juste car j'ai mis 1 mais j'aurais pu mettre 2 car je croyais que je definisais n°d ecouleur.

Merci de bien vouloir essayer de m'aider

coordialement j5em3110
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
la couleur est le 4 paramètre

si tu veux récupérer une valeur, alors :





MaValeurLong = setpixel(MonDeviceContext, MapositionX, MaPositionY, MaCouleurLong)



cette valeur ( MaValeurLong ) sera la valeur la plus proche possible de MaCouleurLong.



mais une simple

SetPixel MonDC, x, y, MaCouleurLong

doit suffir....

(pas de parenthèse dans ce cas)



as-tu essayé dans une picturebox? au cas où la propriété hDC n'existe pas.....



toujours est-il que tu ne peux pas attribuer de valeur à une fonction, c'est l'inverse !!!

donc pas de MaFonction = Mavaleur
Messages postés
15
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
23 janvier 2006
0
Merci
Alors j'ai trouver
comment on ecrit le truc mais je ne sais pas quoi en faire pour crée un créer un point ou pixel sur l'ecran ou dans une shape.

j'ai écrit dans le module:

*****************************************************
Option Explicit
Private Declare Function SetPixel Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal crColor As Long) As Long
Public MaValeurLong As Long
____________________________________________________________


Private Sub Form_Load()


MaValeurLong = SetPixel(10, 5, 5, 4)

end sub

_________________________________________________
Sub toto()


Call Form_Load

End Sub
*********************************************************

Je recupere dans la variable MaValeurLong = -1 je ne sais pourquoi
Mais bon si cela peut m'aidé pour crée un point en coueur 4 je veux bien.

Merci de continuer si tu peux tu m'est d'une grande aide.

cordialement Jonathan 27 ans paris
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
tu récupères -1 parce que l'API te renvoie une erreur.

le HDC (Handle Device Context) est l'objet sur lequel tu veux dessiner.

donc ta Form ou une PICTURE que tu vas essayer (parce qu'on tourne en boucle là....)



or toi, tu dis à l'API d'aller faire ses points dans "10" qui ne veux rien dire en soit...



donc pose une PictureBox pour essayer, tu lui mets la propriété autoredraw à true (si çà existe en VBA)



et tu essayes par exemple

MaValeurLong = SetPixel(Picture1.hdc, 100, 100, 255)



MaValeurLong devrait te renvoyer 255 et tu devrait avoir un point rouge... (code de 255)
Messages postés
15
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
23 janvier 2006
0
Merci
J'ai mis dans ma feuille excel ce que tu peux appeler sous vb une picture box
(je suis pas sur c'est un dessin inseré depuis excel
je le nomme image1.

j'écrit:

MaValeurLong = SetPixel(ActiveSheet.Shapes("Image1").hdc, 50, 5, 1)

il me dit: Propriété ou méthode non généré par cet objet.


J'essay tout ce que je connais comme subtilité tout.
Mais commance a désséspéré depuis quelque jours.

J'espere y arriver un jours

merci j'attend suggestion

j5em3110
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
shape en VB, pas de HDC



c'est comme si tu mettais CommandButton1.Text = "machin"

tu aurais l'erreur "propriété non gérée"



là c'est pareil, trouve n'importe quel objet (picture, ce que tu veux) qui a un HDC

je doute qu'il n'y en ait aucun sous VBA....