récupération "en bloc" des indices de couleur de fonds d'une plage de cellules

  • Initiateur de la discussion Initiateur de la discussion luigiF
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

luigiF

XLDnaute Junior
Salut à vous,

quelqu'un saurait-il s'il existe un moyen rapide pour récupérer dans un tableau VBA les indices de couleur de fonds d'une plage de cellules ?

Par "moyen rapide", j'entends un moyen qui permette de récupérer ces indices "en bloc", comme on peut le faire pour les valeurs, sans passer une boucle du type :

Code:
For li = 1 To UBound(TabColor, 1) 
    For co = 1 To UBound(TabColor, 2)
        TabColor(li, co) = MyRange.Cells(li, co).Interior.ColorIndex
    Next co
Next li

Idéalement, j'aimerais même récupérer "le plus vite possible" les valeurs et les indices de couleur de fonds dans un même tableau VBA à 3 dimensions, de sorte que :

Code:
TabColor(li, co, 1) = MyRange.Cells(li, co).value
TabColor(li, co, 2) = MyRange.Cells(li, co).Interior.ColorIndex

Merci pour vos suggestions,

Luigi
 
Re : récupération "en bloc" des indices de couleur de fonds d'une plage de cellules

Bonsoir luigiF.


Je m'autorise un petit "up" ...
Aucune suggestion ?
Luigi
Ouaip. Pas bézef de réponse...
Je pense qu'il n'y a pas d'autre solution qu'une boucle, mais j'espère me tromper.
En attendant mieux, une fonction qui traite une plage de 520 000 cellules en 90 secondes (environ).
VB:
Function Val_ICI(Plg As Range)
Dim i&, j&, l&, c&
Dim ValeurFondCellule()
  l = Plg.Rows.Count
  c = Plg.Columns.Count
  ReDim ValeurFondCellule(1 To l, 1 To c)
  For i = 1 To l: For j = 1 To c
    ValeurFondCellule(i, j) = Plg(i, j).Interior.ColorIndex
  Next j, i
  Val_ICI = Array(Plg.Value, ValeurFondCellule)
'Val_ICI(0)(i, j) est la valeur de la cellule en ligne i et colonne j de la plage Plg passée en argument.
'Val_ICI(1)(i, j) est l'index de couleur de fond de la cellule en ligne i et colonne j de la plage Plg passée en argument.
End Function


Bonne nuit.


ROGER2327
#6700


Lundi 9 Tatane 140 (Saints Ecrase - Merdre, sectateurs - fête Suprême Quarte)
4 Thermidor An CCXXI, 9,2745h - ivraie
2013-W30-1T22:15:32Z
 
Dernière édition:
Re : récupération "en bloc" des indices de couleur de fonds d'une plage de cellules

Bonjour ROGER2327 et merci pour ta réponse.

Je pensais qu'Excel 2007/2010 offrirait peut-être une astuce permettant d'éviter le recours à une boucle car je constate qu'un filtre par couleur sur une colonne entière (donc sur plus d'un million de cellule) s'effectue "relativement rapidement" ...

En attendant ... je boucle !

Merci encore et à bientôt,

Luigi
 
Re : récupération "en bloc" des indices de couleur de fonds d'une plage de cellules

Bonjour kjin et merci pour cette piste.

Il est vrai que je pourrai ainsi récupérer très rapidement "en bloc" les index de couleurs, ce qui est un premier point positif.

Mais cela implique, à moins que quelque-chose m’échappe dans l’utilisation de lire.cellule, que je stocke en permanence les index de couleur non pas dans un tableau VBA, mais dans un range (que je pourrais éventuellement masquer dans une feuille cachée) et cela va doubler la taille de mon fichier.

Penses-tu qu'il existe un moyen pour utiliser lire.cellule non pas avec une plage mais directement avec un tableau VBA ?

Merci encore,

Luigi
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
776
Réponses
2
Affichages
847
Retour