web-dev-qa-db-fra.com

Excel: les contrôles de réduction et d'expansion incroyables

Parfois, je rencontre une feuille de calcul qui souffre de boutons magiques ou de listes déroulantes qui grossissent ou diminuent avec le temps.

Rien dans le code n'indique cela.

Quelqu'un d'autre a-t-il vécu cette joie? 

55
Nick

Le problème semble être lié à la manière dont Windows traite les résolutions non natives sur les moniteurs et peut être évité de plusieurs manières

Le problème peut être un cauchemar complet lorsque cela se produit, mais cela ne se produit que par intermittence. 

Nous avons récemment testé une feuille de calcul Excel utilisée par quelques dizaines de personnes et avons développé une bonne idée de la cause et des solutions possibles. 

La cause semble être liée à toute configuration dans laquelle les écrans sont utilisés autrement que par leur résolution native. Cela peut se produire facilement si un utilisateur connecte un moniteur externe à un ordinateur portable et ne choisit pas soigneusement la configuration d'écran résultante. Par exemple, si un ordinateur portable est branché sur un projecteur (peut-être un ancien avec un écran natif de 1024 x 768) mais l’ordinateur portable est de 1280 x 800 et l’utilisateur choisit de dupliquer l’affichage plutôt que s’étendre it (paramètres dans "connecter à un projecteur" ou "affiche" le panneau de commande dans Windows 7), le résultat est une image imprévisible et généralement insatisfaisante sur les deux écrans avec des résolutions non natives. Nous avons constaté que ces paramètres presque toujours provoquaient de graves problèmes avec les boutons Excel, notamment les contrôles ActiveX. Parfois, lors de clics répétés, ils deviennent illisibles; d'autres fois, ils se développent pour couvrir tout l'écran.

Généralement, lorsque nous demandons aux utilisateurs d’utiliser le paramètre extend display et que le résultat est deux écrans utilisant des résolutions natives, nous ne voyons pas le problème.

Il existe également des méthodes basées sur le code pour minimiser le problème. Nous avons essayé de réinitialiser l'emplacement et la taille des boutons et des commandes lorsque l'utilisateur cliquait dessus (ce qui ajoute beaucoup de code fastidieux si vous avez beaucoup de boutons). Cela a parfois fonctionné. Nous avons également essayé de basculer la propriété autosize de true à false et vice versa (cela fonctionne manuellement en mode développeur), ce qui corrige plusieurs instances, mais apparemment pas toutes. 

27
matt_black

la cause en est que les personnes ouvrent la feuille de calcul sur une machine accessible via Remote Desktop, et que la résolution de l'écran diffère entre les machines locales et distantes. Cela a une incidence sur les contrôles disponibles dans la boîte à outils des contrôles, mais le problème persiste en utilisant un contrôle de bouton des formulaires de l'ancienne école. Ma réponse non satisfaisante consiste donc à l'utiliser.

11
Nick

Ce problème est en fait dû à la résolution de l'écran. Le plus souvent, cela se produit lorsque l'utilisateur se connecte à un projecteur ou à WebEx tout en utilisant l'application Excel.

Une solution simple à ce problème consiste à demander à l'utilisateur de redémarrer son ordinateur sans aucune connexion périphérique (projecteur), puis à rouvrir l'application Excel.

5
TheG

