Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

RESOLU par ROLAND UserForm affichage selon taille écran (pas plein écran)

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Me revoilà ayant besoin de vos lumières.

J'ai encore un souci. Cette fois-ci, c'est un problème d'affichage UserForm selon la taille de l'écran sur lequel s'ouvre le classeur.

Malgré mes recherches, je n'ai pas trouvé de solution.

Voici mon petit exposé de la chose :

je travaille "en ligne" avec des commerciaux qui utilisent chacun un classeur excel.
Ce fichier qui leur est attribué, est le même pour tous (j'ai copié en plusieurs exemplaires mon classeur "matrice").

Dans ce classeur, j'ai une cinquantaine d'UserForm qui doivent s'afficher à un endroit précis de l'écran pour être optimums en lecture, par rapport à d'autres informations contenues dans l'onglet.

Sur mon écran ordinateur de bureau qui plus est un grand écran, voici comment ça s'affiche :


c'est le bon affichage et au bon endroit.

Sur un ordi portable par exemple (autre taille d'écran) voici comment ça s'affiche :



Quelle que soit la taille d'écran d'affichage, j'ai besoin, comme le fait windows pour l'affichage en général, que mes UserForm soient réduits de la même manière afin qu'il soient positionnés au même endroit que sur mon écran ordi de bureau.

Dans les propriétés UserForm, j'ai pas trouvé et je n'ai pas trouvé en recherchant sur le net.

Si vous pouviez m'aider, peut-être ai-je mal vu dans les propriétés UserForm .... ou peut-être par macro ?

Vous remerciant déjà de m'avoir lu en espérant avoir été "un peu" clair.

Je vous souhaite à toutes et à tous, une très bonne journée,
Amicalement,
Lionel,
 

Pièces jointes

  • UF Ecran ordi de bureau.jpg
    25.7 KB · Affichages: 188
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Chers tous,

je ne sais quoi dire devant votre écoute.

Actuellement dans une période surchargée, je suis tellement fatigué que je n'ai pas pu tester ce soir.
J'aurais du car vous m'avez répondu si vite.

Je vais faire demain et je reviens vite vous dire.

Roland, Modeste et tous les autres,
Je vous souhaite une bonne nuit,
Amicalement,
Lionel,
 

Usine à gaz

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Pour Roland,

En fait, dans le résultat que je voudrais obtenir, je rejoins Modeste car c'est bien une question de Zoum automatique, comme dans l'affichage automatique windows en fonction de la taille de l'écran de l'ordi qui affiche et non une question de repositionnement ..... du moins je crois mais peut-être me suis-je mal expliqué.

Bonne nuit à tous
 

Roland_M

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

re

on peut régler l'userform en dimension et zoom selon la résolution perso je travail ainsi
j'ai des routines exprès ! mais le soucis c'est qu'apparemment tu ne sauras pas l'adapter !
c'est pour ça que je te donne des solutions simples !
 

Modeste geedee

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonsour®
le Zoom que je propose ne concerne que les userform(s) et non la feuille contenant des cellules.

en principe et par habitude mes userforms sont "modal" et dans ce cas l'accès à la feuille sous-jacente n'est pas possible, je privilégie alors justement de ne pas afficher de feuille et de positionner le(s) userform(s) en haut et à gauche , indépendamment de leur taille

associé à l'astuce du USF.Zoom, le userform peut alors avoir une taille optimisée à l'écran utilisé





si le demandeur souhaite positionner les userform par rapport à une plage de cellules il suffit alors de récupérer et se positionner selon les coordonnées de cette plage ...
cela ne garantira pas l'affichage correct et simultané de ces deux entités
 

Roland_M

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonsoir,

Alors voici la solution à tes problèmes, avec zoom selon résolution et position de tes userform !
@Modeste puisque tu t'intéresses, si tu veux bien essayer ce module c'est très simple à utiliser !
----------- j'ai extrait ça de mes codes perso que j'ai un peu simplifié !

1/3) PLACER LE CODE DANS UN MODULE
(je n'utilise pas d'API pour garder une compatibilité maximum)
--------------------------------------------------------------
2/3) PLACER CECI DANS L’USERFORM
'choix "centre" "haut"ou"<haut>" "<haut" "haut>" "bas"ou"<bas>" "<bas" "bas>"
Private Sub UserForm_Activate()
UserformZoomSelonResolution Me, "bas>"
End Sub
--------------------------------------
3/3) METTRE LA RESOLUTION dans laquelle a été réalisé l'userf voir les 2 constantes dans module
cette ligne> Public Const ResolutionCreatX% = 1024, ResolutionCreatY% = 768


