XL 2013 Formater hauteur de ligne aller et retour

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonnjour à toutes et à tous,

Je me permets de vous solliciter à nouveau car je n'arrive pas à trouver la bonne solution à mon souci.

Je souhaite :
1 formater la cellule (donc la ligne) active à une hauteur,
2 que cette ligne soit remise à sa hauteur initiale quand je clique dans une cellule d'un autre ligne.
Malgré mes tests et recherches, je n'ai pas trouvé.

J'ai fait ce petit code qui fonctionne bien pour le point 1
Code:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
On Error Resume Next
If Not Intersect(R, Range("a1:v10000")) Is Nothing And R.Count = 1 Then
    ActiveCell.RowHeight = 300
    End If
End Sub

Le fichier joint sera peut-être plus explicite que mes vagabondages LOL

Je vous remercie, comme toujours de votre gentillesse.
Bonne fin de journée,
Amicalement,
Lionel,
 

Pièces jointes

  • Test hauteur ligne aller et retour.xlsm
    18.1 KB · Affichages: 50

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Jacky67, le Forum,

J'ai "poussé" un peu plus loin le test du code dans mon fichier de travail.
Il y a un souci d'allers et retours de hauteur aux clics sur la même ligne :

J'ai à cliquer sur plusieurs cellules de la même ligne et le code modifie à chaque fois la hauteur de la ligne. Cela n'est pas pratique car il faut encore cliquer pour afficher la bonne hauteur ce qui déclenche intempestivement d'autres codes de la feuille.

Idéalement : Les infos devant rester affichées tant qu'on clique ou qu'un code de la feuille sélectionne une cellule de la même ligne,

il faudrait que la ligne reprenne sa hauteur uniquement au clic d'une cellule sur une autre ligne


Je ne sais pas s'il y a une solution mais ce serait super :)
Je remets le fichier avec un nouvel onglet : Jacky67V2 adaptée

Avec mes remerciements pour votre aide si précieuse.
Bonne journée à toutes et à tous,
Amicalement,
Lionel,
 

Pièces jointes

  • Test hauteur ligne aller et retour.xlsm
    65.9 KB · Affichages: 46
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re à toutes et à tous,

J'ai avancé sur mon souci :
Sans solution à mon poste précédent, j'ai pensé que ce serait mieux en créant des macros dans un module standart :
Code:
Sub Ligne_hauteur()
On Error Resume Next
  ActiveCell.RowHeight = 300
End Sub
Sub Ligne_hauteur1()
On Error Resume Next
  ActiveCell.RowHeight = 20
End Sub

ça fonctionne bien mais il reste un souci :
j'ai besoin que le code fonctionne au clic à partir de la ligne 2


et je ne sais pas coder.
cf. fichier avec onglet : Par code module standard

Je continue à chercher,
Amicalement,
Lionel,
 

Pièces jointes

  • Test hauteur ligne aller et retour.xlsm
    70.8 KB · Affichages: 44

Jacky67

XLDnaute Barbatruc
RE...
Pour lancer des macro dans un module on utilise généralement des boutons sur la feuille.
Ou alors par un évènement sur la feuille(clic/double clic etc...) qui lance cette macro
Ce qui revient au même que ce qui à déjà été proposé
On ne peut pas avoir le beurre et l'argent du beurre
Une dernière proposition
 

Pièces jointes

  • Test hauteur ligne aller et retour v3.xlsm
    51 KB · Affichages: 41

Si...

XLDnaute Barbatruc
Bon_jour

Le bouton bascule (contrôle ToggleButton) convient pour simuler un va-et-vient et permet de ne pas déranger d'autres évènements déjà programmés (par évènementielles).
VB:
Private Sub ToggleButton1_Click()
  If Not Intersect(Selection, [A2:A10000]) Is Nothing Then _
  Selection.RowHeight = IIf(Selection.RowHeight = 20, 100, 20)
End Sub
 

Pièces jointes

  • hauteur ligne bascule.xlsm
    19.7 KB · Affichages: 30

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Bonne année pour vous. Quelle soit pleine de bonheur et de réussite.

