Fonction pour colorier un flexgrid

[Résolu]
Signaler
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour,

j'ai vu un code (qui consiste à intercaler le coloriage d'un flexgrid) que je souhaiterai transformer en fonction que je pourrai appeler pour n'importe quel formulaire pour n'importe quel flexgrid. Voici ce que j'ai fait (dans un module) :

Public Sub colorierflexgrid(formulaire As Form, msf As MSFlexGrid)
    Dim k As Integer
    Dim T As Integer
    Dim msf As MSFlexGrid
    For k = 1 To formulaire.msf.Rows - 1 Step 2
        formulaire.msf.Row = k
        For T = 0 To formulaire.msf.Cols - 1
            formulaire.msf.Col = T
            formulaire.msf.CellBackColor = RGB(241, 222, 131)
        Next T
        If k + 1 > formulaire.msf.Rows - 1 Then Exit For
        formulaire.msf.Row = k + 1
        For T = 0 To formulaire.msf.Cols - 1
            formulaire.msf.Col = T
            formulaire.msf.CellBackColor = RGB(255, 255, 255)
        Next T
    Next k
End Sub


En supposant que j'ai un formulaire qui s'appelle formproduit dans lequel je souhaiterai colorier mon flexgrid msfproduit, j'appelle la fonction par :

colorierflexgrid formproduit, msfproduit


mais j'ai l'erreur suivante :

"L'objet ne gère pas cette propriété ou cette méthode".

Savez-vous quel est le problème s'il vous plaît?

Merci d'avance.

Cordialement.

5 réponses

Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
Heu, désolé je pense que je me suis un peu précipité car ton code ne me permet pas de colorier les lignes par deux.

Voici le bon code (enfin, celui qui me permet de faire ce que je souhaite).

Public Sub colorierflexgrid(msf As MSFlexGrid)
    
    Dim k As Integer
    Dim T As Integer
    For k = 1 To msf.Rows - 1 Step 2
        msf.Row = k
        For T = 0 To msf.Cols - 1
            msf.Col = T
            msf.CellBackColor = RGB(255, 255, 102)
        Next T
        If k + 1 > msf.Rows - 1 Then Exit For
        msf.Row = k + 1
        For T = 0 To msf.Cols - 1
            msf.Col = T
            msf.CellBackColor = RGB(255, 255, 255)
        Next T
    Next k
    
End Sub


Merci pour tout et prends bien soin de toi.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
redondance !

Dim msf As MSFlexGrid
, msf As MSFlexGrid

ne servent a rien !

surtout que tu appelle au final

formulaire.msf

qui n'a meme rien a voir avec msfproduit ...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Faire simplement :

Public Sub colorierFlexgrid(msf As MSFlexGrid)
    Dim y As Integer
    Dim x As Integer
    For y = 1 To msf.Rows - 1
        msf.Row = k
        For x = 0 To msf.Cols - 1
            msf.Col = x
            if y And 1 Then
                msf.CellBackColor = RGB(241, 222, 131)
            Else 
                msf.CellBackColor = vbWhite
            End If
        Next x
   Next y
End Sub


et l'appel :

colorierFlexgrid msfproduit

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
Bonjour Renfield et Merci pour ton aide. Ton code marche correctement . C'est exactement le résultat que je voulais.

Merci pour tout et excellente journée.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
voilà ce qu'on obtient lorsque je code de tête et que tu code dans un environnement non protégé...

active la déclaration obligatoire de tes variables.
(Option Explicit)

ca devrait t'indiquer mon erreur :

msf.Row = k

inutile de faire deux boucles, je le repète...

(le if y And 1 est un controle de parité...)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp