Remplissage (couleur) d'une cellule non détecté par Excel

Bonjour,

J'ai des tableaux dans lesquels je colorise automatiquement des cellules avec cette couleur : RGB(160, 224, 255).

Je demande ensuite de déverrouiller les cellules du tableaux qui n'ont pas de couleur de fond :

    Dim Plg As Range
    Dim Cel As Range, pl As Range

    For Each Plg In .Range("X13:AE14, A29:AE63, A65:AE99, A101:AE105").Areas
        For Each Cel In Plg
            If Cel.Interior.ColorIndex = xlNone Then
                If pl Is Nothing Then Set pl = Cel Else Set pl = Union(pl, Cel)
            End If
        Next Cel
    Next Plg

    .Unprotect password
    If Not pl Is Nothing Then pl.Locked = False
    .Protect password

C'est ici que ça coince : quand je lui demande de sélectionner cette plage de cellules sans couleur (pl.Select), toutes les cellules sans couleur sont sélectionnées, mais aussi certaines cellules avec la couleur RGB(160, 224, 255), mais pas toutes, c'est très étrange.

J'ai une piste : quand je vais dans le Format de cellule des cellules avec la couleur RGB, certaines ont "Aucun Remplissage" (et n'affichent du coup pas la couleur bleue dans l'aperçu) alors qu'elles sont clairement en bleu !

Quelqu'un sait pourquoi de temps en temps Excel détecte la couleur de la cellule et parfois non ?

Merci !

Bonjour TRNX

cette plage possède t elle des mise en forme conditionnelle?

Si c'est le cas cela parait normal

Cdt Toukoul

Bonjour Toukoul,

j'ai oublié de le préciser mais non il n'y a même pas de MFC

TRNX

J'ai essayé avec ça et cela marche bien

Regarde si cela fonctionne chez toi

If Cel.Interior.ColorIndex = xlColorIndexNone Then

Cdt

Toukoul,

non ça ne change rien,

pour Excel ces cellules n'ont toujours pas de couleur de fond...

J'ai l'impression que c'est la coloration via VBA qui ne passe pas très bien : quand je mets une couleur de fond manuellement ça marche très bien.

Mais je ne peux évidemment pas faire manuellement, ça doit être via VBA absolument

(j'ai essayé dans un classeur vierge et ça marchait très bien donc l'erreur doit être ailleurs sûrement)

@Toukoul

j'ai trouvé, ça ne reconnaît pas la couleur quand les cellules sont fusionnées :

techniquement la couleur n'est attribuée qu'à la première cellule de la case contenant plusieurs cellules.

Pourtant je croyais que le .Areas dans le code réglait le problème

Quelqu'un sait comment attribuer la couleur à toutes les cellules d'une case comprenant plusieurs cellules SVP?

Merci encore

J'ai trouvé,

il fallait rajouter le MergeArea, comme ceci :

pl.MergeArea.Interior.Color = RGB(160, 224, 255)

Merci pour ton aide en tout cas Toukoul.

En fait le

pl.MergeArea.Interior.Color = RGB()

ne marche que quand la plage contient une seule cellule...

Quelqu'un sait comment colorer toutes les cellules fusionnées quand la plage contient plusieurs cellules SVP?

Merci

Pour colorier une plage fusionnée il faut la sélectionner et faire ceci

Range("Plage à colorier").Select

With Selection.Interior

.Pattern = xlSolid

.PatternColorIndex = xlAutomatic

.Color = 16769184

.TintAndShade = 0

.PatternTintAndShade = 0

End With

La couleur 16769184 est votre couleur

Si vous enlevez la fusion des cellules toutes sont colorées

cdt

Merci Toukoul pour la réponse mais je voudrais ne pas sélectionner justement.

Il doit y avoir un moyen de colorer toutes les cellules des cellules fusionnées d'une plage je pense, et ce sans sélectionner

Je comptais sur le .MergeArea mais comme je l'ai dit ça ne marche que si la plage ne contient qu'une seule cellule...

Est-ce que avec le Offset(première_cellule, dernière_cellule) ça pourrait marcher ?

Merci encore pour l'aide

Pourtant en arrêtant le défilement de l'écran on peut sélectionner, colorer puis remettre l écran actif avant de fermer

Dim cellule

For Each cellule In Range("A1:J50") 'adapter plage cellule

If Range(cellule.Address).MergeCells Then

Range(cellule.Address).Select

With Selection.Interior

.Pattern = xlSolid

.PatternColorIndex = xlAutomatic

.Color = 65535 'jaune

.TintAndShade = 0

.PatternTintAndShade = 0

End With

End If

Next cellule

oui, j'insiste tant pis! !

Bonjour Toukoul,

Je pense que je vais faire comme ça du coup, en rajoutant le :

Application.ScreenUpdating = False

(puis True)

merci pour l'aide.

Rechercher des sujets similaires à "remplissage couleur detecte"