Test pour chaque cellule d'une plage [Résolu]

Signaler
Messages postés
15
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
22 décembre 2007
-
Messages postés
69
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
14 décembre 2007
-
Bonjour à tous,
mon objectif est de tester si la couleur d'une des cellule est le blanc :

Function couleur(pla As Range) As Boolean
Dim c As Range

    For Each c In Worksheets("Feuille1").pla.Cells
        If c.Interior.Color <> RGB(0, 0, 0) Then
            couleur = False
            Exit For
        Else
            couleurr = True
        End If
    Next
End Function

Le problème est qu'il me met une erreur d'exécution 438 : propriété ou méthode non gérée par cet objet...

Comment remèdier à ça?

Merci d'avance

5 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
Salut,

Si j'ai bien compris (au vue du code) ta fonction doit retourner False si l'intérieur d'une cellule n'est pas blanc . ce qui est bizarre c'est qu'il semblerait que tu dises l'inverse dans le premier post.

Est ce que ceci pourrait convenir.
Private Sub CommandButton1_Click()
Range("A1:F10").Select
MsgBox Renvoie_Couleur

End Sub<hr />

Private Function Renvoie_Couleur() As Boolean
Dim c As Range
Renvoie_Couleur = True
   For Each c In Selection
       If c.Interior.Color <> vbWhite Then
           Renvoie_Couleur = False
           Exit For
       End If
   Next
End Function , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
69
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
14 décembre 2007

ton problème vient de la collection range
pla représnete un range càd une plage de cellules d'une feuilles particulière (la feuille active je pense). Il faut donc que tu définisses la feuille avant de lancer le for...each.
Et un range ça se définit avec set.
Voilà ce que j'ai fait, ça marche chez moi :

Sub renvoie_couleur()
Dim coul As Boolean
Dim pla_range As Range

    Set pla_range = Worksheets("Feuille1").Range("A2:D10")
    coul = couleur(pla_range)
    MsgBox coul
End Sub

Function couleur(pla As Range) As Boolean
Dim cel As Range
   
    For Each cel In pla
        If cel.Interior.Color <> RGB(0, 0, 0) Then
            couleur = False
            Exit For
        Else
            couleur = True
        End If
    Next
End Function

La haine aveugle n'est pas sourde
Messages postés
15
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
22 décembre 2007

il y a bien évolution, mais seulement du type d'erreur cette fois... Objet requis (erreur 424)

Sub renvoie_couleur()
Dim cou as boolean
Dim pla_range as range
    Set plage = Worksheets("Feuille").Range(pla_range)
    coul couleur(plage)
    MsgBox coul
End Sub
_________________________________________
Function couleur(pla As Range) As Boolean
Dim cel As Range

    For Each cel In pla
        If cel.Interior.Color <> RGB(255, 255, 255) Then
            espace_necessaire = False
            Exit For
        Else
            espace_necessaire = True
        End If
    Next
End Function

(je bosse avec vba Excel...)

Help please!!!
Messages postés
15
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
22 décembre 2007

Merci, ca fonctionne maintenant!
Oui il est possible que je fasse des erreurs parce que en fait ce n'est qu'une simplification que je donne pour qu'on puisse comprendre plus simplement ce que je veux et où je bloque...
Messages postés
69
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
14 décembre 2007

Ca n'a plus aucune importance puisque ton problème est résolu.
Toutefois, le code que je t'avais envoyé fonctionne bien (en VBA).
En revanche, dans le code que tu as renvoyé derrière, tu as des problèmes parce que tu refais l'erreur d'écrire : worksheets("Feuille").range(plage_range)
plage_range étant un objet range, il n'est par définition pas possible de faire range(plage_range), ça n'a pas de sens.
worksheets("Feuille").plage_range  serait moins faux mais ça ne marchera pas non plus car un objet range renvoie des cellules associées à une feuille. Et si tu n'as pas l'impression d'avoir indiqué une feuille, par défaut ton objet range prend la feuille active. en clair c'est comme si tu écrivais :
worksheets("Feuille").worksheets(feuille_active).range(les cellules) => problème.
Voilà les modifications qu'il fallait faire dans ta procédure d'appel :

Sub renvoie_couleur()
Dim coul As Boolean
Dim plage_string As String
Dim plage_range As Range

    plage_string = "A2:D10"
    Set plage_range = Worksheets("Feuille").Range(plage_string)
    ' ou Set plage_range = Activesheet.Range(plage_string)
    coul = couleur(plage_range)
    MsgBox coul
End Sub

Ces précisions ne te sont pas d'une grande utilité mais on ne sait jamais pour un autre code à l'avenir.

La haine aveugle n'est pas sourde