CODE A PLACER DANS UN MODULE
Code:
'1/3) PLACER CE CODE DANS UN MODULE
'(je n'utilise pas d'API pour garder une compatibilité maximum)
'------------------------------------
'2/3) PLACER CECI DANS VOTRE USERFORM
'choix "centre" "haut"ou"<haut>" "<haut" "haut>" "bas"ou"<bas>" "<bas" "bas>"
'Private Sub UserForm_Activate()
' UserformZoomSelonResolution Me, "" 
'End Sub
'-----------------------------------
'3/3) METTRE LA RESOLUTION dans laquelle a été réalisé l'userf dans les 2 constantes ci-dessous

Public Const ResolutionCreatX% = 1024, ResolutionCreatY% = 768
'REM: perso je place la résolution dans les propriétés
'Me.ScrollWidth Me.ScrollHeight, c'est prévu ci-dessous


'NE RIEN MODIFIER CI-DESSOUS SI PAS COMPETENT
Public Sub UserformZoomSelonResolution(fmME As Object, PosFmME$)
Dim RxActuel%, RyActuel%, RxDeBase%, RyDeBase%, RX@, RY@, LimitB%
RxActuel = FResolutionXwinPixel: RyActuel = FResolutionYwinPixel
RxDeBase = fmME.ScrollWidth: RyDeBase = fmME.ScrollHeight
If RxDeBase = 0 Or RyDeBase = 0 Then RxDeBase = ResolutionCreatX: RyDeBase = ResolutionCreatY
If RxDeBase = 0 Or RyDeBase = 0 Then MsgBox "La résolution de base n'est pas définie !?", vbCritical, "erreur": Exit Sub
RX = RxActuel / RxDeBase: RY = RyActuel / RyDeBase
If RX < 1 Then RX = RX + ((1 - RX) * 0.2) Else RX = 1 + ((RX - 1) * 0.2) 'réglage pour limiter l'agrandissement
If RY < 1 Then RY = RY + ((1 - RY) * 0.2) Else RY = 1 + ((RY - 1) * 0.2) '0.5 =50% ce qui est > à 100 exp 1,50 fera 1,25
If RX > 4 Then RX = 4 '400maxi avec zoom
'redim userf sans StartUpPosition avec Zoom
Dim RW@, RH@, SvgZoom%, W%, H%
With fmME
 If RX > 4 Then RX = 4 '400 maxi
 .Zoom = 100 * RX
  W = FEpaisBordUserfPoint * 2: H = FHautBarreUserfPoint
 .Width = (.Width - W) * RX + W
 .Height = (.Height - H) * RX + H
End With
'réduire si trop large/haut au maxi barre des tâches
With fmME
 SvgZoom = .Zoom: RW = .Width / SvgZoom: RH = .Height / SvgZoom
 Do Until .Width <= FScreenWidthPoint And .Height <= FScreenHeightPointSurBarreTaches
   .Zoom = .Zoom - 1: .Width = .Zoom * RW: .Height = .Zoom * RH
 Loop
End With
fmME.StartUpPosition = 2
'recentrer si passe sous la barre des tâches
If SvgZoom <> fmME.Zoom Then
   With fmME
    .StartUpPosition = 0
    .Top = (FScreenHeightPointSurBarreTaches - .Height) * 0.5
    .Left = (FScreenWidthPoint - .Width) * 0.5
   End With
