Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 09/10/2008, 20h42   #1 (permalink)
Invité de passage
 
Date d'inscription: octobre 2008
Messages: 3
Par défaut dessiner avec Excel VBA

Bonjour,
Je souhaiterais pouvoir afficher une image bitmap à partir d'un fichier bmp, puis dessiner des formes sur cette image (point, ligne, polygone, ...) à partir d'un programme VBA. Je souhaiterais également pouvoir récupérer la position de la souris lorsque l'utilisateur clique sur l'image.
Quels types d'objets sont les mieux adaptés pour cela ?
Merci,
Guillaume
PS:j'utilise Excel 2002
rawalpundi est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 20h49   #2 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 2 963
Par défaut

Pour ce qui est de la première partie : VBA n'a pas prévu le coup ...
Un contrôle image, par ailleurs, n'est pas (même sous VB6) dote d'un contrôle de dispositif (hdc) permettant d'y dessiner quoi que ce soit !

Pour ce qui est de la seconde partie (récupérer la position de la souris sur l'image) : Quelle position ? La position relative ou la position/écran ? ... il faut être précis...
Les deux sont réalisables, mais nous n'y viendrons que si tu est toujoiurs intéréssé, compte tenu de la réponse obtenue en ce qui concerne la première partie, bien évidemment ....
__________________
Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.

Dernière modification par Pierre Fauconnier ; 10/10/2008 à 07h42 Motif: Citation du message inutile dans ce contexte
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 21h41   #3 (permalink)
Modératrice
 
Avatar de zazaraignée
 
Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
Par défaut

Les évènements MouseUp et MouseDown d'un composant Image placé sur une feuille de calcul ou sur un UserForm permettent de récupérer la position du pointeur de la souris au moment de l'enfoncement ou du relâchement du bouton.

Petit exemple:
Code :
Private Sub Image1_MouseDown(ByVal Button As Integer, _
                             ByVal Shift As Integer, _
                             ByVal X As Single, _
                             ByVal Y As Single)
    If Button = xlPrimaryButton And Shift = 0 Then
        MsgBox "X = " & X & " et Y = " & Y
    End If
End Sub
J'ai un peu séparé les différents argument de la procédure (évènementielle) pour une meilleure lisibilité.
__________________
  • Pour les nouveaux : Mode d'emploi et aide aux nouveaux
  • et impérativement les règles du forum. Histoire de garder une ambiance amicale.
  • Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
  • Je ne réponds pas aux questions posées par MP.
zazaraignée est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 21h54   #4 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 2 963
Par défaut

Bonjour, zazaraignée,

Faut faire attention avec ce sacré VBA ...
Tiens : insère donc une image de 20 de large par 20 de haut ...
Clique à peu près en son centre et :

Code :
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  MsgBox X
End Sub
===>> X affichera beaucoup plus que 20 !!!
hier ou avant-hier, j'ai pris le temps d'exposer ces choses-là, de les expliquer de long en large et de donner la solution, en recommandant de ne pas la perdre ...(je ne pensais alors pas que l'on en aurait besoin si tôt ...)
Pas préservée ? ===>> à chercher !
__________________
Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 22h03   #5 (permalink)
Modératrice
 
Avatar de zazaraignée
 
Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
Par défaut

Tout dépend de l'échelle utilisée. Déjà que les propriétés Height et Width sont en points... 12 points pour un pica... mesures typographiques... tu connais?

Sur un écran, il y a 72 pixels au pouces pour certains, 96 pour d'autres... 1pt (un point) = 1/72 po.

C'est tout ce que j'ai pu soutirer de l'aide de VBA Excel (et MSForms) pour l'instant.
__________________
  • Pour les nouveaux : Mode d'emploi et aide aux nouveaux
  • et impérativement les règles du forum. Histoire de garder une ambiance amicale.
  • Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
  • Je ne réponds pas aux questions posées par MP.
zazaraignée est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 22h09   #6 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 2 963
Par défaut

Re...
Absolument rien à voir avec l'écran ...
Ce sera toujours le même calcul, quel que soit l'écran et sa résolution , dès lors que l'on ne parle pas de pixels, mais de twips et de points (échelle de VBA) ...
Allez ... je cherche ma propre intervention et reviens ...

Voilà :
http://www.developpez.net/forums/d62...s-deplacement/
lire attentivement mon message n° 12 et comprendre pourquoi diviser par 20 quel que soient l'écran et sa résolution.

On va voir si cela se perd à nouveau (et je n'y reviendrais alors plus jamais) ou si on sait le "mettre dans un petit coin"...
__________________
Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 22h24   #7 (permalink)
Modératrice
 
Avatar de zazaraignée
 
Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
Par défaut

Rien à f...aire avec la résolution de l'écran sauf pour le rendu à l'affichage. D'où la mention de l'échelle de l'écran dans ma dernière intervention.

Ceci dit, comme le code que j'ai fourni a été vérifié et fonctionne sans provoquer l'embrouille que tu mentionnais tout à l'heure, je maintient et persiste.

De toutes façons, pour détecter la position du clic par rapport à l'écran, il faut passer par les fonction de l'API Windows. Alors attendons de voir ce que désire rawalpundi avant de nous disputer pour si peu.
__________________
  • Pour les nouveaux : Mode d'emploi et aide aux nouveaux
  • et impérativement les règles du forum. Histoire de garder une ambiance amicale.
  • Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
  • Je ne réponds pas aux questions posées par MP.
zazaraignée est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 22h29   #8 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 2 963
Par défaut

Citation:
Envoyé par ucfoutu Voir le message
Pour ce qui est de la seconde partie (récupérer la position de la souris sur l'image) : Quelle position ? La position relative ou la position/écran ? ... il faut être précis...Les deux sont réalisables, mais nous n'y viendrons que si tu est toujoiurs intéréssé, compte tenu de la réponse obtenue en ce qui concerne la première partie, bien évidemment ....
Et on peut y parveir de deux manières, pour la position par rapport à l'écran : une avec une fonction de l'API, en effet (et je la recommande) , et l'autre avec seulement VBA (si l'on y tient)...

Le "rendu", zazaraignée, n'a rien à voir avec la position relative, tant en abscisse qu'en ordonnée ... le "rendu" ne fera qu'un étirement "visuel" de l'image, sans rien changer de se qui se trouve à un point (x,y) réel, sur lequel l'utilisateur cliquera également "visuellement" (ce qui rétablit tout arithmétiquement).
Je te souihaite une bonne journée (toi tu la commences, la mienne se termine).
__________________
Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 08h16   #9 (permalink)
Invité de passage
 
Date d'inscription: octobre 2008
Messages: 3
Par défaut

Il n'y a vraiment pas moyen de dessiner dans un bitmap ? Par exemple en créant un bitmap dans lequel on peut dessiner, puis en important une image dedans ? Le résultat peut rester visuel, je n'ai pas vraiment besoin de sauvegarder le tout dans le fichier bmp.
Pour le clic de souris, mon besoin est de pouvoir afficher une carte, que l'utilisateur clique à un endroit, que le programme VBA calcule un polygone centré sur ce point suivant certains critères, puis d'afficher ce polygone sur la carte.
rawalpundi est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 08h23   #10 (permalink)
Responsable PowerPoint
 
Avatar de Philippe JOCHMANS
 
Date d'inscription: mai 2005
Localisation: Loir et Cher et Touraine
Âge: 40
Messages: 9 800
Envoyer un message via MSN à Philippe JOCHMANS
Par défaut

Bonjour

Va jeter un coup d'oeil la-dessus : http://arkham46.developpez.com/artic...ice/clgdiplus/

Arkham a fait un pas mal de chose sur les images, dont un fichier Excel à télécharger : http://arkham46.developpez.com/artic...lgdiplus/#LIII

Je n'ai jamais vraiment eut le temps de me pencher sur tout cela (Arkham est vraiment très fort sur le sujet), mais cela mérite d'y jeter un coup d'oeil.

Philippe
__________________
En cas de questions techniques par MP ou message visiteur
Office : :Les Cours, Les FAQs
VB : Les Cours, Les FAQs
Mes articles : ici
Me connaitre
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 08h25   #11 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 2 963
Par défaut

Une question par une question sera plus raisonnable.

En ce qui concerne le dessin avec VBA/Excel (qui n'est pas Access...) , il vaudra mieux que tu lises entièrement cette discussion
http://www.developpez.net/forums/d62...-colorisation/
laissée sans suite,
dans laquelle j'"ai dit tout ce que j'"avais à dire sur le sujet ....
__________________
Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.

Dernière modification par ucfoutu ; 10/10/2008 à 08h39
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 22h38   #12 (permalink)
Invité de passage
 
Date d'inscription: octobre 2008
Messages: 3
Par défaut

Effectivement la méthode d'Arkham a l'air bien. J'ai commencé à tester et ça fonctionne (affichage d'image, dessiner des formes, détection du clic souris). Il n'y même pas besoin de rajouter ou paramétrer de librairie ! Je continue à creuser mais ça devrait répondre à mes questions.
Merci pour vos réponses !
rawalpundi est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide