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

Chri8Ed

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

Non merci

C'était juste pour savoir
Dans le cas présent, je n'en ai pas besoin pour ce tableau

Je ne connais pas cette méthode ADD, et mes connaissances ne me permettrait sans doute pas d'aller au bout

Il y a une chose qui me rendrait grand service, si elle réalisable sans tout remettre en cause

Au lieu d'activer les colonnes en grisé, dès que l'on a cliqué sur une colonne, puis sur une ligne, est-ce qu'il serait possible d'activer ce grisé dès que l'on clique seulement sur la colonne, sans attendre de devoir cliqué sur une ligne

Une fois cette colonne grisée, il serait plus facile de localiser les cellules comportant un nombre et de choisir alors d'activer une ligne
 

job75

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

Je ne connais pas cette méthode ADD (...)
C'est pourtant celle que j'utilise pour créer les conditions des MFC dans la macro que vous avez dû lire...

Pour le reste pas de problème, je vois ça.

A+
 

job75

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

Re,

Ce qu'il y a de bien chez vous Chri8Ed c'est que vous allez très logiquement au fond des choses.

Donc encore un Like au post #62 :)

J'ai dû revoir plusieurs points de la macro, mais ça en valait la peine.

Voici donc la macro, je pense définitive :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ac%, rc&, rc1&, rc2&, cc%, cc1%, cc2%, i%, j%
Dim a1 As Range, a2 As Range, ref As Range, sel As Range
Static memsel As Range 'variable mémorisée
Set Inter = Nothing 'réinitialisation de la variable Public
If t Then Application.OnTime t, "Clignote", , False 'arrête le clignotement
t = 0
ac = Target.Areas.Count: rc = Rows.Count: cc = Columns.Count
For i = 1 To ac
  Set a1 = Target.Areas(i)
  rc1 = a1.Rows.Count: cc1 = a1.Columns.Count
  If rc1 = rc And cc1 = 1 Or rc1 = 1 And cc1 = cc Then _
    Set sel = Union(IIf(sel Is Nothing, a1, sel), a1)
  For j = i + 1 To ac
    Set a2 = Target.Areas(j)
    rc2 = a2.Rows.Count: cc2 = a2.Columns.Count
    If rc1 = 1 And cc1 = cc And rc2 = rc And cc2 = 1 Or _
      rc1 = rc And cc1 = 1 And rc2 = 1 And cc2 = cc Then
      Set ref = Intersect(a1, a2)
      If ref <> "" Then Set Inter = Union(IIf(Inter Is Nothing, ref, Inter), ref)
    End If
  Next
Next
If ac = 1 And Not memsel Is Nothing Then
  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 If
Set memsel = sel 'mémorise
If Not sel Is Nothing Then
  Application.ScreenUpdating = False
  sel.FormatConditions.Delete
  sel.FormatConditions.Add xlExpression, Formula1:="=OU(LIGNE()=1;COLONNE()=28)"
  sel.FormatConditions(1).Interior.ColorIndex = 3 'rouge
  sel.FormatConditions(1).Font.ColorIndex = 2 'blanc
  sel.FormatConditions(1).Font.Bold = True 'gras
  sel.FormatConditions.Add xlExpression, Formula1:=True
  sel.FormatConditions(2).Interior.ColorIndex = 1 'noir
  sel.FormatConditions(2).Font.ColorIndex = 2 'blanc
  sel.FormatConditions(2).Font.Bold = True 'gras
End If
If Not Inter Is Nothing Then
  Inter.FormatConditions.Delete '2 lignes inutiles sur Excel 2003
  Inter.FormatConditions.Add xlExpression, Formula1:=True
  Inter.FormatConditions(1).Font.Bold = True 'gras
  '---clignotement---
  Clignote
End If
End Sub
J'ai donné un nouveau nom au fichier joint, il correspond mieux à son contenu.

A+
 

Fichiers joints

Chri8Ed

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

Merci pour les likes .

Pour vous une couronne
car c'est super :)

Question visibilité, c'est le top
C'est vrai que cela en valait la peine,
C'eût été dommage de s'en priver :rolleyes:

Pour moi par contre pas de couronne
Je m'y suis essayé sans succès
Je pensais que en rajoutant :confused:
sel.FormatConditions.Add xlExpression, Formula2:="=OU(LIGNE()=2;COLONNE()=29)"
sel.FormatConditions(3).Interior.ColorIndex = 5
sel.FormatConditions(3).Font.ColorIndex = 2 'blanc
Mais non c'est pas ça
C'est pas grave, c'était juste pour essayer

Encore de pleins de merci
 

job75

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

Re,

Tiré de l'aide VBA sur Excel 2003 :

Add, méthode

Méthode Add telle qu'elle s'applique à l'objet FormatConditions.

Cette méthode ajoute un nouveau format conditionnel. Elle renvoie un objet FormatCondition qui représente le nouveau format conditionnel.

expression.Add(Type, Operator, Formula1, Formula2)

