Boutons macros bougent et rétrécissent à la réouverture

bonjour à tous,

j'ai créé un Excel avec plus de 120 boutons de commande avec macros et sur une des feuilles de plus de 400 lignes, j'ai 19 boutons de commande en début de pages (de la ligne 46 à 70) qui fonctionnent toutes bien.

Le problème est que quand je ferme puis rouvre le document ces 19 boutons de commande se regroupent au niveau de la même ligne (ligne 46) et sont aplaties et n'ont plus que la taille d'une ligne que je dois agrandir pour savoir laquelle c'est pour replacer au bon endroit. (mais elles gardent leur place au niveau des colonnes ainsi que leur largeur, seules la hauteur et l'emplacement niveau ligne sont affectées par le problème, comme j'ai essayé de le montré sur l'image sur laquelle je montre ou chacun des 19 boutons se trouvent après réouverture du ficher).

image

voila à quoi ressemble ma ligne 46 après réouverture, on voit les endroit gris sur le ligne noirs, c'est là où ce regroupent les macros:

image

je précise que le 1er point est coché dans mon cas mais j'ai essayé la manip en essayant de cocher un des 2 autres :

image

le soucis c'est que dans mes macros des boutons de commande masquent des cellules et si je coche la 2e ou 3e case, les cellules se masquent mais les boutons sont toujours visibles

image

quelqu'un aurait-il une idée sur l'origine de mon problème?

Bonsoir,

à priori la solution proposée par cousinhub n'a pas fonctionnée ?

Avez-vous votre fichier ?

@ bientôt

LouReeD

bonjour,

Et si vous utilisez les cellules comme bouton, celles ne peuvent pas se déplacer ou changer de dimension. Et vous utilisez le double-clicque ou le right-clicque comme appèle de la macro.

SVP, ajouter un fichier exemplaire.

Bonjour le fil

Un fichier Excel avec plus de 120 boutons

Il n'y aurait pas un problème de conception à la base....

désolé je ne peux pas partager le fichier, il est confidentiel pour le moment.

BsAlv, comment faire pour utiliser des cellules comme boutons?

Comme Bruno le dit, 120 boutons = un problème de conception

mais ici l'idée pour faire un double-clicque dans les cellules A61:C69.

Un double-clicque appèle la macro "Worksheet_BeforeDoubleClick" dans le module de la feuille "Blad1". Celle regarde l'origine (cellule = target) du double-clicque et si cela est fait dans la bonnen plage, elle appèle une des 3 macro dans le module 1 avec un variable = le numéro de la ligne

15101-boutons.xlsb (22.11 Ko)

bonjour,

il n'y a pas de problème de conception chacun de ces boutons à une macro affectée qui a son utilité, je ne peux me passer d'aucun de ces bouton.

Merci pour cette solution je vais tester ça aujourd'hui.

Bonjour Joe888

il n'y a pas de problème de conception chacun de ces boutons à une macro affectée qui a son utilité, je ne peux me passer d'aucun de ces bouton

Ca c'est ce que vous voyez de votre quartier mais aller à la campagne... vous verrez qu'on peut certainement faire autrement

Dans ma macro, je pensais que chaque colonne a besoin d'une autre macro et qu'il n'y a qu'un variable qui change avec chaque ligne. Si c'est le contraire et tous les bouton d'une ligne appèlent la même macro, il faut simplement changer cela dans la macro "Worksheet_BeforeDoubleClick". Si vraiment chaque bouton a sa prompre macro, alors la liste de "Select ... End Select" sera assez longue.

Bonjour,

A défaut de fichier donnez nous trois, quatre code VBA des boutons. Avec application Caller et des tableaux de variables il y a peut être moyen de mutualiser ces codes pour en réduire le nombre et la taille.

@ bientôt

LouReeD

Bonjour Joe888, Le Forum,

Vu que tu ne souhaites pas proposer un fichier ou au minimum les macros couplées à ces boutons.