Cela me harcelait depuis des années, de temps en temps… .. Il y a un certain nombre de corrections autour, mais elles semblent aléatoires…. Cela se produisait toujours dans Excel 2010 (ce qui m'est arrivé en mai 2014) Certains rapports signalent toujours l'existence dans Excel 2013 ... La meilleure description que j'ai trouvée et qui correspond au moins à ma situation (Excel 2010, aucun RDP impliqué, aucun aperçu avant impression impliqué) est ici:

Blog de l'équipe de support Microsoft Excel: ActiveX et les contrôles de formulaire se redimentionnent lorsqu'ils sont cliqués ou en faisant un aperçu avant impression (dans Excel 2010)

(Cela pourrait ne pas aider les utilisateurs d'Excel 2013 désolé)

EDIT: Ajout de détails dans le cas où technet link est mort, l'article de technet dit:

PREMIÈREMENT, installez Microsoft Hotfix 2598144 pour Excel 2010, disponible: ici .

SECONDLY, si votre symptôme est "Un bouton ActiveX prend une taille incorrecte après avoir cliqué dessus dans une feuille de calcul Excel 2010", vous devez alors:

  • Cliquez sur Démarrer, cliquez sur Exécuter, tapez regedit dans la zone Ouvrir et puis cliquez sur OK. 
  • Recherchez et sélectionnez la sous-clé de Registre suivante HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options.
  • Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Valeur DWORD (32 bits).
  • Tapez LegacyAnchorResize, puis appuyez sur Entrée.
  • Dans le volet d'informations, cliquez avec le bouton droit sur LegacyAnchorResize, puis cliquez sur Modifier.
  • Dans la zone Données de la valeur, tapez 1, puis cliquez sur OK.
  • Quittez l'Éditeur du Registre.

OR SECONDEMENT, si votre symptôme est "Un contrôle de formulaire de bouton est affiché de manière incorrecte dans un classeur après l'affichage de l'aperçu avant impression du classeur dans Excel 2010", vous devez alors:

  • Cliquez sur Démarrer, cliquez sur Exécuter, tapez regedit dans la zone Ouvrir et puis cliquez sur OK.
  • Recherchez et sélectionnez la sous-clé de Registre suivante: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Valeur DWORD (32 bits).
  • Tapez MultiSheetPrint, puis appuyez sur Entrée.
  • Dans le volet d'informations, cliquez avec le bouton droit sur MultiSheetPrint, puis cliquez sur Modifier.
  • Dans la zone Données de la valeur, tapez 1, puis cliquez sur OK.
  • Sélectionnez à nouveau la sous-clé de registre suivante: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Valeur DWORD (32 bits).
  • Tapez LegacyAnchorResize, puis appuyez sur Entrée.
  • Dans le volet d'informations, cliquez avec le bouton droit sur LegacyAnchorResize, puis cliquez sur Modifier.
  • Dans la zone Données de la valeur, tapez 1, puis cliquez sur OK.
  • Quittez l'Éditeur du Registre.

OR SECONDEMENT, si votre symptôme est "Un bouton ActiveX est remplacé par une taille incorrecte dans une feuille de calcul Excel 2010 après l'affichage de l'aperçu avant impression de la feuille de calcul", vous devez alors:

  • Cliquez sur Démarrer, cliquez sur Exécuter, tapez regedit dans la zone Ouvrir et puis cliquez sur OK.
  • Recherchez et sélectionnez la sous-clé de Registre suivante: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Valeur DWORD (32 bits).
  • Tapez LegacyAnchorResize, puis appuyez sur Entrée.
  • Dans le volet d'informations, cliquez avec le bouton droit sur LegacyAnchorResize, puis cliquez sur Modifier.
  • Dans la zone Données de la valeur, tapez 1, puis cliquez sur OK.
  • Quittez l'Éditeur du Registre.

Bonne chance. Cette question est tellement pénible ...

5
peterg4000

Les correctifs décrits précédemment, le redimensionnement/repositionnement par programme des contrôles Active X après des événements de clic ou la modification du registre (avec D Word LegacyAnchorResize), ne m'ont pas résolu le problème avec Excel 2010/Windows 7 64 bits.

La solution pour moi a été trouvée ici: https://support.Microsoft.com/en-us/kb/838006

Pour Excel 2010, le lien indique:

  1. Quittez tous les programmes en cours d'exécution.
  2. Cliquez sur Démarrer, cliquez sur Exécuter, dans la zone Ouvrir, tapez regedit et puis cliquez sur OK.
  3. Recherchez, puis cliquez sur la clé de registre suivante:
  4. HKEY_CURRENT_USER\Software\Microsoft\office\14.0\common
  5. Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Clé.
  6. Tapez Draw, puis appuyez sur Entrée.
  7. Dans le menu Edition, pointez sur Nouveau, puis cliquez sur Valeur DWORD.
  8. Tapez UpdateDeviceInfoForEmf, puis appuyez sur Entrée.
  9. Cliquez avec le bouton droit sur UpdateDeviceInfoForEmf, puis cliquez sur Modifier . 10. Dans la zone Données de la valeur, tapez 1, puis cliquez sur OK.
  10. Dans le menu Fichier, cliquez sur Quitter pour fermer l'Éditeur du Registre.
4
baffled68

Ce problème est très frustrant. D'après mon expérience, les propriétés sont généralement définies correctement sur les objets ActiveX. J'ai modifié un fichier UDF d'en haut pour qu'il puisse simplement fonctionner sur n'importe quelle feuille active, cela remettra tout en place tel qu'il était avant la réduction. 

Public Sub ResizeAllOfIt()
Dim myCtrl As OLEObject

For Each myCtrl In ActiveSheet.OLEObjects

 Dim originalHeight
 Dim originalWidth

 originalWidth = myCtrl.width
 originalHeight = myCtrl.height

  myCtrl.height = originalHeight - 1 
  myCtrl.height = originalHeight 
  myCtrl.width = originalWidth

Next myCtrl

End Sub
1
Joe Stellato

Je rencontre régulièrement ce problème dans Excel 2010 (ce qui me ramène toujours à ce sujet) et bien que je n’aie pas trouvé de solution à 100%, je pense disposer de certaines informations pouvant aider les autres.

En jouant avec les boutons avec ennui, j'ai découvert que DIFFÉRENTS ÉVÉNEMENTS pour chaque objet posaient des problèmes différents. Par exemple,

  • Button A - La taille du bouton diminuerait lors de l'événement MouseDown
  • Bouton B - Le texte s’agrandissait sur l’événement MouseMove (mais seulement après avoir cliqué sur le bouton. AKA, je clique sur un bouton, le code s’exécute, laissez la souris sur le bouton, puis dès que je déplace la souris, le texte agrandir)
  • Zone de saisie de texte A - Le texte serait agrandi sur l'événement MouseUp
  • Zone de saisie de texte B - Le texte s'agrandirait lors de l'événement LostFocus

La seule solution qui me convient est d'écrire du code pour réinitialiser la taille/le texte de chaque événement d'objet à l'origine du redimensionnement aléatoire. Ainsi ...

Où MaterialNum est le nom de la zone de saisie et MouseDown est l'événement ...

Private Sub MaterialNum_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    ' Reset the size, font style, and size
    With Worksheets("QuoteForm").Shapes("MaterialNum")
        .Height = 21
        .Width = 101.25
        .Left = 972.75
        .Top = 87
        With .DrawingObject.Object.Font
            .Name = "Arial"
            .Size = 12
        End With
    End With

End Sub

De plus, j'ai dû modifier quelques options dans le contrôle du format (objet clic droit> Contrôle du format):

  • Onglet Taille: la case Verrouiller les proportions est cochée
  • Onglet Propriétés: la case Imprimer un objet n'est pas cochée

De même, dans le volet Propriétés de l'objet (objet faisant un clic droit> Propriétés), je règle TakeFocusOnClick sur false.

Oui, cela prend du temps et est fastidieux car cela doit être fait avec chaque objet, mais c'est la seule solution qui fonctionne pour moi (Et il semble que ce soit une solution plus rapide que d'attendre que Microsoft répare cela !!!). Espérons que cela aide les autres.

J'espère que d'autres trouvent cela utile

1
Angelo Bovino

Se pourrait-il que le bouton soit défini pour coller aux coins d'une cellule, au lieu de flotter librement? 

Vérifiez avec 

Format | Propriétés | Positionnement d'objet 

et choisissez autre chose que "déplacer et dimensionner avec des cellules"

1
PA.

Ancien fil de discussion mais je rencontrais ce problème et le résolvais en regroupant d’abord les boutons d’option, dans mon cas, regroupés avec le problème, puis en définissant simplement (en réinitialisant) la taille de ce groupe dans un Auto_Open en tant que tel:

With ThisWorkbook
    .Worksheets("1").Shapes("grpInput").Width = 383.1
    .Worksheets("2").Shapes("grpSuite").Width = 383.1
    .Worksheets("3").Shapes("grpLoc").Width = 383.1
    .Worksheets("4").Shapes("grpDecision").Width = 383.1
End With
1
MX313

J'ai eu ce problème à quelques reprises et pour résoudre j'ai fait ce qui suit:

  1. Rechercher dans mon lecteur C:\tout fichier portant l'extension ".exd"
  2. Supprimez ces fichiers (vous pouvez le faire)
  3. Implémenter un code qui redimensionne les objets ActiveX chaque fois que la feuille est ouverte

J'ai trouvé que ce problème était causé par tout ce que nous avons branché l'ordinateur portable dans un projecteur et enregistré le fichier. Puis, chaque fois que le problème se posait, je ne faisais que répéter les étapes 1. et 2. et mes objets ActiveX se comportaient à nouveau.

1
Robitron

[Excel PROFESSIONAL PLUS 2016, 32BITS, VERSION 1802, CONSTRUCTION 9029.2167]

J'avais le même problème et je pouvais résoudre le problème en personnalisant la mise à l'échelle de l'affichage dans Windows 10, 64 bits. C'est extrêmement simple et cela fonctionne pour un utilisateur unique. Suivez simplement les instructions ci-dessous et vous retrouverez tous les contrôles de formulaire, formes de feuille, figures et contrôles ActiveX à leur taille d'origine. Pas besoin de coder ou de faire des ruses/magies/hacks avancés. Si le lien fourni est rompu, il vous suffit de répéter ces étapes.

  1. Pour définir l'affichage personnalisé de la mise à l'échelle dans Windows 10, vous devez procéder comme suit.

    Ouvrir les paramètres.

  2. Allez dans Paramètres - Affichage.
  3. Sur la gauche, cliquez sur le lien Custom Scaling sous "Scale and Layout".
  4. La page Disposition personnalisée sera ouverte. Spécifiez une nouvelle valeur pour la mise à l'échelle en pourcentage. [UTILISER 100] !! ... et voila. Fermez et rouvrez Excel.

C'est un vieux post, mais j'espère que cela aidera toutes les personnes qui font face à ce problème excitant et stressant d'Excel.

https://winaero.com/blog/set-display-custom-scaling-windows-10/

1
Luiz Vaughan

Nous venons de résoudre ce problème au niveau de l'entreprise en ajoutant le module suivant à tous les classeurs activés par macro:

Option Explicit

Type ButtonSizeType
    topPosition As Single
    leftPosition As Single
    height As Single
    width As Single
End Type

Public myButton As ButtonSizeType

Sub GetButtonSize(cb As MSForms.CommandButton)
' Save original button size to solve windows bug that changes the button size to
' adjust to screen resolution, when not in native resolution mode of screen
    myButton.topPosition = cb.top
    myButton.leftPosition = cb.Left
    myButton.height = cb.height
    myButton.width = cb.width
End Sub

Sub SetButtonSize(cb As MSForms.CommandButton)
' Restore original button size to solve windows bug that changes the button size to
' adjust to screen resolution, when not in native resolution mode of screen
    cb.top = myButton.topPosition
    cb.Left = myButton.leftPosition
    cb.height = myButton.height
    cb.width = myButton.width
End Sub

Appelez-les simplement au début et à la fin de votre code comme ceci:

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
' Turn off ScreenUpdating to make sure the user dosn't see the buttons flicker
GetButtonSize CommandButton1 ' Saves original button size
' Do cool things
'
'
'
SetButtonSize CommandButton1 ' Restores original button size

Application.ScreenUpdating = True
' Turn ScreenUpdating back on when you're done
End Sub
1
Excel Novice

Mes moniteurs semblent tous être réglés sur des résolutions natives, ce qui approfondit le mystère. Cependant, j'ai constaté que le fait de faire quelque chose au bouton (déplacement ou redimensionnement) résout le problème d'une manière ou d'une autre. Cette routine automatise le déplacement, puis restaure le paramètre d'origine.

Le code suivant semble résoudre le problème, du moins pour les boutons.

Public Sub StablizeButton(oButton As MSForms.CommandButton)

    With oButton

        ' If True, then temporary distortion is remedied only by clicking somewhere.
        ' If False, then the temporary distortion is remedied merely by moving the mouse pointer away.
        .TakeFocusOnClick = False
        ' For best results:  In the Properties Sheet, initialize to False.

        .Left = .Left + 200             ' Move the button 200 units to the right, ...
        .Left = .Left - 200             ' ... and then move it back.

    End With

End Sub

Invoquez-le comme suit:

Private Sub MyButton_Click()
    StablizeButton MyButton

    ' Remainder of code.
End Sub
1
Paul Margus

J'ai remarqué qu'aucune de ces réponses n'attache le contrôle à une ligne/colonne. Cela a fonctionné assez proprement pour moi. En gros, vous "mesurez" où vous voulez que l'objet aille et ensuite le placez-y dans le code d'activation de la feuille. Dans l'exemple ci-dessous, le bouton s'aligne toujours sur D8: F10. Les lignes/colonnes ont tendance à être plus fiables que la résolution d'un ordinateur.

Private Sub Worksheet_Activate()
'Note this is done in the sheet code, not a Module.



With Me.Shapes("CommandButton1")

    .Left = Me.Range("A1:C1").Width
    .Top = Me.Range("a1:a7").Height
    .Width = Me.Range("D1:F1").Width
    .Height = Me.Range("A8:a10").Height

End With

End Sub

Le résultat sera quelque chose comme ça:

 enter image description here

1
PGCodeRider

J'ai trouvé ce problème dans tous les objets (boutons, zones de texte, etc.). Lorsque j'imprime/affiche un aperçu de plusieurs feuilles, toutes les feuilles, à l'exception de la première de la séquence, ont été déplacées ou redimensionnées. Après de nombreux tests, la solution la plus simple consiste à effectuer un zoom avant ou supérieur sur la page et à rétablir les paramètres d'origine.

0
user4995156

Après avoir essayé de nombreuses solutions sur ce poste et sur les articles associés, j'ai découvert que la solution à un problème différent publié par Microsoft fonctionnait également de manière fiable pour ce problème particulier lorsqu'elle était appliquée de manière particulière, du moins dans le contexte dans lequel je travaillais. J'ai rencontré ces problèmes dans une résolution native des ordinateurs portables que nous avons ici et sur un PC chaque fois que je passais à une résolution non native. Plus précisément, les boutons se chargent avec une taille plus grande que la normale, s’agrandissant lorsque vous cliquez dessus, et le texte et les images de ces boutons se rétrécissent (et au moins le réglage du texte reste le même, je ne vois donc aucun moyen de le modifier par programmation. ou autrement.) Ce ne sont pas des problèmes intermittents dans mon cas. J'ai eu des problèmes intermittents cependant après avoir utilisé l'aperçu avant impression pour lequel Microsoft a publié une solution pour ici . J'ai essayé cela et cela semble fonctionner.

La solution: pour Excel, fermez l'application et supprimez le fichier MSForms.exd de C:\Users{UserName}\AppData\Local\Temp\Excel8.0 dans la résolution dans laquelle vous souhaitez afficher les boutons. Vous pouvez également rechercher d'autres fichiers .exd dans votre dossier AppData\Temp local pour d'autres bureaux. applications.

Comme je l'ai mentionné, il s'agit d'une solution proposée par Microsoft pour un problème différent: les boutons cessent de fonctionner après l'installation des mises à jour de Dec '14. Voici le lien vers cet article. Dans ce cas, c'est une solution ponctuelle. Ici, vous devrez peut-être le faire chaque fois que vous modifiez des résolutions.

0
tbaker818

Maintenant, en utilisant Excel 2013, cela se produit CHAQUE FOIS, je déploie mon écran lorsque Excel est en cours d'exécution (et chaque fois que je supprime l'extension).

