XL 2013 Résolu par djidji59430, et Job75 : Recopier MFC sur autres cellules

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

J'ai un nouveau souci que je n'avais jamais résolu mais comme un petit nombre de cellules étaient concerné, je faisais ma copie de mise en forme cellule par cellule.

Aujourd'hui, dans mon fichier de travail, j'ai 3 fichiers de plus de 10000 lignes ......
Je ne sais pas trop expliquer mon souci mais je pense que la photo ci-dessous devrait être explicite :
Sans titre.jpg
En revanche, si j'ajoute une ligne (copier/coller), ça marche.
Mon souci est uniquement pour reproduire le format MFC sur lignes ou cellules existantes.


Si quelqu'un a la solution, ce serait super.
Avec mes remerciements,
Je vous souhaite à toutes et à tous une belle journée,
Amicalement,
Lionel,
 

job75

XLDnaute Barbatruc
Bonjour Lionel, salut djidji59430,

Tu es sous Excel 2010 et ton exemple laisse supposer que tu veux appliquer la MFC sur une seule cellule.

Il serait étonnant que ce soit le cas.

Voici une solution VBA qui fonctionne quelle que soit la version Excel utilisée :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sel As Range
Application.ScreenUpdating = False
ActiveCell.Activate 'si un objet est sélectionné
Set sel = Selection 'mémorise
With Intersect(Me.UsedRange.EntireRow, [V:V]) 'à adapter
  .Select 'nécessaire si version Excel antérieure à 2007
  .FormatConditions.Delete 'RAZ
  .FormatConditions.Add xlExpression, Formula1:="=" & ActiveCell(1, -1).Address(0, 0) & "="""""
  .FormatConditions(1).Interior.ColorIndex = 3 'rouge
End With
sel.Select
End Sub
Si nécessaire on peut remplacer Me.UsedRange par [A1].CurrentRegion ou autre.

A+
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour Job75,

Merci d'être encore présent :)
Je garde ta macro qui fonctionne super et qui est bien plus rapide que de le faire "à la mano" LOL

Toutefois, pour te répondre et aussi à djidji59430, Je me suis mal expliqué.
Mon souci n'est pas que ça ne marchait pas mais plutôt l'affichage de la mfc sur n'importe quelle cellule de V7 à V1919.

En effet, dans toutes les cellules il y a :
Formule =T7="" s'applique à =$V7:$V1919

et moi "têtu que je suis", je voudrais voir les mfc comme ça LOL :
cellule V1000
Formule =T1000="" s'applique à =$V1000
cellule V1919
Formule =T1919="" s'applique à =$V1919
c'est pas possible ?
:confused:

PS : en fait, j'ai plusieurs ordi avec chacun office 2010, 2013 et 2016.
 

Fichiers joints

Dernière édition:

djidji59430

XLDnaute Accro
Quand tu ecris $T ( le $ est trés important), ça veut dire que la MFC va s'appliquer à toute la colonne T et le 7 détermine le début de la plage ou elle va s'appliquer.
C'est donc normal que tu ne vois pas $t1000="", par exemple, vu que c'est implicite puisque 1000 est dans la plage 7==> 1919 que tu as définie.

Crdmt
 

job75

XLDnaute Barbatruc
Re,

Excel qui n'est pas bête regroupe sur une même plage les MFC de même formule.

Pour ma macro, dans le cas où l'on réduit la hauteur du tableau, il vaut mieux :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sel As Range
Application.ScreenUpdating = False
ActiveCell.Activate 'si un objet est sélectionné
Set sel = Selection 'mémorise
[V:V].FormatConditions.Delete 'RAZ
With Intersect(Me.UsedRange.EntireRow, [V:V]) 'à adapter
  .Select 'nécessaire si version Excel antérieure à 2007
  .FormatConditions.Add xlExpression, Formula1:="=" & ActiveCell(1, -1).Address(0, 0) & "="""""
  .FormatConditions(1).Interior.ColorIndex = 3 'rouge
End With
sel.Select
End Sub
@djidji59430 : le $ n'est pas du tout nécessaire devant le "T" puisqu'on ne traite qu'une colonne.

A+
 

job75

XLDnaute Barbatruc
Re,

Contrairement à ce que je disais Excel est bête... Vois cette macro :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sel As Range, c As Range
Application.ScreenUpdating = False
ActiveCell.Activate 'si un objet est sélectionné
Set sel = Selection 'mémorise
[V:V].FormatConditions.Delete 'RAZ
For Each c In Intersect(Me.UsedRange.EntireRow, [V:V]) 'à adapter
  c.Select 'nécessaire si version Excel antérieure à 2007
  c.FormatConditions.Add xlExpression, Formula1:="=" & ActiveCell(1, -1).Address(0, 0) & "="""""
  c.FormatConditions(1).Interior.ColorIndex = 3 'rouge
Next
sel.Select
End Sub
Ici il y a une MFC pour chaque cellule et pour les créer ça prend beaucoup de temps !!!

A+
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bon sang de Bon de d'là LOL
Tu n'abandonnes jamais (comme moi) super.
C'est exactement ce que je voulais faire, même si c'est quelques secondes de plus.
Vraiment MERCI JOB.
Amicalement,
Lionel,
 

job75

XLDnaute Barbatruc
Re,

Quelques secondes de plus ?

Sur un tableau de 10 000 lignes, avec Win 10 - Excel 2013 :

- macro du post #7 => 0,005 seconde

- macro du post #9 => 37 secondes... pour chaque modification du tableau...

A+
 
Dernière édition:

arthour973

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

J'aurais aimé inclure ton code dans mon fichier de travail mais il y a tellement de codes que je crains de créer des interférences en l'incluant dans le code d'une feuille.

J'ai donc tenté de le modifier pour créer un simple module exécutable en cliquant sur un simple bouton.
Je n'ai pas réussi.
Est-ce possible de modifier ton code pour le mettre dans un simple module ?

Avec mes remerciements,
Amicalement,
Lionel,
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonjour Lionel,

Bah il suffit de modifier la 1ère ligne de la macro et de remplace Me par ActiveSheet.

Mais c'est mieux de conserver la macro au même endroit en modifiant seulement la 1ère ligne :
Code:
Private Sub CommandButton1_Click()
A+
 

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonjour Job, tjrs là ... Merci ;)
Evidemment ça semble simple et j'avais cherché sans savoir.
Merci, je vais faire dès que j'ai un moment et je te dis.
Amicalement,
Lionel,
 

Si...

XLDnaute Barbatruc
Bonjour

Macro pour macro, pourquoi ne pas se dispenser de MFC qui peuvent poser des problèmes de lenteur s’il y en a des quantités dans le classeur (qui me semble bien développé) ?

Ce qui donne (en restant fidèle à l’outil Tableau)

VB:
Sub Bouton1_Cliquer()
  Application.ScreenUpdating = 0
  For Each R In [Tbo]
   R.Interior.Color = IIf(R(1, -1) = "", [Tbo].Rows(1).Interior.Color, -4142)
  Next
End Sub
 

Fichiers joints

arthour973

XLDnaute Barbatruc
Supporter XLD
Bonsoir Si,

J'ai "énormément" de mfc dans mon fichier de travail et je me pose effectivement la question.
Je vais voir ça ce WE :)
Merci encore pour cette piste.
Amicalement,
Lionel,
 

Discussions similaires


Haut Bas