Je suppose que celles-ci ont pour but entre autres de réduire ou cachez certaines lignes. Ce qui va modifier la hauteur des boutons associés.

Jusqu'à les aplatir en une seule ligne.

Le plus simple étant de rétablir à l'ouverture du classeur la hauteur originale de ces lignes tel que le montre ton premier message.

Donc sur la partie code de ThisWorkbook insérer la ligne suivante à l'évènement Workbook_Open

Private Sub Workbook_Open()
Sheets("Yaunbinz").Rows("46:69").RowHeight = 26.25
End Sub

Modifier, bien entendu, le nom de la feuille. La hauteur des lignes étant estimée à celle initiale pour ta feuille Excel. A vérifier.

Tes boutons, situées sur la zone cible, reprendront leur forme originale. Sauf autre BINZ liée à tes macros.

Bonjour, merci à tous pour vos contributions.

A priori la proposition de X Cellus fonctionne, seul bémol : quand je retourne sur ma page les lignes qui étaient masquées (en fonction du bouton sur lequel j'ai cliqué) réapparaissent toutes.

Je suis allé au plus simple pour moi, il y a peut-être un moyen de régler ça sinon j’essaierai la proposition de BsAlv qui est plus compliqué pour le néophyte que je suis.

LouReed je veux bien vous donner quelques codes mais je ne sais pas ce qu'est application caller.

si ça peut aider je vous donne au hasard le code du bouton "4"

Sub RisqActR4()
'
' RisqActR4 Macro
'

'
ActiveWindow.SmallScroll Down:=-12
ActiveSheet.Unprotect
Cells.Select
Range("A19").Activate
Selection.RowHeight = 15.75
Selection.RowHeight = 15
ActiveWindow.SmallScroll Down:=30
Range("J77:J401,J405").Select
Range("J405").Activate
Selection.ClearContents
Range("46:48,52:54,58:60").Select
Range("A58").Activate
ActiveWindow.SmallScroll Down:=15
Range("46:48,52:54,58:60,75:255").Select
Range("A75").Activate
ActiveWindow.SmallScroll Down:=24
Range("46:48,52:54,58:60,75:255,278:401").Select
Range("A278").Activate
ActiveWindow.SmallScroll Down:=18
Range("46:48,52:54,58:60,75:255,278:401,407:413").Select
Range("A407").Activate
ActiveWindow.SmallScroll Down:=24
Range("46:48,52:54,58:60,75:255,278:401,407:413,423:443").Select
Range("A423").Activate
Selection.EntireRow.Hidden = True
ActiveWindow.SmallScroll Down:=-54
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.SmallScroll Down:=-30
End Sub

Edit modo : code mis entre balises merci d'y faire attention

Bonsoir,

déjà votre code pourrait ressemblait à ceci :

Sub RisqActR4()
    ActiveSheet.Unprotect
    Cells.RowHeight = 25
    Range("J77:J401,J405").ClearContents
    Range("46:48,52:54,58:60,75:255,278:401,407:413,423:443").EntireRow.Hidden = True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Maintenant vu qu'il y a des sélection de plages multiples il faut expliquer le lien entre "4" et ces sélections, c'est pourquoi le code de plusieurs boutons était nécessaire

Aussi lorsque vous postez un code, merci d'utiliser les balises de codes en cliquant sur l'icône </> disponible dans le menu et en collant le code dans la fenêtre.
Il sera plus facile à lire.

@ bientôt

LouReeD

Bonjour Joe888, Le Forum,

seul bémol : quand je retourne sur ma page les lignes qui étaient masquées (en fonction du bouton sur lequel j'ai cliqué) réapparaissent toutes.

Il suffit alors de laisser dans leur état, suite à ta dernière sauvegarde, les lignes 46 à 62.

Et d'appliquer la macro d'ouverture aux boutons situés entre la ligne 63 et 69. Puisque ceux sont eux les accordéonistes.

Et qu'ils doivent être toujours présents. Donc, ci-dessous.

Private Sub Workbook_Open()
Sheets("Yaunbinz").Rows("63:69").RowHeight = 26.25
End Sub

Mais comme le précise BrunoM45,

Il n'y aurait pas un problème de conception à la base ?

Et au vu de ton code sur le bouton 4, il faudra revoir pour l'ensemble de tes boutons, je suppose, tes lignes de code afin de les réduire.

En prenant exemple sur celui posté par LouReeD.

Car passer par l'enregistrement des macros produit le plus souvent de très longues lignes de code.

Bonjour,

en plus en mettant une option "ne pas déplacer ou déformer en fonction de la taille des cellules" et en jouant sur la visibilité des boutons, ceux-ci resteraient de "même taille" mais disparaitraient en même temps que les lignes seraient masquées.

Mais pour faire un code "mutualisé" des boutons et faire la gestion des visibilités il faut comprendre le but de chaque bouton, non ?

@ bientôt

LouReeD

Bonjour,

X Cellus : Il suffit alors de laisser dans leur état, suite à ta dernière sauvegarde, les lignes 46 à 62.

Et d'appliquer la macro d'ouverture aux boutons situés entre la ligne 63 et 69. Puisque ceux sont eux les accordéonistes.

Et qu'ils doivent être toujours présents. Donc, ci-dessous.

Private Sub Workbook_Open()
Sheets("Yaunbinz").Rows("63:69").RowHeight = 26.25
End Sub

les lignes accordéonistes sont bien celles de la ligne 46 à 69. La solution ne fonctionne pas, les cellules masquées ne se trouvent pas qu'au dessus de la ligne 63 mais aussi en dessous : ma feuille fait 450 lignes, en fonction du bouton choisi ça pose un certain nombre de questions (avec un menu déroulant oui/non) et ça masque les questions correspondantes aux autres boutons.

par exemple si je clique sur le 4 j'ai les plages des lignes 1 à 51; 55 à 57 ; 61 à 74 ; 256 à 277 ; 402 à 406 ; 414 à 450.

Et ça change pour chaque bouton

Bonsoir,

mon message reste en suspens... Quelle est la règle d'affichage/masquage des lignes en fonction des boutons ? Est-ce fixe ? si oui donnez la règle, sinon la programmation de chaque bouton devra être "solo".

Un bout de fichier : votre feuille avec les boutons, les modules avec leur code, et c'est tout. Supprimer les noms éventuel de personnes, supprimer les autres feuilles, tant pis si sur la feuille "boutons" des messages apparaissent en lieu et place des données s'il y a des formules se référent aux feuille supprimées, c'est juste pour comprendre.

@ bientôt

LouReeD

Bonjour Lou ReeD et merci pour vos réponses.

je vous donne le code du bouton "non" de la ligne 50 :

Sub RisqActAncCltNon()
' RisqActAncCltNon Macro

    ActiveSheet.Unprotect
    Cells.Select
    Selection.RowHeight = 15.75
    Selection.RowHeight = 15
    ActiveWindow.SmallScroll Down:=39
    Range("46:48,52:57").Select
    Range("A52").Activate
    ActiveWindow.SmallScroll Down:=6
    Range("46:48,52:57,61:395,399:406,414:420").Select
    Range("A414").Activate
    ActiveWindow.SmallScroll Down:=18
    Range("46:48,52:57,61:395,399:406,414:420,423:436").Select
    Range("A423").Activate
    ActiveWindow.SmallScroll Down:=15
    Range("46:48,52:57,61:395,399:406,414:420,423:436,444:556").Select
    Range("A444").Activate
    Selection.EntireRow.Hidden = True
    ActiveWindow.SmallScroll Down:=-81
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWindow.SmallScroll Down:=-30
End Sub

boutons oui de la ligne 47 :

Sub RisqActNvCltOui()
' RisqActNvCltOui Macro
'
    ActiveSheet.Unprotect
    ActiveWindow.SmallScroll Down:=-18
    Cells.Select
    Selection.RowHeight = 15.75
    Selection.RowHeight = 15
    ActiveWindow.SmallScroll Down:=33
    Range("49:54,58:398").Select
    Range("A58").Activate
    ActiveWindow.SmallScroll Down:=12
    Cells.Select
    Range("A30").Activate
    Selection.RowHeight = 15.75
    Selection.RowHeight = 15
    Range("J53").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=27
    Range("J77:J401").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-9
    Range("J405").Select
    Selection.ClearContents
    Range("49:54,58:398,402:406").Select
    Range("A402").Activate
    ActiveWindow.SmallScroll Down:=12
    Range("49:54,58:398,402:406,414:420").Select
    Range("A414").Activate
    ActiveWindow.SmallScroll Down:=9
    Range("49:54,58:398,402:406,414:420,430:556").Select
    Range("A430").Activate
    Selection.EntireRow.Hidden = True
    ActiveWindow.SmallScroll Down:=-69
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWindow.SmallScroll Down:=-39
End Sub

et le code du bouton 1.1 ligne 64 :

Sub RisqActR11()
' RisqActR11 Macro
    ActiveSheet.Unprotect
    Cells.Select
    Selection.RowHeight = 15.75
    Selection.RowHeight = 15
    ActiveWindow.SmallScroll Down:=57
    Range("J77:J401,J405").Select
    Range("J405").Activate
    Selection.ClearContents
    Range("46:48,52:54,58:60").Select
    Range("A58").Activate
    ActiveWindow.SmallScroll Down:=48
    Range("46:48,52:54,58:60,105:401,407:413").Select
    Range("A407").Activate
    ActiveWindow.SmallScroll Down:=12
    Range("46:48,52:54,58:60,105:401,407:413,423:443").Select
    Range("A423").Activate
    Selection.EntireRow.Hidden = True
    ActiveWindow.SmallScroll Down:=-54
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWindow.SmallScroll Down:=-30

End Sub

en espérant que vous puissiez y voir plus clair.

concernant votre code il fonctionne mais annule certains de mes ajustements comme la taille des cellules par exemple, il faudrait que je fasse un mix des 2 mais c'est effectivement beaucoup plus simple. Ma macro est celle qui a enregistré ma manipulation, je ne l'ai évidemment pas écrite comme le dit X Cellus.

Merci

Bonsoir joe888

Commencez par supprimer tous les

ActiveWindow.ScrollRow = XX

Pour simplifier un peu vous pouvez sans crainte supprimer les ligne comme celle-ci : ActiveWindow.ScrollRow = 35
C'est l'enregistrement de la rotation de la molette de souris ou des ascenseurs pour faire défiler la feuille vers le bas ou le haut.

Ici :

    Range("46:48,52:57").Select
    Range("A52").Activate
    ActiveWindow.SmallScroll Down:=6
    Range("46:48,52:57,61:395,399:406,414:420").Select
    Range("A414").Activate
    ActiveWindow.SmallScroll Down:=18
    Range("46:48,52:57,61:395,399:406,414:420,423:436").Select
    Range("A423").Activate
    ActiveWindow.SmallScroll Down:=15
    Range("46:48,52:57,61:395,399:406,414:420,423:436,444:556").Select

on voit que vous sélectionnez deux plage (car visible à l'écran) puis un scroll, pour ajouter à votre précédente sélection trois nouvelles plages, puis un scroll...
En fait seule la dernière ligne est nécessaire et elle définit la sélection des 7 plages voulues non contiguës. Les Activate ne servent à rien dans ce cas, c'est l'enregistreur qui le met, cela correspond lors d'une sélection de plusieurs cellules à la cellule qui est "activée" dans la sélection.

Ce qui fait qu'on arrive au code proposé. mais il y a une erreur de taille de cellule ? Pas facile à voir sans fichier.

@ bientôt

LouReeD

Rechercher des sujets similaires à "boutons macros bougent retrecissent reouverture"