expression Obligatoire. Expression qui renvoie un objet FormatConditions.

Type Argument de type XlFormatConditionType obligatoire. Indique si le format conditionnel est basé sur la valeur d'une cellule ou sur une expression.

XlFormatConditionType peut être l'une des constantes XlFormatConditionType suivantes.
xlCellValue Le format conditionnel est basé sur la valeur d'une cellule.
xlExpression Le format conditionnel est basé sur une expression.

Operator Argument de type Variant facultatif. Opérateur du format conditionnel. Il peut s'agir de l'une des constantes XlFormatConditionOperator suivantes : xlBetween, xlEqual, xlGreater, xlGreaterEqual, xlLess, xlLessEqual, xlNotBetween ou xlNotEqual. Si Type a la valeur xlExpression, l'argument Operator est ignoré.

Formula1 Argument de type Variant facultatif. Valeur ou expression associées au format conditionnel. Il peut s'agir d'une valeur constante, de la valeur d'une chaîne, d'une référence de cellule ou d'une formule.

Formula2 Argument de type Variant facultatif. Valeur ou expression associées au second élément du format conditionnel lorsque l'argument Operator a la valeur xlBetween ou xlNotBetween (sinon, l'argument est ignoré). Il peut s'agir d'une valeur constante, de la valeur d'une chaîne, d'une référence de cellule ou d'une formule.
Bonne soirée.
 

Chri8Ed

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

Bonjour

Merci pour l'aide sur la méthode

En fait, j'avais mis "Formula2" au pif, pensant à "MFC N°2" :confused:

Car si je remets

Code:
  sel.FormatConditions.Add xlExpression, Formula1:="=OU(LIGNE()=2;COLONNE()=30)"
  sel.FormatConditions(1).Interior.ColorIndex = 5
  sel.FormatConditions(1).Font.ColorIndex = 2 'blanc
  sel.FormatConditions(1).Font.Bold = True 'gras
La 2ème MFC est ignorée au mieux ou au pire cela bloque tout

En fait ce que je n'ai pas trouvé, c'est comment joindre une nouvelle condition

J'ai pensé que le "FormatConditions(1)" pouvait être lié au nombre de condition
mais c'est pas ça, car je mets "FormatConditions(3)", cela plante totalement :mad:
 

job75

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

Bonjour Chri8Ed, le forum,

Sur cette macro "définitive", il y a quand même 2 compléments à ajouter :rolleyes:

1) Si l'on enregistre et ferme le fichier sur la sélection d'une ligne ou d'une colonne, pour que la MFC puisse s'effacer, mettre dans ThisWorkbook :

Code:
Private Sub Workbook_Open()
Set memsel = Feuil1.[A1] 'CodeName de la feuille
End Sub
La variable memsel est déclarée Public dans Module1.

2) Pour permettre le Couper/Copier/Coller d'une ligne ou d'une colonne :

Code:
If Application.CutCopyMode Then Exit Sub 'pour le Couper/Copier/Coller
au début de la macro.

Fichier (2)

A+
 

Fichiers joints

job75

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

Re,

N'oubliez pas mon post #68.

Concernant votre post #67, je pensais que vous y arriveriez seul :

Code:
If Not sel Is Nothing Then
  Application.ScreenUpdating = False
  sel.FormatConditions.Delete
  sel.FormatConditions.Add xlExpression, Formula1:="=OU(LIGNE()=1;COLONNE()=28)"
  sel.FormatConditions(1).Interior.ColorIndex = 3 'rouge
  sel.FormatConditions(1).Font.ColorIndex = 2 'blanc
  sel.FormatConditions(1).Font.Bold = True 'gras
  sel.FormatConditions.Add xlExpression, Formula1:="=OU(LIGNE()=2;COLONNE()=30)"
  sel.FormatConditions(2).Interior.ColorIndex = 5 'bleu
  sel.FormatConditions(2).Font.ColorIndex = 2 'blanc
  sel.FormatConditions(2).Font.Bold = True 'gras
  sel.FormatConditions.Add xlExpression, Formula1:=True
  sel.FormatConditions(3).Interior.ColorIndex = 1 'noir
  sel.FormatConditions(3).Font.ColorIndex = 2 'blanc
  sel.FormatConditions(3).Font.Bold = True 'gras
End If
L'ordre des conditions permet de les hiérarchiser.

Sur Excel 2003 on ne peut pas créer plus de 3 conditions MFC.

Fichier (3).

A+
 

Fichiers joints

Chri8Ed

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

Re,

Je ne comprends pas c'est ce j'avais mis dès le départ
et cela plantait la macro, je me retrouvais en plus avec des cellules rouges et bleues un peu partout

J'ai du faire une erreur, mais laquelle :confused::confused:

J'ai donc chercher ailleurs, alors que j'étais sur la bonne piste :mad:

Merci encore pour ce coup de main
Quand on ne maitrise pas, la moindre erreur de frappe c'est galère !
D'où la chance d'avoir une aide si dévouée

Merci
 

