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

Usine à gaz

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+
 

Usine à gaz

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.
 

Pièces jointes

  • Test mfc.xlsm
    176.6 KB · Affichages: 28
Dernière édition:

djidji59430

XLDnaute Barbatruc
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+
 

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:

Usine à gaz

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,
 

Pièces jointes

  • Test macro mfc Job75.xlsm
    208.2 KB · Affichages: 21

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+
 

Discussions similaires

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 822
dernier inscrit
holale