End If
If PosFmME$ > "" Then 'si pos.écran !?
   LimitB = FEpaisBordUserfPoint: W = FScreenWidthPoint: H = FScreenHeightPointSurBarreTaches
   With fmME
    .StartUpPosition = 0
   Select Case LCase(PosFmME$)
     Case "<haut":          .Top = LimitB: .Left = LimitB
     Case "haut>":          .Top = LimitB: .Left = W - .Width - LimitB
     Case "<haut>", "haut": .Top = LimitB: .Left = (W - .Width) * 0.5
     Case "<bas":           .Top = H - .Height - LimitB: .Left = LimitB
     Case "bas>":           .Top = H - .Height - LimitB: .Left = W - .Width - LimitB
     Case "<bas>", "bas":   .Top = H - .Height - LimitB: .Left = (W - .Width) * 0.5
    Case Else: .StartUpPosition = 2 'centre
   End Select
   End With
End If
End Sub

Public Function FPointsParPixel!(): FPointsParPixel = 0.75: End Function
Public Function FResolutionXwinPixel(): FResolutionXwinPixel = (Application.Width - 12) / FPointsParPixel: End Function
Public Function FResolutionYwinPixel(): FResolutionYwinPixel = (Application.Height + 18) / FPointsParPixel: End Function
Public Function FScreenWidthPoint(): FScreenWidthPoint = FResolutionXwinPixel * FPointsParPixel: End Function
Public Function FScreenHeightPoint(): FScreenHeightPoint = FResolutionYwinPixel * FPointsParPixel: End Function
Public Function FScreenHeightPointSurBarreTaches(): FScreenHeightPointSurBarreTaches = FScreenHeightPoint - FHautBarreDesTachesPoint: End Function
Public Function FHautBarreDesTachesPoint(): FHautBarreDesTachesPoint = 30: End Function
Public Function FEpaisBordUserfPoint(): FEpaisBordUserfPoint = 4: End Function
Public Function FHautBarreUserfPoint(): FHautBarreUserfPoint = 24: End Function
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonsoir tout le monde,

Curieux et intéressé par le sujet, désolé de m'incruster. Le code de Roland_M fonctionne bien, l'userform se positionne en bas à droite.

Mais notre ami avait dit qu'il avait 52 Userforms. Donc s'il doit mettre ce code 52 fois, je lui souhaite du courage.

Sur ce fil, néné06 a proposé un module de classe. Dommage, je n'ai pas les bagages pour y faire.

Bonne soirée.
 

Roland_M

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonsoir,

pour incorporer le code, tout simplement par code !
exemple ici,
tu ouvres un classeur vierge et tu fais Insert Userform 2 fois soit Userform1 et Userform2
ensuite dans un module tu colles ce code et tu tapes F5 ensuite va voir dans tes Userforms et tu comprendras !

Code:
Sub CreatCode()
I = 0
Do: I = I + 1
  M$ = Choose(I, "Userform1", "Userform2", "") '<<< ici le nom des Userforms
  If M$ = "" Then Exit Do
With ActiveWorkbook.VBProject.VBComponents(M$).CodeModule
 x = .CountOfLines + 1
 .InsertLines x, "Private Sub Userform_Activate()": x = x + 1
 .InsertLines x, "'ligne de code": x = x + 1
 .InsertLines x, "'ligne de code": x = x + 1
 .InsertLines x, "'ligne de code": x = x + 1
 .InsertLines x, "End Sub"
End With
Loop
End Sub
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonjour Roland_M,

Je te remercie beaucoup. J'ai inséré 2 userforms (userform1 et userform2) et j'ai exécuté le code.

Mais le code s'arrête sur la ligne "With ActiveWorkbook.VBProject.VBComponents(M$).CodeModule"

avec ce message d'erreur: Erreur d’exécution 1004 - La méthode VbProject de l'objet workbook a échouée.

Bonne journée!
 

Usine à gaz

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonjour Roland,
Bonjour à toutes et à tous,

Je suis désolé de ne pas être revenu vers vous.
j'ai un souci de fatigue profonde et je suis alité. ça devait arriver LOl

