Microsoft 365 mémo_clic fonctionnement

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

J'ai un code que m'a passé un membre du forum que je remercie au passage.
Ce code est super !!!
Il me permet d'afficher à la hauteur choisie la ligne de la cellule cliquée.
Egalement, quand je clic sur la cellule d'une autre ligne,
Il remet la ligne précédemment cliquée à la hauteur initiale
et m'affiche la nouvelle ligne cliquée à la hauteur choisie.

J'ai un gros souci cf discussion https://www.excel-downloads.com/threads/affichage-lignes-masquees-temps-de-traitement.20039711/
Ce code me permet de solutionner à 50% mon souci.

En effet, je peux quand je clique copier une ligne formatée ce qui me permet d'afficher (dans mon fichier de travail) les cellules pour qu'elle soient parfaitement lisibles,
notamment en ce qui concerne les longues annonces et nos commentaires = 50% du problème résolu


En revanche, je ne sais pas coder le retour :
C'est à dire qu'à l'affichage de la nouvelle ligne cliquée ;
Il remet la ligne précédemment cliquée à la hauteur initiale et efface ses formats (.Selection.ClearFormats)

Si vous aviez la bonne codification, ce serait super.
Je joins un fichier test.
Un super grand remerciement pour celui-là aussi :)
lionel,
 

Pièces jointes

  • memo_clic.xlsm
    20.4 KB · Affichages: 18

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re Laurent950,

ça fonctionne très bien Il correspond à mon besoin :)
Super merci à toi :)
Je l'ai un p'tit' peu modifier sans difficulté car en fait c'est à partir de la colonne A et la ligne 3 est une ligne masquée.
Je joins le fichier.

Re-Patrick,
Ton code me semble bien mais je n'arrive pas à le faire fonctionner pour qu'il corresponde à mon besoin.
Peux-tu voir le fonctionnement avec le fichier joint ?
Merci vraiment à toi aussi pour être là :)

lionel,
 

Pièces jointes

  • memo_clic_(8) Userform et Module de classe.xlsm
    25.4 KB · Affichages: 7

laurent950

XLDnaute Accro
Bonjour patricktoulon
j'ai besoins de deux variables;oldrow et oldrowheight

j'ai commenté votre code :
La question que je me pose lorsqu'il y a sortie de la procédure toutes les variables sont décharger, mais vous arriver bien a garder en mémoire
les valeurs pour oldrow et oldrowheight au nouveau lancement de procédure ! comment vous faite ?

VB:
Dim oldrow As Long          ' N° de ligne      (Origine)
Dim oldrowheight As Double  ' Hauteur de ligne (Origine)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
'
    If Target.Row >= 4 And Target.Row <= 15 Then
        ' Si il y a un historique N° ligne d'origine Modifier !
        If oldrow > 0 Then
            Application.EnableEvents = False
                Cells(16, 1).Resize(, 5).Copy: Cells(oldrow, 1).Resize(, 5).PasteSpecial _
                            Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                ' Hauteur de la ligne
                Cells(oldrow, 1).EntireRow.RowHeight = oldrowheight
              
                ' N° ligne et Hauteur ligne (Origine)
                oldrow = 0
                oldrowheight = 15
              
            Application.EnableEvents = True
'
            Application.CutCopyMode = False
        End If

'       Copie la ligne d'origine : Format et colle fomat en Ligne 16.
         With Cells(Target.Row, 1).Resize(, 5)
             .Copy: Range("A16").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                ' Rerise a 0 de la procedure suite a un changement
                ' Puis reprend ici pour stoker les valeurs dans les variables
                    oldrow = .Row
                    oldrowheight = .RowHeight
             ' Ligne d'origine Modifier
             .Font.Color = vbBlack
             .RowHeight = 40
             .Interior.Color = RGB(255, 150, 100)
          Application.CutCopyMode = False
        End With
    End If
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
@lorent950
, mais vous arriver bien a garder en mémoire
les valeurs pour oldrow et oldrowheight nouveau lancement de procédure ! comment vous faite ?