Je reviens sur ce fil
Tous les codes que vous avez eu la gentillesse de me passer sont bons et fonctionnels et je vous en remercie encore.

Le code de Vgendron et de Jacky67 est celui qui correspond le mieux au besoin de mon fichier de travail.

Il me reste un souci que je n'avais pas prévu
Ce qui fonctionne super et c'était le résultat recherché :
Quand je clique dans l'une des cellules à partir de la ligne 7, le code remet toutes les lignes à hauteur 50 et la ligne cliquée à hauteur 300


Le souci :
Mon fichier contient environ 50000 lignes et la remise à hauteur 50 DE TOUTES LES LIGNES prend 2 secondes et multiplié par des centaines de fois, c'est du temps perdu pour notre boulot.

L'idéal, me semble-t-il, serait que seule la ligne précédemment cliquée (hauteur à 300) soit remise à hauteur 50 avant de mettre la nouvelle ligne cliquée à hauteur 300.

Mais je ne sais pas comment faire et ce n'est peut-être pas réalisable.
En effet, j'avais pensé à remettre à 50 la ligne active mais en cliquant sur une nouvelle ligne elle devient la nouvelle ligne active.

Peut-être faudrait-il un code qui permette de garder en mémoire la dernière ligne cliquée ?
Mes recherches et essais n'aboutissent pas :confused:

Peut-être que mes magiciens préférés auront une "folle" idée ?
Fichier test en pièce jointe.

Un grand merci pour tout ce que vous faites.
Belle année à vous toutes et tous.
Amicalement,
 

Pièces jointes

  • Test hauteur ligne aller et retour 2.xlsm
    46.2 KB · Affichages: 23

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Dans mes recherches, je viens de trouver un code qui donne par msgbox l'adresse de la cellule cliquée précédemment :
https://forum.hardware.fr/hfr/Programmation/VB-VBA-VBS/excel-vba-comment-sujet_83970_1.htm
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveWorkbook.Names.Add Name:="vev", RefersToR1C1:=ActiveCell
    Application.Goto Reference:="vev"
    MsgBox Application.PreviousSelections(2).Address
End Sub

Je cherche comment je pourrais coder pour l'inclure.
 

eriiic

XLDnaute Barbatruc
Bonjour,

L'idéal, me semble-t-il, serait que seule la ligne précédemment cliquée (hauteur à 300) soit remise à hauteur 50 avant de mettre la nouvelle ligne cliquée à hauteur 300.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static memoLigne As Range
    If Target.Row < 7 Then Exit Sub
    If Not memoLigne Is Nothing And Not memoLigne Is Target.Rows(1) Then memoLigne.RowHeight = 50
    Set memoLigne = Target.Rows(1)
    memoLigne.RowHeight = 300
End Sub
eric
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Eriic,
Bonjour à toutes et à tous,

Merci Eriic, pour ton retour de code qui fonctionne super bien.
J'avais un conflit avec Target et je l'ai modifié comme ceci :
Code:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
    Static memoLigne As Range
    If R.Row < 7 Then Exit Sub
    If Not memoLigne Is Nothing And Not memoLigne Is R.Rows(1) Then memoLigne.RowHeight = 50
    Set memoLigne = R.Rows(1)
    memoLigne.RowHeight = 300
End Sub

Encore un grand merci,
Tous mes voeux pour cette nouvelle année,
Amicalement,
Arthour973,
 

eriiic

XLDnaute Barbatruc
Bonjour,

bizarre que Target ait pu te créer un conflit, d'autant plus qu'il est passé Byval.
Pour que ce soit propre à l'ouverture suivante il faudrait ajouter ça dans ThisWorkbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not memoLigne Is Nothing Then memoLigne.RowHeight = 50
End Sub
Et supprimer Static memoLigne pour le déclarer au début d'un module standard :
VB:
public memoLigne As Range
Mes meilleurs voeux également :)
eric
 

Discussions similaires

Réponses
7
Affichages
327

Statistiques des forums

Discussions
312 108
Messages
2 085 363
Membres
102 874
dernier inscrit
Petro2611