Le correctif que j'ai commencé à implémenter utilise des hyperliens au lieu de boutons et d'un pour ouvrir un formulaire utilisateur avec tous les autres contrôles activeX activés.

0
jamheadart

je n'ai pas testé cela, mais je suppose que cela a à voir avec la propriété zoom (peut-être ajouter activewindow.Zoom = false).

On peut aussi faire une boucle sur les formes définissant .Placement = xlMove sur workbook_open et window_activate, ceci afin d’empêcher les formes de redimensionner avec des cellules (mais bougera avec elles).

j'utilise Excel 2013 et je n'ai jamais eu ce problème, mais je ne l'utilise jamais à distance ..., j'essaie juste de vous aider avec de petites idées

0

J'ai peut-être trouvé un correctif: " assurez-vous que toutes les formes de la feuille de calcul ont des noms uniques " (y compris les cases à cocher/boutons radio (contrôles OLE) ainsi que les images et autres types de formes ...)

Parce que le problème est intermittent, je ne peux pas le garantir. Deux formulaires fonctionnent maintenant correctement avec ce correctif, mais "deux" est un très petit jeu d’échantillons et pourrait bien être une coïncidence. Néanmoins, voici les étapes que j'ai suivies:

J'ai répertorié toutes les formes dans la feuille de problèmes (wsForm) sur une feuille vierge (Sheet1):