elle sont tout simplement dimée en globale module (en haut en premier dans le module
VB:
Dim oldrow As Long          ' N° de ligne      (Origine)
Dim oldrowheight As Double  ' Hauteur de ligne (Origine)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 '...
 '....
 

laurent950

XLDnaute Accro
il y a un principe :
sa marche aussi avec Private ?
Private oldrow As Long ' N° de ligne (Origine)
Private oldrowheight As Double ' Hauteur de ligne (Origine)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'...
'....

En conclusion en haut dans les entêtes de Module les variables sont décharger a la fermeture du classeurs excel !
 

patricktoulon

XLDnaute Barbatruc
re
En conclusion en haut dans les entêtes de Module les variables sont décharger a la fermeture du classeurs excel !
au deactivate du sheet ma semble t il ;)

public utilisable dans tout module
private utilisable que dans le module
private ou dim en haut de module = globlale module

on pourrait parler de static aussi qui fonctionne comme une public ou dim mais dimée dans la sub ou fonction
 

laurent950

XLDnaute Accro
Bonsoir Lionel
Avec les explication de patrick j'ai plus besoin de passer par un stockage intermédiaire dans : des Userform ou Commentaire ou Feuille excel !

ps : Les variables placer en haut de module sont décharger une fois la feuille excel fermer (C'est top pour conserver les données dans les variables)

J'ai tous refait
Code Module standard : Active_Desactive
VB:
' Bouton : Active code
Sub active()
Application.EnableEvents = True
End Sub
'Bouton : Desactive code
Sub desactive()
ActiveSheet.Unprotect Password:=""
Application.EnableEvents = False
End Sub

le Module a placer dans la feuille 1
VB:
' Garde en Mémoire :
Private Type Coordonnee
  Hauteur As String
  adresse As Range
End Type
Private MaPlage As Coordonnee
Private Sub Worksheet_SelectionChange(ByVal r As Range)
'
' Test
    If r.Row = 3 Then Exit Sub
'
' Depart
    ActiveSheet.Unprotect Password:=""
    Application.EnableEvents = False
    Application.ScreenUpdating = False
'
' conserve le format de la ligne 3 colonne A3:Y3
Dim FormatBase As Range
    Set FormatBase = Me.Range(Me.Cells(3, 2), Me.Cells(3, 25))
'
' test si la variable type est vide pour la hauteur de ligne
' si différente de vide la hauteur de la ligne et format précédent seront remis comme précédement
    If MaPlage.Hauteur <> Empty Then
         MaPlage.adresse.RowHeight = MaPlage.Hauteur
         MaPlage.adresse.EntireRow.ClearFormats
    End If
'
' Ligne d'origine à mémoriser : dans la variable Type en haut de Module (en fin de procédure information conservé)
'   Adresse de la ligne / ChoixLign.Address
        Set MaPlage.adresse = r
'   Hauteur de ligne / ChoixLign.Height
        MaPlage.Hauteur = r.RowHeight
'
'   Mise en forme de la ligne choisie (en fonction d'un formatage prédéfinie ici ligne N°3 colonnes 2 à 25)
'   Ligne choisie Affiche ligne hauteur 40 (Selon Votre choix)
        r.RowHeight = 40
' Copier le Format
        FormatBase.Copy
        Me.Range(Me.Cells(MaPlage.adresse.Row, 2), Me.Cells(MaPlage.adresse.Row, 25)).PasteSpecial Paste:=xlPasteFormats
        Me.Application.CutCopyMode = False
'
' Fin
    ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlNoRestrictions
    Application.EnableEvents = True
    Application.ScreenUpdating = True
'
End Sub

Merci PatrickTouloun pour ces explications très précieuse

Merci Lionel pour ses projets bien complexe et intéressante

Laurent
 

Pièces jointes

  • memo_clic_(10) sans Userform et Module de classe.xlsm
    25.1 KB · Affichages: 1
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re Laurent,
Re Patrick,

Laurent, merci pour ton formidable travail, vraiment :)
et ça marche du tonnerre,

Merci à toi aussi Patrick pour ton travail si souvent génial :)
Grâce à vous, mon souci est résolu cette fois-ci.

LOL, Mes projets bien complexes ne manquent pas avec mon fichier 'usine à gaz".
Mais qui grâce à vous tous devient de plus en plus un petit "bijou" qui fonctionne de mieux en mieux.

C'est grâce à vous tous que je peux travailler dans de bonnes conditions,
Tous mes mercis ne seront jamais à la hauteur de vos travaux.
lionel,
 

Discussions similaires

Statistiques des forums

Discussions
312 413
Messages
2 088 203
Membres
103 767
dernier inscrit
LEONG