identifier un type de remplissage de cellule

knaekes

XLDnaute Occasionnel
bonjour,

je souhaite testé le remplissage d'une cellule et identifier à quel type de remplissage témoin celui-ci correspond.

Une solution consisterait à reproduire les remplissages de cellule en enregistrant la macro, puis de tester chaque paramètre.

Existe-il une solution plus "rapide" et moins "lourde" ?

merci

ci-joint mon fichier exemple
 

Pièces jointes

  • remplissage cellules - Copie.xlsm
    13.3 KB · Affichages: 59
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : identifier un type de remplissage de cellule

Bonjour,

pas 2010, mais sous 2003 tu peux utiliser la méthode "Find" en utilisant également la propriété "FindFormat", dans 'éditeur vba, curseur sur l'un de ses mots et touche de fonction F1 devrait t'en dire plus....

bonne journée
@+
 

JNP

XLDnaute Barbatruc
Re : identifier un type de remplissage de cellule

Bonjour le fil :),
Dans quel sens souhaites-tu aller :rolleyes: ?
Ok définit le style de ta cellule test, ou ta cellule test définit où doit se trouver le ok ;) ?
A te lire :cool:
 

JNP

XLDnaute Barbatruc
Re : identifier un type de remplissage de cellule

Re :),
Pas évident de comparer des dégradés, motifs, etc. :rolleyes:...
Une petite fonction personnalisée
Code:
Function CompareFond(C1 As Range, C2 As Range) As Boolean
Dim I As Integer
Application.Volatile
With C1.Interior
    If .Pattern <> C2.Interior.Pattern Then Exit Function
    If .Pattern <> xlNone Then
        If .Pattern = xlSolid Then
            If .Color <> C2.Interior.Color Then Exit Function
        ElseIf .Pattern = xlPatternLinearGradient Then
            If .Gradient.Degree <> C2.Interior.Gradient.Degree Then Exit Function
            If .Gradient.ColorStops.Count <> C2.Interior.Gradient.ColorStops.Count Then Exit Function
            For I = 1 To .Gradient.ColorStops.Count
                If .Gradient.ColorStops.Item(I).Color <> C2.Interior.Gradient.ColorStops.Item(I).Color Then Exit Function
            Next I
        ElseIf .Pattern = xlPatternRectangularGradient Then
            If .Gradient.ColorStops.Count <> C2.Interior.Gradient.ColorStops.Count Then Exit Function
            For I = 1 To .Gradient.ColorStops.Count
                If .Gradient.ColorStops.Item(I).Color <> C2.Interior.Gradient.ColorStops.Item(I).Color Then Exit Function
            Next I
            If .Gradient.RectangleLeft <> C2.Interior.Gradient.RectangleLeft Then Exit Function
            If .Gradient.RectangleRight <> C2.Interior.Gradient.RectangleRight Then Exit Function
            If .Gradient.RectangleTop <> C2.Interior.Gradient.RectangleTop Then Exit Function
            If .Gradient.RectangleBottom <> C2.Interior.Gradient.RectangleBottom Then Exit Function
        Else
            If .Color <> C2.Interior.Color Then Exit Function
        End If
    End If
End With
CompareFond = True
End Function
je pense que je n'ai pas oublié de cas de figure :p...
Par contre, la modification d'un format de cellule n'est pas une modification de cellule, donc si tu changes directement la mise en forme de la cellule, il faut un F9 pour que les fonctions se recalculent :eek:...
Bonne journée :cool:
 

Pièces jointes

  • remplissage cellules - Copie(1).xlsm
    19.7 KB · Affichages: 44

knaekes

XLDnaute Occasionnel
Re : identifier un type de remplissage de cellule

Super ! merci, pour la réponse, ça fonctionne dans le cas de l'exemple.
Il ne me reste plus qu'à comprendre la macro puis à l'adapter à mon cas de figure.

Bonne après-midi et merci
 

JNP

XLDnaute Barbatruc
Re : identifier un type de remplissage de cellule

Re :),
Il ne me reste plus qu'à comprendre la macro puis à l'adapter à mon cas de figure.
En passant par une fonction, je procède par élimination :
si le Pattern n'est pas identique, je sors
si c'est transparent, je passe à la fin de la fonction
si c'est du Solid, je compare juste la couleur
si c'est du dégradé linéaire, je compare si le nombre d'étapes est le même, et si oui, si chaque étape a la même couleur (si tu triches avec des dégradés fait par VBa, qui permet de faire un arc en ciel, par exemple, il peut être souhaitable de comparer la position de l'étape If .Gradient.ColorStops.Item(I).Position <> C2.Interior.Gradient.ColorStops.Item(I).Position Then Exit Function)
si c'est du dégradé rectangulaire, je compare en plus la valeur des angles
si c'était rien de tout cela, c'est que c'était un motif et je compare la couleur du motif
Pour finir, si je suis arrivé au bout, c'est que tout est semblable et je passe à VRAI le résultat de ma fonction :p...
Bonne suite :cool:
 

knaekes

XLDnaute Occasionnel
Re : identifier un type de remplissage de cellule

Désolé du dérangement,

mais je ne parviens pas à faire appel à la fonction pour afficher le "OK" en face de la cellule correspondante.

En fait je souhaite ne pas utiliser les formules excel inscrites dans les cellules.

comment puis-je faire appel à la fonction "CompareFond"

merci d'avance
 

knaekes

XLDnaute Occasionnel
Re : identifier un type de remplissage de cellule

merci, j'ai procédé à ces modifications. Mais ensuite ... ?

comment utiliser cette fonction ?

j'ai entre autres essayé:

Code:
Sub essai()

C1 = Cells(5, 1)
C2 = Cells(6, 3)
C3 = Cells(7, 3)

C3 = (CompareFond(C1, C2))
End Sub
 

JNP

XLDnaute Barbatruc
Re : identifier un type de remplissage de cellule

Re :),
C'est
Code:
Sub essai()
Dim C1 As Range, C2 As Range, C3 As Range
Set C1 = Cells(5, 1)
Set C2 = Cells(6, 3)
Set C3 = Cells(7, 3)
C3.Value = CompareFond(C1, C2)
End Sub
qui est correct, mais plus simplement
Code:
Sub essai2()
Cells(7, 3).Value = CompareFond(Cells(5, 1), Cells(6, 3))
End Sub
Bonne nuit :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 237
Messages
2 086 488
Membres
103 233
dernier inscrit
Ange.wil