suite même couleur

perrmi

XLDnaute Occasionnel
bonjour les As d'excel
j'ai un tableau de 70 chiffres
certaines cellules sont colorées (importe la couleur)
j'aimerais extraire de ce tableau les chiffres dans les cellules colorées qui se suivent .
voir fichier joint
merci a tous et toutes
perrmi
 

Pièces jointes

  • suite.xlsx
    10 KB · Affichages: 21

job75

XLDnaute Barbatruc
Bonsoir perrmi, JHA,

Plutôt qu'extraire il vaut mieux colorer les cellules par une MFC (noire) utilisant cette fonction VBA :
Code:
Function Coloré(c As Range) As Boolean
Coloré = c.Interior.ColorIndex <> xlNone And c.Interior.ColorIndex <> 2
End Function
Edit : ceci est plus rapide :
Code:
Function Coloré(c As Range) As Boolean
If c.Interior.Color <> 16777215 Then Coloré = True
End Function
Le code doit être placé impérativement dans un module standard.

Fichier .xlsm joint.

A+
 

Pièces jointes

  • suite(1).xlsm
    22.6 KB · Affichages: 23
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Un phénomène que je n'avais pas remarqué (chez moi sur Excel 2013).

Sur le fichier du post précédent entrez en N11 la formule =Coloré(F8)

Elle renvoie VRAI c'est normal.

Maintenant donnez à F8 la couleur "blanche" ou "Aucun remplissage".

La cellule N11 ne se modifie pas alors que la MFC change la couleur en F8.

A+
 

eriiic

XLDnaute Barbatruc
Bonjour,

Pour la cellule ça parait normal. Un changement de couleur n'entraine pas de Calculate, de plus ta fonction n'est pas volatile.
Il faudrait ajouter à ta fonction Application.Volatile, et faire F9 (ou valider une cellule) pour qu'elle se mette à jour.
Ca, je suppose que tu le savais.

Quant à la MFC on pourrait la qualifier de super-volatile ;-) elle se met en place rien qu'en balayant les couleurs avec la souris, sans même valider. Pour avoir le rendu en temps réel
eric
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour eriiiic, le forum,
Ca, je suppose que tu le savais.
Bien sûr et au départ j'avais mis Application.Volatile mais en testant j'ai vu que c'était inutile.
Quant à la MFC on pourrait la qualifier de super-volatile ;-) elle se met en place rien qu'en balayant les couleurs avec la souris
Là c'est la propriété de la palette de couleur qui modifie la couleur de la cellule au survol de la souris.

Bon week-end.
 

job75

XLDnaute Barbatruc
Re,

La fonction du post #3 ne répond pas vraiment au problème posé.

Car elle traite les cellules adjacentes d'une même ligne alors que perrmi parle de chiffres qui se suivent.

Alors voyez ce fichier (2) avec cette nouvelle fonction :
Code:
Function SuiteColorée(c As Range, P As Range) As Boolean
If c.Interior.Color = 16777215 Then Exit Function
Dim n&: n = c
For Each c In P
    If c.Interior.Color <> 16777215 And (c = n - 1 Or c = n + 1) _
        Then SuiteColorée = True: Exit Function
Next
End Function
Pour tester j'ai créé le tableau M5:V11 qu'on remplit de nombres aléatoires avec cette macro :
Code:
Sub Alea()
'se lance par les touches Ctrl+R
Dim t, ncol%, i&, j%
With Feuil1.[M5:V11] 'plage à adapter
    If .Count = 1 Then Exit Sub
    Randomize
    t = .Value: ncol = UBound(t, 2)
    For i = 1 To UBound(t)
        For j = 1 To ncol
            t(i, j) = Int(1 + 99 * Rnd) 'nombres entiers entre 1 et 99
    Next j, i
    .Value = t
End With
End Sub
Nota : si l'on entre la formule =ALEA.ENTRE.BORNES(1;99) dans la plage la MFC ne va pas *.

* Edit : la MFC va bien si l'on rend la fonction volatile, fichier (2 bis).

A+
 

Pièces jointes

  • suite(2).xlsm
    26.6 KB · Affichages: 27
  • suite(2 bis).xlsm
    25.9 KB · Affichages: 31
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Pour mieux comprendre ce qui se passe j'ai exécuté cette macro :
Code:
Sub TestMFC()
[F8].Interior.Color = 16777215
End Sub
- sur les fichiers (1) et (2) - fonction non volatile - la MFC n'efface pas la couleur noire en F8

- sur le fichier (2 bis) - fonction volatile - la MFC efface bien la couleur noire.

Quand la fonction n'est pas volatile j'en conclus que c'est la palette de couleur qui force le recalcul de la MFC.

A+
 

eriiic

XLDnaute Barbatruc
Je pense que oui, nécessaire pour la visualisation en direct de l'effet de la MFC.
De la même façon qu'une fonction non volatile sera ré-évaluée même en l'absence de modification de ses antécédents si tu la complètes dans une formule par une fonction volatile.
ex: =mafonction(A1)+alea()*0
rend mafonction() volatile (dans cette formule). Nécessaire car excel n'a que le résultat global de stocké, il faut ré-évaluer tous les éléments.
eric
 

Discussions similaires

Réponses
3
Affichages
422
Réponses
10
Affichages
658

Statistiques des forums

Discussions
314 117
Messages
2 106 068
Membres
109 486
dernier inscrit
YGrec