XL 2016 Taille Userform & saisie formulaire

Cendrillon

XLDnaute Nouveau
Bonsoir,
J'ai totalement perdu la main sur les macros, pouvez-vous SVP m'aider ?
Je suis en train de préparer un fichier pour animer un atelier de travaille et voulais offrir aux participants un questionnaire à compléter ensemble facilement.
J'ai 4 thèmes dans mon atelier qui correspondent à chaque forme dans le premier onglet.
Quand le participant clic sur une des formes je voulais qu'il puisse avoir un formulaire, jusqu'à là OK.
Mais le couack c'est que la taille du formulaire de saisie qui s'ouvre est petite ce qui la rends pas très lisible :-( Est-ce qu'il y a moyen de figer la taille du userform quand on l'ouvre ?

Mon autre problème c'est que j'ai une erreur après saisie des valeurs dans le formulaire que je ne comprends pas et que je 'arrive pas à résoudre.
Mon intention est que le formulaire renseigne les valeurs saisies dans l'onglet QA à la ligne 3 (j'ai laissé l'option d'insérer une ligne si le participant le renseigne plusieurs fois)
En résumé le premier bouton doit enseigner l'onglet QA de A3 à K3, puis le bouton 2 de L3 à U3 etc. (pas encore fait 😅si le premier marche je dupliquerai pour les 3 autres)
Merci d'avance pour votre aide
 

Pièces jointes

  • CXWorkshopexample.xlsm
    52.5 KB · Affichages: 8
Solution
bonjour
@cp4 il me semble t'avoir donné déjà et plusieurs fois le correctif de ma méthode
quand tu le rediffuse essaie au moins de donner la version propre et correcte

d'autant plus qu'il me semble te l'avoir dit que cette méthode aujourd'hui n'est plus aussi fiable que sur W7 office 2007
pour info chez moi c'est pas très bon le bouton fermer j'arrive tout juste à l'avoir
comme tu peux le voir sur cette capture
1681540370337.png


2° secundo tu resize le font.size avec un des ratio arbitrairement , alors que je te l'ai dis ça en est un 3 eme
qui est le min des deux tout simplement et par n'importe le quel au hasard
si le ratio de la diagonale n'est pas trop éloigné ca peut aller mais quand c'est pas...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Concernant la taille du UserForm, je dirais que c'est bien toi qui défini la taille que tu veux (voir le fichier en pièce jointe).

Quant à l'instruction [A3].ListObject.ListRows.Add (1) je ne suis pas certain que tu aies un Object dans la feuille CX Workshop, ni même dans la feuille CA qui semble être la feuille dans laquelle tu devrais ajouter les données saisies dans le UserForm.


ps : regarde aussi du côté des Noms, tu as pas mal de #Ref!.
 

Pièces jointes

  • CXWorkshopexample.xlsm
    49.1 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
bonjour
@cp4 il me semble t'avoir donné déjà et plusieurs fois le correctif de ma méthode
quand tu le rediffuse essaie au moins de donner la version propre et correcte

d'autant plus qu'il me semble te l'avoir dit que cette méthode aujourd'hui n'est plus aussi fiable que sur W7 office 2007
pour info chez moi c'est pas très bon le bouton fermer j'arrive tout juste à l'avoir
comme tu peux le voir sur cette capture
1681540370337.png


2° secundo tu resize le font.size avec un des ratio arbitrairement , alors que je te l'ai dis ça en est un 3 eme
qui est le min des deux tout simplement et par n'importe le quel au hasard
si le ratio de la diagonale n'est pas trop éloigné ca peut aller mais quand c'est pas le cas ben tu te retrouve avec un font size trop petit ou trop grand
je t'avais expliqué tout ça ;)

le voici donc corrigé a nouveau
et je te livre en même temps la version plein écran réel utilisant l'api showwindow en macro4(compatible All windows
teste les deux tu verra
VB:
Private Sub UserForm_Activate()
    FullScreenOnStart Me
    'FullScreenOnStartV2 Me
End Sub

