[résolu] MEFC en fonction changement date

Brigitte

XLDnaute Barbatruc
Bonjour,

Comment faire AVEC UNE MEFC (pas une macro svp) pour que dans ma colonne A (dates) la couleur du fond alterne dès que la date change sur la ligne du dessous... etc...

Ex : j'ai 3 lignes avec une date : je les mets en vert clair
au dessous 5 lignes avec une autre date : je les voudrais en jaune pâle
au dessous 4 lignes avec une nouvelle date : de nouveau vert clair

pour améliorer la scission... et le changement de date.

Je vous joins le petit fichier. Je connais = MOD(LIGNE();2)=0 pour alterner une ligne sur deux. Mais je ne parviens pas à faire la formule pour ce qu'il me faut.

Merci bcp d'avance.
 

Pièces jointes

  • MEFC lignes.xls
    14 KB · Affichages: 55
Dernière édition:

Brigitte

XLDnaute Barbatruc
Re : [résolu] MEFC en fonction changement date

Re, re,

R@chid... c'est marrant ta solution :

Bonsoir @ tous,
une variante, avec une petite plage intermédiaire...
Amicalement

Figure toi que je bosse sur ce fichier depuis qq semaines et qu'on a eu besoin (avec Monique) de faire une feuille avec ces fameuses dates sans doublon, on pourrait donc utiliser ta formule.

Je vais essayer pour le fun la semaine prochaine (je suis pas au boulot jusque mardi)... car le fichier n'étant plus trop en ma possession, ca m'embête de le redemander à ma collègue pour qui je l'ai réalisé...

Merci en tout cas, super ta solution. La colonne intermédiaire pour faire la liste étant faite, c'est peut être jouable.
 

job75

XLDnaute Barbatruc
Re : [résolu] MEFC en fonction changement date

Bonjour Brigitte, le fil,

Vois cette macro dans le code de la feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'il faut titre en A1
If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
Dim t1, t2, i As Long, mem As Boolean
t1 = Range("A1", Cells(Rows.Count, 1).End(xlUp))
t2 = t1
On Error Resume Next 'si le tableau n'a qu'un élément
For i = 2 To UBound(t1)
  If t1(i, 1) <> t1(i - 1, 1) Then mem = Not mem
  t2(i, 1) = mem
Next
ThisWorkbook.Names.Add "Test", t2 'nom défini sur matrice
End Sub
Toute modification en colonne A crée une matrice de VRAI ou FAUX mémorisée dans le nom défini Test.

Avec des tableaux l'exécution est très rapide.

La matrice est ensuite utilisée dans les formules de la MFC.

Fichier joint.

Edit : testé sur 60 000 lignes => 0,33 seconde sur Excel 2003 et 0,11 seconde sur Excel 2010.

Sur Excel 2003, la durée du calcul est essentiellement celle de la mise à jour de la MFC, pour le vérifier supprimer la MFC.

Je joins le fichier si quelqu'un veut tester.

A+
 

Pièces jointes

  • MEFC lignes par VBA(1).xls
    38 KB · Affichages: 36
  • MEFC 60000 lignes par VBA(1).zip
    362.4 KB · Affichages: 17
Dernière édition:

Brigitte

XLDnaute Barbatruc
Re : [résolu] MEFC en fonction changement date

Bonjour,

Et ben tandis que je m'affaire à dorloter mes petits macarons au four, je vois que Gérard a fait encore des prouesses... Je vais regarder ça même si je vais rester sur la solution de Bruno qui finalement me va pas mal.

Je viens de faire ma curieuse et d'ouvrir un des fichiers... ca marche impecc ! et ca prend pas de temps...

Merci encore, ce fil sera super complet, un vrai petit joyau qui j'espère aidera ceux qui ont besoin de la même chose.

Vous êtes des anges !

Bisous pour la peine !
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : [résolu] MEFC en fonction changement date

Bonjour à tous,

Un complément à la solution VBA.

On aura peut-être remarqué que quand on effectue un tri sur la colonne A la MFC ne se met pas à jour.

En effet le tri ne crée pas l'événement Change.

Par contre il crée l'événement Calculate, alors cette macro :

Code:
Private Sub Worksheet_Calculate()
'il faut un titre en A1
Dim t1, t2, i As Long, mem As Boolean
t1 = Range("A1", Cells(Rows.Count, 1).End(xlUp))
t2 = t1
On Error Resume Next 'si le tableau n'a qu'un élément
For i = 2 To UBound(t1)
  If t1(i, 1) <> t1(i - 1, 1) Then mem = Not mem
  t2(i, 1) = mem
Next
Application.EnableEvents = False
ThisWorkbook.Names.Add "Test", t2 'nom défini sur matrice
Application.EnableEvents = True
End Sub
La macro se déclenche car il y a la fonction Volatile MAINTENANT() en C2.

Fichiers (2).

Bon dimanche et A+
 

Pièces jointes

  • MEFC lignes par VBA(2).xls
    38.5 KB · Affichages: 30
  • MEFC 60000 lignes par VBA(2).zip
    362.2 KB · Affichages: 22

Statistiques des forums

Discussions
312 451
Messages
2 088 524
Membres
103 877
dernier inscrit
imen.chaaba