Sub ListShapes()
Dim spShape As Shape
Dim intRow As Integer


Sheet1.Range("A1:F1") = Array("Name", "Left", "Top", "Width", "Height", "Bottom Right Cell")
intRow = 2

For Each spShape In wsForm.Shapes        

    Sheet1.Cells(intRow, 1).Value = spShape.Name
    Sheet1.Cells(intRow, 2).Value = spShape.Left
    Sheet1.Cells(intRow, 3).Value = spShape.Top
    Sheet1.Cells(intRow, 4).Value = spShape.Width
    Sheet1.Cells(intRow, 5).Value = spShape.Height
    Sheet1.Cells(intRow, 6).Value = spShape.BottomRightCell.Address

    intRow = intRow + 1

Next
End Sub

J'ai ensuite compté chaque nom de forme dans la colonne A en utilisant une formule dans la colonne G:

= COUNTIF ($ A $ 2: $ 120, A2)

Évidemment, ajustez la plage en fonction ... Vous pouvez ensuite filtrer sur toutes les formes qui n'ont pas un "1" dans cette colonne. La "cellule en bas à droite" vous aide à trouver la forme dans votre feuille de calcul: renommez-la en sélectionnant la forme, puis entrez une nouvelle valeur unique dans la zone de nom/référence en haut à gauche d'Excel. 

