bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 2013
-
22 févr. 2011 à 17:14
cs_patosch
Messages postés42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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.
cs_patosch
Messages postés42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és63Date d'inscriptionmardi 11 novembre 2008StatutMembreDernière intervention31 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 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):
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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 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és63Date d'inscriptionmardi 11 novembre 2008StatutMembreDernière intervention31 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és1Date d'inscriptionvendredi 28 décembre 2007StatutMembreDernière intervention28 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és42Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention26 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és1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 22 févr. 2011 à 17:14
Salut,
tres bonne idée, mais un petit problème avec la ligne suivante !
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"
4 mars 2011 à 13:30
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
4 mars 2011 à 13:02
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 ?
3 mars 2011 à 19:13
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
3 mars 2011 à 18:48
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
2 mars 2011 à 18:41
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
2 mars 2011 à 18:19
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
2 mars 2011 à 00:35
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
1 mars 2011 à 22:13
pour mimizanzan:
est ce bien ca que tu me suggérais???
au plaisir
1 mars 2011 à 22:01
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
1 mars 2011 à 14:31
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
1 mars 2011 à 14:26
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
28 févr. 2011 à 23:32
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
28 févr. 2011 à 16:00
"C:\Documents And Settings" & UserName & "\Bureau"
28 févr. 2011 à 11:32
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
28 févr. 2011 à 11:02
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
23 févr. 2011 à 15:38
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
22 févr. 2011 à 17:14
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+