Prendre un cliché de la selection de celules(vba)

Soyez le premier à donner votre avis sur cette source.

Vue 3 990 fois - Téléchargée 346 fois

Description

ce petit fichier prend un cliché de la selection actuelle vous montre un apercu dans un usf en plein ecran ou pas
vous demande le nom de l'image qui sera sauvegarder sur votre bureau

tres pratique quand on veux expliquer une erreur ou une action ou tout simplement pour garder un cliché d'une feuille avec des données importantes

utilisation de la user32.dll et gdi32.dll
l'item " prendre un cliché de la selection" a été ajouté au menu contextuel des celules
le principe :
copy de la selection dans le clipboard(presse papier)
recuperation de l'element dans le clipboard et transformation en BITMAP
remplissage du control image dans l'userform(apercu)
sauvegarde du BITMAP au format "jpeg" sur le bureau de l'utilisateur actuel

edit le 06 03 20011

j'ai modifier le menu contextuel

un item a été ajouté
"ouvrir avec paint" pour d'eventuelles modifications

je n'utilise plus le input box pour nommer le fichier de sortie

j'ai opter pour le "Application.GetSaveAsFilename" le nom devra etre inscrit sur cette fenetre de dialog
le menu affichage a été retouché l'item mode reduit a été ajouté

09.03.2001 munucontextuel completement revu
bonjour a tous

voila la version 6 de mon application "prendre un cliché de la sélection"

nouveauté:

menu contextuel de l'userform complètement revu

item 1 popup affichage
sous item 1=plein écran
sous item 2=mode fenêtre
sous item 3=mode réduit

item 2 popup impression
sous item 1 ="impression"
sous item 2= "aperçu avant impression"
sous item 3="impression en noir et blanc"

item 3 ="Annuler"
item 4 = "enregistrer"

item 5 =popup "modifier avec"
sous item1 = "ouvrir avec paint"
sous item 2 = "ouvrir avec " cet item propose la fenêtre dialogue pour choisir le programme avec le quel vous voulez ouvrir le cliché

je le pose au format "xls" mais ça fait toujours un excellent et utile addins(xla)

Conclusion :


c'est un tout petit truc mais pour ce qui partagent beaucoup dans les forums c'est un bon outils

sans pretentions j'espere qu'il vous sera utile

voila pour la 4 eme version il grandi le bébé

au plaisir
09.03.20011 voila la 6 eme version

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
42
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
26 juin 2013

bonjour nathansecret

ben ma fois tu met une 3 eme condition et tu choisi l'orientation que tu veux

mais de toute facon par defaux c'est "xlportrait"
et j'irais meme plus loin
si ton cliché est un carré parfait que tu choisisse l'un ou l'autre il aurra la meme taille sur les deux solution en sortie imprimante puisque adaptation automatic


allez
au plaisir
Messages postés
63
Date d'inscription
mardi 11 novembre 2008
Statut
Membre
Dernière intervention
31 octobre 2011

Mimizanzan :

If ma_selection.Width > ma_selection.Height Then .Orientation = xlLandscape
If ma_selection.Width < ma_selection.Height Then .Orientation = xlPortrait

Et si ma_selection.Width = ma_selection.Height ?
Messages postés
42
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
26 juin 2013

bonjour mimizanzan

oui tu a raison jai fait la meme chose avec le tag moi transféré en variable string et mis le tout en selectcase pour les 3 options

au plaisir
Messages postés
301
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
17 décembre 2017

Salut patosch,

Si je peux me permettre quelques optimisations de ton code (oui, je suis un peu perfectionniste..):
1/ Dans le module Menu_context_usf, il serait préférable de n'utiliser qu'une fois les lignes With ActiveSheet.PageSetup, etc
Il existe une propriété CommandBars.ActionControl qui permet de retrouver le controle qui a appelé la procédure, donc on peut faire une seule procédure que l'on relie aux 3 controles du sous-menu Impression (on ecrit .OnAction="ActionsImp" pour ces 3 controles):

Sub ActionsImp()
Dim ap As Boolean, bw As Boolean, ix As String
ix = CommandBars.ActionControl.Caption
Select Case ix
Case "Imprimer la selection" ap False: bw False
Case "Apercu avant Impression" ap True: bw False: UserForm1.Hide
Case "Impression en Noir et Blanc" ap False: bw True
End Select
With ActiveSheet.PageSetup
.PrintArea = ma_selection.Address
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
If ma_selection.Width > ma_selection.Height Then .Orientation = xlLandscape
If ma_selection.Width < ma_selection.Height Then .Orientation = xlPortrait
.PaperSize = xlPaperA4
.BlackAndWhite = bw
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveSheet.PrintOut preview:=ap
If UserForm1.Visible = False Then UserForm1.show 0
End Sub

Rq: il faut définir Set ma_selection = Selection dans la sub apercu du module cliché. C'est + sûr car si par hasard on déselectionne la zone, çà déclenche un bug.

2/ Il est inutile de déclarer Public les API du module Module_userform, ainsi que le handle. Les déclarer en Privé libère de la place mémoire.
3/ Idem pour les API du module cliché, et les variables Type,cmb et but. Les variables Donnee,newlargeur,newhauteur ne sont pas utilisées.
4/ Inutile de calculer le handle plusieurs fois dans le module Module_userform: il suffit de le déterminer à l'ouverture de la form avec la sub usf_properties
5/ Un conseil: forcer la déclarations des variables avec Option Explicit en tête de tous les modules; çà permet de vite retrouver une erreur (à définir dans le menu VBA Option/Editeur)
6/ Décocher la case Options de confidentialité dans le menu Excel Outils/Option/Sécurité, çà pose des pbs à l'enregistrement.

Voilà, désolé pour ces "pinailleries", j'espère que tu trouveras çà malgré tout utile...
Çà n'empêche que ton code marche correctement tel qu'il est, sauf que l'on déclenche un aperçu quand on choisit une impression noir & blanc.

Cdt
Messages postés
42
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
26 juin 2013

je reviens apres avoir examiné, ton code, tres bonne idée d'avoir declaré "ipic en debut de module"

comme ca sa elimine la deuxieme moulinette"prendre_un_cliché" effectivement sa diminue beaucoup le code mais ce pendant etant a la base prevu pour etre un xla pour ma part plus je libere la memoire au plus vite mieux c'est

enfin je garde

au plaisir
Afficher les 17 commentaires

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.