Cette liste de formes a également permis de retrouver des formes "mortes" (0 hauteur ou 0 largeur) qui ont été longtemps oubliées et non utilisées. 

J'espère que cela fonctionne pour vous! D'ailleurs ... j'espère que cela fonctionnera pour MOI pour de futures occurrences ...

0
Simon

Le regroupement des contrôles semble fonctionner pour moi. Je voterais ou ferais un commentaire mais SO ne me le permettra pas. Notez que ce problème se pose souvent si vous utilisez la mise à l’échelle d’affichage W8 et disposez d’un ordinateur portable haute résolution et d’un moniteur plus ancien.

0
user2573274

Certains de ces problèmes peuvent être dus à des contrôles se redimensionnant lorsqu'ils sont remplis. J'ai tendance à tourner la propriété IntegralHeight de contrôles tels que les zones de liste de True (valeur par défaut) à False pour empêcher le redimensionnement automatique de la hauteur du contrôle au moment de l'exécution. 

0
MagicWand

Je trouve que le problème ne semble se produire que lorsque le gel des volets est activé, ce qui est normalement le cas dans la plupart des applications, car vous placerez vos boutons de commande, etc.

La solution qui a fonctionné consiste à regrouper les contrôles, mais également à s’assurer que le groupe s’étend au-delà de la zone de gel des volets. Pour ce faire, j'ajoute un contrôle en dehors de la zone de gel des volets, l'ajoute au groupe mais masque également le contrôle afin que vous ne le voyiez pas.