Sub FullScreenOnStart(usf As Object)
'compatible Windows/Mac
'le problème avec cette méthode c'est que ce n'est pas précis
'en effet selon les versions Windows+office le résultat peut un peu différer
'chez moi par exemple c'est :(Windows10 + office 2013) usf.Move -3, 0, (usf.Width * ratioW)-10, (usf.Height * ratioH)-3
'sinon je vois  a peine le quart du bouton fermer
' et le ratio pour le font size c'est le plus petit des deux
    Dim ctl As Control, ratioW#, ratioH#, ratiofont#
    With Application: .WindowState = xlMaximized: ratioW = .Width / usf.Width: ratioH = .Height / usf.Height: ratiofont = .Max(rationw, ratioH): End With
    usf.Move 0, 0, (usf.Width * ratioW), (usf.Height * ratioH)
    For Each ctl In usf.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        On Error Resume Next
        ctl.Font.Size = ctl.Font.Size * ratiofont
        On Error GoTo 0
    Next
End Sub

Sub FullScreenOnStartV2(usf)
'compatible uniquement Windows
'l'userform est mieux cadré est mieux dimentionné
'le plein ecran est réel (<<<< on ne vois plus la barre des taches >>>>)
    Dim ctl As Control, ratioW#, ratioH#, ratiofont#, hwnd&, UW#, UH#
    UW = usf.Width: UH = usf.Height
    hwnd = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")         'api GetActiveWindow Capture du handle de la fenetre active
    ExecuteExcel4Macro ("CALL(""user32"",""ShowWindow"",""JJJ"",""" & hwnd & """,""" & 3 & """)")    ' application du mode
    ratioW = usf.Width / UW: ratioH = usf.Height / UH: ratiofont = Application.Min(ratioW, ratioH)
    For Each ctl In usf.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        On Error Resume Next
        ctl.Font.Size = ctl.Font.Size * ratiofont
        On Error GoTo 0
    Next
End Sub

les choses ne sont pas figées
c'est pas par ce que c’était bon hier que c'est bon aujourd'hui
c'est bien pour ça que depuis un moment déjà je diffuse la V2
tant que je n''ai pas trouvé une solution pérenne pour la V1(sans api)
 

cp4

XLDnaute Barbatruc
bonjour
@cp4 il me semble t'avoir donné déjà et plusieurs fois le correctif de ma méthode
quand tu le rediffuse essaie au moins de donner la version propre et correcte

d'autant plus qu'il me semble te l'avoir dit que cette méthode aujourd'hui n'est plus aussi fiable que sur W7 office 2007
pour info chez moi c'est pas très bon le bouton fermer j'arrive tout juste à l'avoir
comme tu peux le voir sur cette capture
Regarde la pièce jointe 1168286

2° secundo tu resize le font.size avec un des ratio arbitrairement , alors que je te l'ai dis ça en est un 3 eme
qui est le min des deux tout simplement et par n'importe le quel au hasard
si le ratio de la diagonale n'est pas trop éloigné ca peut aller mais quand c'est pas le cas ben tu te retrouve avec un font size trop petit ou trop grand
je t'avais expliqué tout ça ;)

le voici donc corrigé a nouveau
et je te livre en même temps la version plein écran réel utilisant l'api showwindow en macro4(compatible All windows
teste les deux tu verra
VB:
Private Sub UserForm_Activate()
    FullScreenOnStart Me
    'FullScreenOnStartV2 Me
End Sub

Sub FullScreenOnStart(usf As Object)
'compatible Windows/Mac
'le problème avec cette méthode c'est que ce n'est pas précis
'en effet selon les versions Windows+office le résultat peut un peu différer
'chez moi par exemple c'est :(Windows10 + office 2013) usf.Move -3, 0, (usf.Width * ratioW)-10, (usf.Height * ratioH)-3
'sinon je vois  a peine le quart du bouton fermer
' et le ratio pour le font size c'est le plus petit des deux
    Dim ctl As Control, ratioW#, ratioH#, ratiofont#
    With Application: .WindowState = xlMaximized: ratioW = .Width / usf.Width: ratioH = .Height / usf.Height: ratiofont = .Max(rationw, ratioH): End With
    usf.Move 0, 0, (usf.Width * ratioW), (usf.Height * ratioH)
    For Each ctl In usf.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        On Error Resume Next
        ctl.Font.Size = ctl.Font.Size * ratiofont
        On Error GoTo 0
    Next
End Sub

Sub FullScreenOnStartV2(usf)
'compatible uniquement Windows
'l'userform est mieux cadré est mieux dimentionné
'le plein ecran est réel (<<<< on ne vois plus la barre des taches >>>>)
    Dim ctl As Control, ratioW#, ratioH#, ratiofont#, hwnd&, UW#, UH#
    UW = usf.Width: UH = usf.Height
    hwnd = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")         'api GetActiveWindow Capture du handle de la fenetre active
    ExecuteExcel4Macro ("CALL(""user32"",""ShowWindow"",""JJJ"",""" & hwnd & """,""" & 3 & """)")    ' application du mode
    ratioW = usf.Width / UW: ratioH = usf.Height / UH: ratiofont = Application.Min(ratioW, ratioH)
    For Each ctl In usf.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        On Error Resume Next
        ctl.Font.Size = ctl.Font.Size * ratiofont
        On Error GoTo 0
    Next
End Sub

les choses ne sont pas figées
c'est pas par ce que c’était bon hier que c'est bon aujourd'hui
c'est bien pour ça que depuis un moment déjà je diffuse la V2
tant que je n''ai pas trouvé une solution pérenne pour la V1(sans api)
Bonjour,

@patricktoulon : Je constate que plus tu vieillis plus tu deviens de plus en plus grincheux et ta mémoire (comme la mienne) te joue des tours. En effet, tu dois confondre avec un autre membre. A mon avis cette version est beaucoup plus récente car tu ne m'as jamais donné ce bout de code avec API.
Ton ego aussi te joue des tours, tu insistes un peu trop sur tes copyrights dans plusieurs discussions.
Au bout d'un moment, on pourrait penser que tu es imbu de ta personnalité.
La modestie est une grande et sage vertu.
Sans rancune. Bon week-end.
 

patricktoulon

XLDnaute Barbatruc
re
non je ne parle pas de la version api je parle de l'autre
et c'est bien a toi que j'avais donné ces indications
car justement tu avais ce genre de soucis
je ne suis pas grincheux du tout 🤣
j’apprécie seulement que quand je prends du temps pour expliquer les choses ben que au moins on en garde un peu
ça n'a rien a voir avec mon ego ou quoi que ce soit d'autre
je pense que c'est toi qui se sent diminué


en ce qui concerne l'autre version (api avec macro4)

pour le coup j'ai cherché pourquoi le fullscreen oblitérait la taskbar
ben j'ai trouvé (il fallait pas aller chercher bien loin )
en fait c'est que les paramètres de STYLE et GWSTYLE du handle de la fenêtre userform est <<VIDE>>
du coup windows ne fait plus attention au autres fenêtres et redessine donc sans contexte
conclusion
il faut paramétrer la fenêtre userform avec le minima des fenêtres classiques
quitte (et la je dis bien dans ce contexte(fullscreen à l'activate)) a enlever ensuite les parties superflues des paramètres et ne laisser que le bouton fermer
et pour le coup je rends la chose optionnelle

plein écran total
ou
plein écran avec taskbar
VB:
Private Sub UserForm_Activate()
    'FullScreenOnStartV2 Me          'sans taskbar
    FullScreenOnStartV2 Me, True    'avec taskbar
End Sub

Sub FullScreenOnStartV2(usf, Optional taskbar As Boolean = False)
    Dim ctl As Control, ratioW#, ratioH#, ratiofont#, hwnd&
    UW = usf.Width: UH = usf.Height
    hwnd = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")         'api GetActiveWindow Capture du handle de la fenêtre active
    If taskbar Then ExecuteExcel4Macro ("CALL(""user32"",""SetWindowLongA"",""JJJJJ""," & hwnd & ", " & -16 & ", " & &H94CF0080 & ")")     'api SetWindowLongA
    ExecuteExcel4Macro ("CALL(""user32"",""ShowWindow"",""JJJ"",""" & hwnd & """,""" & 3 & """)")    ' application du mode
    If taskbar Then ExecuteExcel4Macro ("CALL(""user32"",""SetWindowLongA"",""JJJJJ""," & hwnd & ", " & -16 & ", " & &H94C80080 & ")")     'api SetWindowLongA
    ratioW = usf.Width / UW: ratioH = usf.Height / UH: ratiofont = Application.Min(ratioW, ratioH)
    For Each ctl In usf.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        On Error Resume Next
        ctl.Font.Size = ctl.Font.Size * ratiofont
        On Error GoTo 0
    Next
End Sub

tu me diras dans quelque temps
ben non ton ego est gros comme une patate blablabla tu m'a jamais donner cette version blablabla
blablabla
:rolleyes:
Bon weekend à toi aussi
résultat avec taskbar avec cette version V2
1681547474592.png
 

cp4

XLDnaute Barbatruc
je pense que c'est toi qui se sent diminué
Non, pas du tout.
Cependant, la manière dont tu présentes les choses démontre que tu cherches tout le temps à te mettre en valeur par aux autres.
Je t'ai donné, je t'ai dit, je t'ai montré, je ..... etc. Il faut se rappeler de tout ce que dit Monsieur Patrick.
J'espère que tu n'es pas aussi exigent envers ta personne mais surtout envers tes proches.
Bon, j'ai autre chose à faire. Je dois m'occupé de mes oiseaux, petite corvée hebdomadaire.
Bonne journée.
 

Cendrillon

XLDnaute Nouveau
bonjour
@cp4 il me semble t'avoir donné déjà et plusieurs fois le correctif de ma méthode
quand tu le rediffuse essaie au moins de donner la version propre et correcte

d'autant plus qu'il me semble te l'avoir dit que cette méthode aujourd'hui n'est plus aussi fiable que sur W7 office 2007
pour info chez moi c'est pas très bon le bouton fermer j'arrive tout juste à l'avoir
comme tu peux le voir sur cette capture
Regarde la pièce jointe 1168286

2° secundo tu resize le font.size avec un des ratio arbitrairement , alors que je te l'ai dis ça en est un 3 eme
qui est le min des deux tout simplement et par n'importe le quel au hasard
si le ratio de la diagonale n'est pas trop éloigné ca peut aller mais quand c'est pas le cas ben tu te retrouve avec un font size trop petit ou trop grand
je t'avais expliqué tout ça ;)

le voici donc corrigé a nouveau
et je te livre en même temps la version plein écran réel utilisant l'api showwindow en macro4(compatible All windows
teste les deux tu verra
VB:
Private Sub UserForm_Activate()
    FullScreenOnStart Me
    'FullScreenOnStartV2 Me
End Sub

Sub FullScreenOnStart(usf As Object)
'compatible Windows/Mac
'le problème avec cette méthode c'est que ce n'est pas précis
'en effet selon les versions Windows+office le résultat peut un peu différer
'chez moi par exemple c'est :(Windows10 + office 2013) usf.Move -3, 0, (usf.Width * ratioW)-10, (usf.Height * ratioH)-3
'sinon je vois  a peine le quart du bouton fermer
' et le ratio pour le font size c'est le plus petit des deux
    Dim ctl As Control, ratioW#, ratioH#, ratiofont#
    With Application: .WindowState = xlMaximized: ratioW = .Width / usf.Width: ratioH = .Height / usf.Height: ratiofont = .Max(rationw, ratioH): End With
    usf.Move 0, 0, (usf.Width * ratioW), (usf.Height * ratioH)
    For Each ctl In usf.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        On Error Resume Next
        ctl.Font.Size = ctl.Font.Size * ratiofont
        On Error GoTo 0
    Next
End Sub

Sub FullScreenOnStartV2(usf)
'compatible uniquement Windows
'l'userform est mieux cadré est mieux dimentionné
'le plein ecran est réel (<<<< on ne vois plus la barre des taches >>>>)
    Dim ctl As Control, ratioW#, ratioH#, ratiofont#, hwnd&, UW#, UH#
    UW = usf.Width: UH = usf.Height
    hwnd = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")         'api GetActiveWindow Capture du handle de la fenetre active
    ExecuteExcel4Macro ("CALL(""user32"",""ShowWindow"",""JJJ"",""" & hwnd & """,""" & 3 & """)")    ' application du mode
    ratioW = usf.Width / UW: ratioH = usf.Height / UH: ratiofont = Application.Min(ratioW, ratioH)
    For Each ctl In usf.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        On Error Resume Next
        ctl.Font.Size = ctl.Font.Size * ratiofont
        On Error GoTo 0
    Next
End Sub

les choses ne sont pas figées
c'est pas par ce que c’était bon hier que c'est bon aujourd'hui
c'est bien pour ça que depuis un moment déjà je diffuse la V2
tant que je n''ai pas trouvé une solution pérenne pour la V1(sans api)
Merci beaucoup @patricktoulon 🥰 J'ai testé toutes les solutions que tu as posté à ce sujet ce WE et celle-ci fonctionne bien sur mon PC pero et mon Mac Pro !!! Tu me sauves ! Belle semaine
 

Discussions similaires

Réponses
3
Affichages
266
  • Résolu(e)
Microsoft 365 Taille UserForm
Réponses
3
Affichages
351

Statistiques des forums

Discussions
312 209
Messages
2 086 267
Membres
103 168
dernier inscrit
isidore33