Matérialisé une cellule aux croisement d'une ligne et d'une colonne

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonjour Chri8Ed, le forum,

A chaque fois on croit ce fil terminé mais non, pas du tout :cool:

Avec cette version (2) on peut faire autant de double-clics qu'on veut.

Et on repart à zéro par un clic droit :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim zone As Range
Cancel = True
If IsError([Sel]) Then Set zone = Target Else Set zone = [Sel]
Union(zone, Target.EntireRow, Target.EntireColumn).Name = "Sel"
If Target <> "" Then
  If IsError([Inter]) Then Set zone = Target Else Set zone = [Inter]
  Union(zone, Target).Name = "Inter"
End If
With [Sel]
  Application.ScreenUpdating = False
  .FormatConditions.Delete
  .FormatConditions.Add xlExpression, Formula1:="=OU(LIGNE()=1;COLONNE()=28)"
  .FormatConditions(1).Interior.ColorIndex = 3 'rouge
  .FormatConditions(1).Font.ColorIndex = 2 'blanc
  .FormatConditions(1).Font.Bold = True 'gras
  .FormatConditions.Add xlExpression, Formula1:="=OU(LIGNE()=2;COLONNE()=30)"
  .FormatConditions(2).Interior.ColorIndex = 5 'bleu
  .FormatConditions(2).Font.ColorIndex = 2 'blanc
  .FormatConditions(2).Font.Bold = True 'gras
  .FormatConditions.Add xlExpression, Formula1:=True
  .FormatConditions(3).Interior.ColorIndex = 1 'noir
  .FormatConditions(3).Font.ColorIndex = 2 'blanc
  .FormatConditions(3).Font.Bold = True 'gras
End With
If IsError([Inter]) Then Exit Sub 'si la zone n'existe pas
With [Inter]
  .FormatConditions.Delete '2 lignes inutiles sur Excel 2003
  .FormatConditions.Add xlExpression, Formula1:=True
  .FormatConditions(1).Font.Bold = True 'gras
  '---clignotement---
  If t Then Application.OnTime t, "Clignote", , False 'RAZ du processus s'il existe
  affiche = False
  Clignote
End With
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If IsError([Sel]) Then Exit Sub
Cancel = True
ThisWorkbook.Names("Sel").Delete
If Not IsError([Inter]) Then ThisWorkbook.Names("Inter").Delete
t = 0
Application.ScreenUpdating = False
Cells.FormatConditions.Delete
[A1:AA1].FormatConditions.Add xlCellValue, xlGreater, 1
[A1:AA1].FormatConditions(1).Font.ColorIndex = 3 'rouge
'[A1:AA1].FormatConditions(1).Font.Bold = True 'gras 'inutile...
End Sub
Voyez aussi les macros dans Module1 et ThisWorkbook.

Noter en passant que les macros ne "sélectionnent" rien du tout :cool:

Les zones sont mémorisées maintenant dans les noms définis Sel et Inter.

Ce qui permet éventuellement de continuer le processus si l'on rouvre le fichier après l'avoir fermé.

Je trouve cette solution bien plus belle (et plus agréable) que la solution qui consiste à sélectionner effectivement des lignes et des colonnes.

Edit : à cause de Application.OnTime, enregistrez d'abord le fichier joint sur le bureau.

A+
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Re,

J'avais laissé le commentaire 2 lignes inutiles sur Excel 2003.

Retirez-le car c'est faux, ces 2 lignes sont toujours nécessaires (pour les 2 méthodes).

A+
 

Chri8Ed

XLDnaute Occasionnel
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonsoir ou bonjour

Je viens de rentrer et il est bien tard pour jeter un œil critique

En attendant chapeau !

A chaque fois on croit ce fil terminé mais non, pas du tout
Et quelle évolution depuis le 1er jet

Je pense que là, on touche la perfection :eek:
 

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonjour Chri8Ed,