0
Steve Bayliss

C'est très bizarre. Les propriétés Width & Height ne sont pas réduites à la requête (que ce soit dans le code ou en utilisant la feuille de propriétés), mais apparemment, elles changent. 

J'ai remarqué que si j'utilise la feuille de propriétés et que je change la largeur de la norme 15 à, par exemple, 14 puis BACK à 15, elle la corrige.

Le code ci-dessous fonctionne pour moi (et a un effet visuel amusant sur la feuille: vous cliquez, ça rétrécit, l’écran scintille et il s’agrandit).

Ma solution en code (sur l'événement click pour la case à cocher):

Dim myCtrl As OLEObject
For Each myCtrl In ActiveSheet.OLEObjects
  myLab = myCtrl.Name
  myCtrl.Height = 14 ' to "wake up" the property.
  myCtrl.Height = 15 ' to reset it back to normal
  myCtrl.Width = 12 ' just making sure
Next myCtrl
0
jfkelley

Si vous ne souhaitez pas que le bouton se déplace d'avant en arrière, vous pouvez insérer l'emplacement d'origine dans votre code, puis vérifier par rapport à ceux-ci. Désactiver la mise à jour de l'écran lorsque le bouton est cliqué, vérifier si l'emplacement est différent sur le contrôle, le rétablir, si nécessaire, réactiver la mise à jour de l'écran

DP 

0
DPIII

Essayez de changer le réglage du zoom à 100% en utilisant le curseur inférieur droit. Corrigé pour moi sur les deux moniteurs de différentes tailles. 

0
Jimmy

Ajoutez ce code à un fichier .reg. Double-cliquez sur et et confirmez. Redémarrez Excel. 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\options]
"LegacyAnchorResize"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Draw]
"UpdateDeviceInfoForEmf"=dword:00000001
0
Bjørn Austrud