Je me repose et je reviens vers vous en début de semaine prochaine.

Encore Merci à tous pour votre gentillesse,
Amicalement,
Lionel,
 

Roland_M

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

bonjour,

@cathodique:

as-tu bien mis le code dans un module ou un code feuille pour l'exécuter ? et surtout pas dans un userform !
je viens de réessayer le code, au cas où une faute de frappe, mais non, et ça fonctionne très bien !?
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

re

ha ! salut arthour, je m'inquiétais !
tu as du voir la solution que je te propose !?
on verra cela quand ça ira mieux pour toi,
en attendant, soignes toi bien, et bon rétablissement !
 

cathodique

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonjour,

@Lionel: je te souhaite un rapide et prompt rétablissement.

@ Roland_M: j'avais mis tes 2 codes dans des modules standards. Ensuite j'ai réessayé en mettant ton dernier dans un module de feuille. Et ça ne fonctionne pas sur mon fichier test.

Je joins mon fichier, car je n'ai pas compris pourquoi le code plante et je n'ai pas les compétences pour y remédier.

Merci beaucoup.
 

Pièces jointes

  • Ajuster position userform suivant dim ecran.xlsm
    22.7 KB · Affichages: 42
  • Ajuster position userform suivant dim ecran.xlsm
    22.7 KB · Affichages: 51

Roland_M

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

re

alors je ne comprend pas car j'ai fais F5 et tout est OK!
j'ai remis le code dans le module, mais c'est pas ça qui fait car je l'ai exécuté depuis le code feuille !?

EDIT: j'y pense, regardes du côté des références, tu as peut être une référence manquante !?

regarde l'image jointe et compare !

 

Pièces jointes

  • Ajuster position userform suivant dim ecran.xlsm
    25.9 KB · Affichages: 52
  • Ajuster position userform suivant dim ecran.xlsm
    25.9 KB · Affichages: 43
  • imag1.jpg
    114.9 KB · Affichages: 56
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonsoir Roland_M,

je te remercie beaucoup. En fait, j'ai activé ceci (voir image) et maintenant le code ne plante pas.
Et j'avais fait exactement comme ton fichier joint. Donc, je n'ai rien compris sur le rendu de ton code.

Dans ma petite tête, et par rapport à ce que notre ami Arthour973 avait demandé (afficher 52 userfoms suivant la résolution de l'écran). Dans ton exemple on a considéré seulement 2 Userforms. Or, quand j'exécute le code, je n'ai aucun userfrom qui s'affiche.

Merci quand même. Bonne soirée.
 

Pièces jointes

  • Roland.JPG
    40.5 KB · Affichages: 57

Usine à gaz

XLDnaute Barbatruc
Re : UserForm affichage selon taille écran (pas plein écran)

Bonjour Roland,
Bonjour à toutes et à tous,

Bon sang, un vrai coup de fatigue qui a un peu duré ...... ça va mieux et je reprends.

Mon cher Roland, j'ai pu ce WE tester tout ce que tu m'as envoyé et ....... ça marche super, c'est génial et je te remercie vraiment.

D'ailleurs je remercie tous ceux qui m'ont apporté, par leurs conseils et/ou commentaires, des ouvertures vers d'autres cieux et je pense notamment aux modules de classe que je ne connais pas.

MERCI A TOUS,

D'autre part, dans mon "sacré" classeur de bricoleur, j'ai aussi quelques commentaires mais qui ne s'affichent pas du tout comme je le voudrais LOL

J'ai téléchargé les fichiers d'exemples (super au passage) de Monsieur BOISGONTIER et j'ai tenté de modifier le code le plus approché de mon besoin.

Je suis pas loin de la solution mais il reste encore quelques petits soucis que je suis incapable de résoudre malgré mes tentatives et recherches.

Je vais encore revenir vers vous pour ça en créant un autre fil.

Vraiment un merci particulier à toi Roland et Merci à tous d'avoir été encore là.

Je vous souhaite une très bonne journée,
Amicalement,
Lionel,
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…