Chri8Ed

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

Re,

Concernant votre post 68

Je ne saisi pas bien sa portée

1) Si l'on enregistre et ferme le fichier sur la sélection d'une ligne ou d'une colonne, pour que la MFC puisse s'effacer, mettre dans ThisWorkbook :
J'ai bien remarqué que si l'on ferme et sauvegarde le tableau avec des colonnes et lignes matérialisées, on les retrouve présentes au chargement suivant

Elles disparaissent dès que l'on active une quelconque cellule (bien que parfois il faut activer 2 ou 3 cellules avant qu'elles disparaissent)

Je n'ai pas trouvé cela très génant

Mais si c'est bien la portée de cette modification ?, cela reste de même avec cette modification !

Ou peut-être que je n'ai pas bien compris ?

Pour permettre le Couper/Copier/Coller d'une ligne ou d'une colonne
Avec ou sans cette correction, je peux très bien copier/couper/coller une ligne ou une colonne.
 

job75

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

Re,

La fatigue du matin ou Excel 2010 :confused:

Essayez donc avec mon fichier (1) les 2 manips :

- sélectionner une ligne, enregistrer, fermer, rouvrir le fichier : la MFC ne s'efface plus

- sélectionner une ligne, Copier, sélectionner n'importe quoi => Coller impossible.

Edit : testé sur Excel 2010 : le Coller reste possible.

Donc sur Excel 2010 on peut se passer de If Application.CutCopyMode...

Pas sur Excel 2003.

A+
 
Dernière édition:

thri

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

Bonjour à vous tous,
Juste un fichier que m'a transmit Gaetan Mourmant c'est lui l'auteur, la macro s'appelle REPERE, vous devez peut-être la connaître, voir la macro en feuil1. Je me permets de vous la soumettre, elle est dispo sur son site.
A+ thri
 

Fichiers joints

job75

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

Bonjour thri,

Je vais faire une remarque générale - désolé, elle s'applique aussi à la solution d'Hasco :)

Vous ne coyez pas qu'avoir cet effet sur une feuille chaque fois qu'on sélectionne une cellule c'est particulièrement agaçant ???

Il vaut mieux une macro qui fonctionne quand on sélectionne une ligne ou une colonne entière.

C'est quand même moins fréquent :cool:

A+
 
G

Guest

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

Re,

Arf...Job:D, celui que je sens agacé, ne serais-ce pas toi?:D T'inquiète, je suis seulement aller jusqu'au bout de ma proposition de départ et répondu à une question la concernant. Certes un peu tard, je te l'accorde.

Pour ma part je n'utilise pas ce genre de moyen, perturbant plus qu'autre chose. Il y a tellement d'autre façon de mettre en valeur des données dans excel.

A+++
 

Chri8Ed

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

Re, Job75

Concernant les manips
Je ne suis pas sûr d'avoir bien compris, je fait donc le détail :

Moi je suis sous 2007 et je n'ai pas 2010

- sélectionner une ligne, enregistrer, fermer, rouvrir le fichier : la MFC ne s'efface plus
C'est vrai la MFC ne s'efface pas, mais elle ne s'effaçait pas non plus avant :confused:

- sélectionner une ligne, Copier, sélectionner n'importe quoi => Coller impossible.
Le coller est et a toujours été possible, maintenant et avec les versions antérieures
sauf peut-être avec les premières, car c'est vrai que cela a pas mal évolué ! :eek:
 

thri

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

Re,
Certainement, je suis d'accord mais tu peux changer la couleur dans la macro, le rouge ça fait un peu corrida.....et le style de trait aussi A+
 

Chri8Ed

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

Bonjour Thri, Bonjour Hasco (Dont je n'ai pas encore approfondi sa dernière version)

et bonjour à tous

Je rejoins un peu Job dans son analyse, c'est un peu logique, puisque c'est que je demandais dès le départ.

Cependant, je trouve que dans certains cas, cela peut-être intéressant.
Le principe d'activer une colonne et une ligne a partir d'une cellule
Comme les propositions de Hasco, ou comme celle de Gaetan Mourmant proposé par Thri
pourraient avoir leur avantage, mais il faudrait alors que cette macro ne soit pas permanente

Il faudrait que la procédure soit appelée en cliquant sur la cellule conjointement avec la touche Alt par exemple
 

job75

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

Re,

Appuyer sur la touche Alt ne crée pas d'événement.

Mieux vaut un bon vieux double-clic :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Union(Target.EntireRow, Target.EntireColumn).Select
Target.Activate
End Sub
Fichier joint.

A+
 

Fichiers joints

Chri8Ed

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

Bonsoir

Alors là !
Une idée, et hop, aussitôt fait :p

C’est bien, mais il est dommage que l’on perde la technique d’avant
Car elle bien ses avantages
Notamment la possibilité de matérialiser plusieurs lignes et plusieurs colonnes

L’idéale serait de pouvoir combiner les 2 techniques :rolleyes:
 

Discussions similaires


Haut Bas