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).
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:
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 :
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
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
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
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 SubModifier, 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 SubEdit 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 SubMaintenant 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 SubMais 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 Subles 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 Subboutons 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 Subet 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 Suben 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").Selecton 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