C'était presque parfait, mais il manquait le cas où l'on active un autre classeur puis revient au premier...

Il faut dans ThisWorkbook :

Code:
Private Sub Workbook_Activate()
Clignote
End Sub

Private Sub Workbook_Deactivate()
On Error Resume Next
Application.OnTime t, "Clignote", , False 'arrête le processus
End Sub
et la remise à zéro doit être dans Module1 :

Code:
Sub Clignote()
If IsError([Inter]) Then Exit Sub
affiche = Not affiche
[Inter].FormatConditions(1).Interior.ColorIndex = IIf(affiche, xlNone, 1)
[Inter].FormatConditions(1).Font.ColorIndex = IIf(affiche, 1, 2)
On Error Resume Next
Application.OnTime t, "Clignote", , False 'RAZ si autre instance
On Error GoTo 0
t = Now + 1 / 86400
Application.OnTime t, "Clignote"
End Sub
Edit : voir aussi le cas où le fichier étant ouvert on le rouvre (boîte de dialogue Ouvrir).

Fichier (3).

A+
 

Fichiers joints

Dernière édition:

Chri8Ed

XLDnaute Occasionnel
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonjour Job75

Après utilisation
Cela est vraiment intéressant, puisque maintenant comme auparavant on peut matérialiser plusieurs colonnes et lignes ;)

Juste une petite remarque par rapport au système d’avant
Lorsque que l’on clique sur une colonne ou une ligne, on ne peut évidement pas se tromper

En revanche dans un grand tableau, lorsque l’on clique sur une cellule en rapport avec une ligne ou une colonne, là, le risque existe, surtout si les colonnes ou les lignes sont très étroites.

Si on commet une erreur dans la 1ère sélection, on recommence et c’est tout, en revanche si on commet cette erreur dans la 3ème ou plus de sélection, il faut tout recommencer

D’où une idée, si elle est éventuellement et facilement réalisable :
Pouvoir avoir la possibilité en redouble-cliquant sur la cellule cliquée par erreur de revenir donc en arrière et de la dé-sélectionner celle-ci tout en gardant les sélections précédentes activées :confused:



mais il manquait le cas où l'on active un autre classeur puis revient au premier...
Vous voulez parler d'un classeur qui comporterait la même macro ?
 

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Re,

Encore un Like Chri8Ed, car c'est vraiment une excellente idée, mais pas facile à réaliser, je vais voir.

PS : mon fichier (3) a été fait pour le cas où l'on navigue sur plusieurs classeurs (quelconques) ouverts.

A+
 

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Re,

Vraiment superbe ce 2ème double-clic sur la même cellule pour annuler :)

La macro crée les noms définis Dercel DerSel DerInter :

Code:
If Not IsError([Dercel]) Then
  If [Dercel].Address = Target.Address Then
    Efface
    ThisWorkbook.Names.Add "Sel", [DerSel]
    ThisWorkbook.Names.Add "Inter", [DerInter]
    GoTo 1
  End If
End If
ThisWorkbook.Names.Add "Dercel", Target
ThisWorkbook.Names.Add "DerSel", [Sel]
ThisWorkbook.Names.Add "DerInter", [Inter]
Fichier (4).

A+
 

Fichiers joints

Chri8Ed

XLDnaute Occasionnel
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Re

Là, il n'a plus de mots :p

Sensationnel, mais le mot est faible

Je vais le tester en le retranscrivant sur mon tableau

Quesque l'on va bien pouvoir faire pour l'améliorer maintenant :rolleyes:
 

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonsoir Chri8Ed,

Quesque l'on va bien pouvoir faire pour l'améliorer maintenant :rolleyes:
Cette version (5).

Un double-clic sur n'importe quelle intersection l'annule.

Là j'ai un peu ramé :)

La macro crée le nom défini ToutInter, ensemble de toutes les intersections.

A+
 

Fichiers joints

Chri8Ed

XLDnaute Occasionnel
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonsoir

J’avais bien remarqué que l’on pouvait annuler que la dernière cellule double-cliquée.

Je me suis dit qu’une erreur de cellule, on la remarque tout de suite et donc cela suffisait amplement.

De plus, cela paraissait déjà compliquer d’annuler la dernière cellule activée.

Mais alors sur le cul !! :p

On peut donc annuler n’importe quelle cellule activée et cela sans tenir compte de l’ordre d’activation, surprenant :p::cool:
 

Chri8Ed

XLDnaute Occasionnel
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonjour

Les esprits se rejoignent

Je m’étais fait la même réflexion !

Car pour redouble-cliquer sur une cellule vide
Cela est évidement plus facile, si cette cellule est matérialisée.

Mais comme vous aviez, à juste titre, auparavant modifier la macro pour que ces cellules vident ne soient pas matérialisées ….

- D’un côté il est plus facile en matérialisant ces cellules de les distinguer pour redouble-cliquer
- D’un autre côté, cela attire l’attention pour rien, au détriment des cellules pleines, si on n’a pas besoin de redouble-cliquer sur ces cellules

Un bon compromis, pourrait être de les matérialiser légèrement avec fond en gris foncé et sans clignotement :confused:
 

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonjour Chri8Ed,

Eh bien voilà, il faut ajouter une condition à la MFC de la zone Inter :

Code:
.FormatConditions.Add xlExpression, Formula1:="=" & ActiveCell.Address(0, 0) & "="""""
 .FormatConditions(1).Interior.ColorIndex = 16 'gris foncé
Elle est prioritaire sur la 2ème condition qui crée le clignotement.

C'était très simple, il suffisait d'y penser :cool:

Et la macro se simplifie car la zone TouInter n'est plus nécessaire.

Cette fois je crois qu'on arrive VRAIMENT au bout :cool:

Fichier (6).

A+
 

Fichiers joints

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Re,

Mais c'est pas vrai ça !!!

La MFC sur Inter marche bien sur Excel 2003, pas sur Excel 2007 :mad:

Là ça va être difficile...

A+
 

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Re,

Alors voici la formule MFC de la 1ère condition pour toute version Excel :

Code:
  .FormatConditions.Add xlExpression, Formula1:="=INDIRECT(ADRESSE(LIGNE();COLONNE()))="""""
Fichier (7).

VRAIMENT fini.

A bientôt, sur un autre fil :)
 

Fichiers joints

Dernière édition:

Chri8Ed

XLDnaute Occasionnel
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Re

La MFC sur Inter marche bien sur Excel 2003, pas sur Excel 2007
Mais si la 1ère version fonctionne très bien sur 2007 !! (Celle du post 94)

(La 2ème aussi)
 
J

JJ1

Guest
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonsoir à tous, passionnant ce fil, BRAVO job !
Bonne soirée
 

job75

XLDnaute Barbatruc
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonjour Chri8Ed, le forum,

Salut JJ1, merci pour le compliment, heureux que ce fil t'ait intéressé :)

Il vaut quand même mieux TERMINER sur cette 1ère condition plus "propre" :

Code:
.FormatConditions.Add xlCellValue, xlEqual, "="""""
Fichier (8).

A+
 

Fichiers joints

Chri8Ed

XLDnaute Occasionnel
Re : Matérialisé une cellule aux croisement d'une ligne et d'une colonne

Bonjour

J’ai apporté quelques modifications personnelles dans les couleurs
Et quelques MFC supplémentaires …

Avec la méthode Add sous 2007, on peut dépasser les 3 conditions
J’en ai profité pour en rajouter une pour mettre la colonne hors du tableau en blanc, de façon que la ligne matérialisée s’arrête à la dernière colonne du tableau.

Je me sers de cette dernière version depuis plusieurs jours
Et sincèrement, c’est génial :cool:

Encore merci pour tout ce travail accompli
A+
 

Discussions similaires


Haut Bas