J'ai le même problème parfois. Dans mon cas, je pouvais le répliquer à 100% sur un fichier mais il était incohérent sur un fichier pratiquement identique. J'ai également constaté que l'erreur de taille n'était pas permanente - je pouvais enregistrer et rouvrir le fichier pour restaurer l'apparence du bouton. Je pourrais aussi créer une nouvelle fenêtre et ensuite jeter la fenêtre endommagée. J'utilise une seule configuration de moniteur. 

Pour moi, le bouton a été redimensionné lorsque j'ai accédé à la collection HPageBreaks de la feuille. J'ai pu éviter le problème en modifiant temporairement l'affichage de la fenêtre comme suit:

ActiveWindow.View = xlPageBreakPreview
  ' do pagination stuff using HPageBreaks
ActiveWindow.View = xlNormalView
0
R Neame

Après avoir recherché sur le net, il semble que la meilleure solution consiste à enregistrer le fichier au format .xlsb (binaire) plutôt que .xlsm

0
Cement Sneakers

Ce que j’ai commencé à faire il ya un certain temps a été d’avoir un seul sous-marin qui définit la taille de tous mes contrôles. Je peux ensuite exécuter ce sous-utilisateur à partir de n'importe quel point du code où les contrôles augmentent ou diminuent. C'est parfois un travail fastueux, mais cela empêche mes boutons de manger ma feuille de calcul.

0
Danno

J'ai eu un problème similaire, mais j'ai constaté que le problème était rapidement résolu en effectuant un zoom avant et arrière. Par conséquent, j'ai ajouté le code ci-dessous au bas de ma macro comme solution rapide. Je ne suis pas un expert en Excel mais cela semble fonctionner correctement. Changer le nombre en bas devrait refléter votre zoom préféré.

ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 90
0
CantExcel

J'ai trouvé un correctif qui fonctionne et résout le problème pour un utilisateur unique. Si vous ne voulez pas lire mon petit discours, vous pouvez passer directement à la solution.

RANT:

J'ai eu ce problème stupide depuis les dinosaures. Dans l'intervalle, Microsoft disposait de nombreuses ressources pour publier d'innombrables mises à jour majeures de la suite Office. Pourtant, ce problème n'a pas été résolu. C'est absolument exaspérant. Je n'ai aucune raison de mettre à niveau lorsque des éléments de base comme celui-ci ne fonctionnent pas. Quelqu'un chez MS utilise sûrement les contrôles ActiveX dans Excel directement sur un écran haute résolution, non?

Je n'ai pas rencontré ce problème sur mon ordinateur de bureau, je ne sais pas pourquoi, mais sur ma Surface Pro 4, mes contrôles ActiveX se font de manière banale lorsque je clique dessus.

Aujourd'hui, j'ai décidé d'aller au fond des choses. J'ai cherché haut et bas, j'ai essayé toutes les solutions proposées sur différents forums (aucune d'entre elles ne fonctionne d'ailleurs). Peu importe que les contrôles soient groupés ou non, verrouillés ou non, que le correctif soit installé ou non.

Hier, un autre problème lié à un comportement anormal dans une autre application appelée Traktor (logiciel DJ) était activé: les contrôles sautaient lorsque la mise à l'échelle de l'affichage était définie sur une valeur différente de 100%. Un utilisateur a trouvé que la solution consistait à modifier le mode de compatibilité pour cette application. Alors j'ai fait la même chose pour Excel, et ça a fonctionné! Maintenant, mes commandes restent en place, quelles que soient la résolution d'affichage et la mise à l'échelle.

SOLUTION:

(Assurez-vous que Excel n'est pas en cours d'exécution)

  1. Localisez Excel.EXE (sur mon système, cela peut être trouvé à C:\Program Files\Microsoft Office\Office16\Excel.EXE)
  2. Renommez "Excel.EXE" en "_Excel.EXE" (changez-le en autre chose)
  3. Cliquez avec le bouton droit sur le fichier Excel.EXE renommé, puis sélectionnez Propriétés> onglet Compatibilité> section Paramètres.
  4. Définissez le comportement de redimensionnement DPI élevé = activé et la mise à l'échelle effectuée par = Application
  5. Cliquez sur OK
  6. Renommez "_Excel.EXE" en "Excel.EXE"

Maintenant, Excel fonctionnera à sa résolution native et les contrôles ActiveX ne vont pas mal tourner. Le seul inconvénient est qu'Excel ne réagit pas à la mise à l'échelle de l'écran, ce qui peut paraître un peu plus petit que ce que l'on voudrait. Sur ma surface, Pro 4 est plus qu'acceptable

REMARQUES:

1) Les étapes 2 et 6 sont requises avec Excel 2016, car la boîte de dialogue Propriétés pour Excel.EXE n'offre pas l'onglet Compatibilité. Après avoir renommé, l'onglet devient disponible.

2) Cette solution ne fonctionne que sur un utilisateur unique. En d'autres termes, si vous envoyez un fichier Excel contenant des contrôles ActiveX à vos collègues, les contrôles ActiveX ne s'afficheront pas correctement sur leur système, à moins qu'ils ne modifient les paramètres du mode de compatibilité.

3) Après l'application de ce hack, les fichiers Excel précédemment corrompus semblent se réparer eux-mêmes à leur ouverture, tous les contrôles récupérant leurs dimensions d'origine.

S'il vous plaît tester et commenter, j'espère que cela peut aider quelqu'un, applaudissements!

0
Scoox

J'ai également eu le problème avec les listes de sélection ActiveX et j'ai trouvé ce qui suit ailleurs et cela semble fonctionner jusqu'à présent. Il semble également que la solution de loin la plus facile à transférer lors du transfert du tableur à quelqu'un d'autre:

"Tandis que le contrôle ListBox a une propriété IntegralHeight dont l'effet secondaire d'un paramètre FALSE empêchera ce contrôle d'aller de travers, et que les boutons de commande ont des propriétés telles que déplacer/dimensionner avec des cellules, etc., d'autres contrôles ne sont pas aussi élégants."

Et ils ont quelques conseils supplémentaires: http://www.experts-exchange.com/articles/5315/Dealing-with-unintended-Excel-Active-X-resizing-quirks-VBA-code-simulate- auto-correction.html

0
ROB