PRENDRE UN CLICHÉ DE LA SELECTION DE CELULES(VBA)

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 22 févr. 2011 à 17:14
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013 - 4 mars 2011 à 13:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52838-prendre-un-cliche-de-la-selection-de-celules-vba

cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
4 mars 2011 à 13:30
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
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
4 mars 2011 à 13:02
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 ?
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
3 mars 2011 à 19:13
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
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
3 mars 2011 à 18:48
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
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
2 mars 2011 à 18:41
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
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
2 mars 2011 à 18:19
bonjour mimizanzan

oui j'ai trouver plus judicieux le menu contextuel et l'elasticité avec le redimentionnement de l'image avec etait selon moi moins lourd en code

enfin je vais voir un peu du coté de ton lien

au plaisir
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
2 mars 2011 à 00:35
Salut patosch,

J'ai ouvert ton code: il est impec maintenant. C'est une bonne idée de remplacer les boutons par un menu contextuel.
Pour info, comme tu le demandais, tu pourras trouver sur le site suivant le code que j'ai modifié de mon côté, mais il est plus proche de ton programme original (boite avec menu et scrolling si nécessaire):

http://www.cijoint.fr/cjlink.php?file=cj201103/cijRG6z9eD.xls

J'ai noté sur la feuille les modifs que j'ai faites, et elles sont aussi commentées dans le code.

En tout cas bravo pour ta bonne réactivité!

Cordialement
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
1 mars 2011 à 22:13
voila il est en ligne maintenant

pour mimizanzan:
est ce bien ca que tu me suggérais???

au plaisir
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
1 mars 2011 à 22:01
bon voila je l'ai completement remanier

plus rapide
plus fluide
plus de bouton mais un menu contextuel dans le userform

apercu en plein ecran
apercu en mode fenetre

menu impression
annuler
enregistrer utilisant "xldialogfolderpicker" donc on l'enregistre ou on veut

comme mimizanzan l'avais suggéré l'userform a l'elasticité donc on l'agrandi ou reduit comme on veut
j'ai volontairement supprimé la caption de l'userform pour le fun

bon maintenant reste a savoir comment poster ce nouveau exemplaire
faut il le poster comme nouveau fichier ou bien y a t il un moyen de changer le précédent??????????

au plaisir
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
1 mars 2011 à 14:31
re pour MIMIZANZAN

parcontre ce qui serait utile c'est que quand les scrollbars sont utilisées les bouton "enregistrer ,annuler,agrandir suive le mouvement

ou bien alors l'userform l'ors de son initialyse lui donner les dimentions adaptées a la selection dans la mesure de la possibilité du a la taille de l'ecran bien entendu

enfin dis moi ce que tu en pense je suis ouvert

au plaisir
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
1 mars 2011 à 14:26
bonjour MIMIZANZAN

oui effectivement il y avait un bug quand la selection en hauteur ou en largeur etait inferieur a celle
de l'userform

j'avais essayé ta proposition mais je ne sais pas pourquoi ca ne fonctionnait pas

enfin si ca fonctionne chez toi tant mieux

je suis en train de le modifier et de l'affubler de fonctions diverses soyez un peu patients

quand au modification que tu a apporter je l'ai deja fait ca fait parti des petites modifs en cours
exemple les trois boutons et l'elasticité
copier la selection en noir et blanc
et quelque petites choses encore
mais je ne suis pas contre voir ton exemplaire si c'est plus propre je garderais le tiens

au plaisir
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
28 févr. 2011 à 23:32
Salut patosch,

Je trouve ton code très intéressant et utile.
Cependant, je me permets quelques remarques:
1- Il y a un bug quand on sélectionne une zone à la fois + large et moins haute que la form. Il suffit de modifier dans la sub apercu:
UserForm1.ScrollWidth = Selection.Width
UserForm1.ScrollHeight = Selection.Height
et on peut ajouter les scrollbars en fonction des dimensions de la sélection:
If Selection.Width > UserForm1.Width Then UserForm1.ScrollBars = 1
If Selection.Height > UserForm1.Height Then UserForm1.ScrollBars = 2
If Selection.Width > UserForm1.Width And Selection.Height > UserForm1.Height Then UserForm1.ScrollBars = 3
2- En effet, il est dommage que l'on ait seulement le bureau pour déposer le fichier, avec les pbs des versions Windows qui ont été mentionnés ci-dessus par les autres membres. Je propose une solution en utilisant l'objet FileDialog de Excel qui permettrait de choisir un chemin de dossier par défaut.
3- Pour améliorer la visibilité de la sélection sur la form, il serait utile d'utiliser une form redimensionnable, que l'on peut obtenir avec des API. C'est plus efficace que les scrollbars
Si çà t'intéresse, j'ai modifié ton code dans ce sens,et je peux te le faire parvenir.
Sinon, encore une fois, bravo pour ce code qui me sera sûrement utile.
Cdt
nathansecret Messages postés 63 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 31 octobre 2011
28 févr. 2011 à 16:00
Sur Windows XP, l'adresse du bureau est
"C:\Documents And Settings" & UserName & "\Bureau"
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
28 févr. 2011 à 11:32
bonjour corvelc

tout object se trouvant dans la zone de selection sera pris dans le cliché c'est un peu l'avantage de cette application

et pour finir tu peut tres bien sauver ce fichier tel quel au format xla,xlam selon ta version de office et le mettre en complement (coché le complement) ainsi tu l'aura dans le menu contextuel dans tout tes classeurs excel

c'est pas beau la vie
au plaisir
corvelc Messages postés 1 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 28 février 2011
28 févr. 2011 à 11:02
Bonjour,

Super cette macro qui va me rendre grand service, entre autre pour me permettre d'intégrer ces images directement dans mes presentations Powerpoint ou transmettre une image de mes rapports sans passer par un logiciel de capture d'image.
Juste une question d'un novice en VBA: Savoir si possibilité d'atapter la macro pour pouvoir faire la meme chose à partir d'une selection d'une partie d'un tableau dynamique ('PivotTable') ?.

merci d'avance
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
23 févr. 2011 à 15:38
oui c'est une idée cela dit il y a une autre solution aussi

tester la version vba(vba6 ou 7)

ou encore tester la version de l'os

je vais en refaire un avec tout ca comme ca compatibilité pour tout le monde

au plaisir
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
22 févr. 2011 à 17:14
Salut,

tres bonne idée, mais un petit problème avec la ligne suivante !

SavePicture iPic, "C:\Users" & Application.UserName & "\Desktop" & NOM_IMAGE & ".jpg"

En fait suivant la version de windows ou du choix de l'utilisateur ce chemin peut être different.
De plus sur certaine version de Windows, xp familiale en français je crois, le répertoire "Desktop" est en français donc nommé "Bureau".
Pour éviter ce problème il est préférable d'aller chercher le chemin dans la bdr.

Essai ceci :

Set WshShell = CreateObject("WScript.Shell")
UserDeskPath = WshShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop")
UserDeskPath = UserDeskPath & Application.PathSeparator
SavePicture iPic, UserDeskPath & NOM_IMAGE & ".jpg"
WshShell.Popup "un cliché de la selection a été déposé sur le bureau sous le nom de : " & NOM_IMAGE & ".bmp", 2, "CLICHE DE LA SELECTION"

A+
Rejoignez-nous