Formatage zone de texte dans un rapport

Résolu
cs_jyvaut75 Messages postés 9 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 15 février 2008 - 10 août 2007 à 14:07
cs_jyvaut75 Messages postés 9 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 15 février 2008 - 13 août 2007 à 14:11
Bonjour,

Je suis programmeur amateur, ce qui ne m'empêche pas de tenter de développer pour le travail. Durant cette activité, je suis face à un souci:
J'ai un Etat dans Access 2003 qui édite des données. Jusque là, rien d'anormal.

Je souhaiterais que ces données aient un fond de cellule différent selon la donnée source ("vacances"=grisé, "autre" pas de changement.

J'ai essayé un code (voir sous la signature), mais celui-ci ne fonctionne pas sur la totalité des "textbox". Si quelqu'un avait une idée...

Merci beaucoup d'avance,

Par ailleurs, ma "bible" actuelle est "Access 97, guide du développeur" chez Sybex, que j'utilise depuis 1998 avec Access97 et suivants.

Pourriez-vous me conseiller un livre au moins aussi poussé, et même si possible d'avantage, mais naturellement plus moderne?

D'avance merci.

Jyvaut75

Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)

Dim strEvent As String
Dim Ctrl As Control

For Each Ctrl In Me.Détail.Controls
    Select Case Ctrl.Name
        Case "D1"
            strEvent = Me![D1]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D2"
            strEvent = Me![D2]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D3"
            strEvent = Me![D3]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D4"
            strEvent = Me![D4]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D5"
            strEvent = Me![D5]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D6"
            strEvent = Me![D6]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D7"
            strEvent = Me![D7]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D8"
            strEvent = Me![D8]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D9"
            strEvent = Me![D9]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D10"
            strEvent = Me![D10]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D11"
            strEvent = Me![D11]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D12"
            strEvent = Me![D12]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D13"
            strEvent = Me![D13]
            Call CouleurTextBox(strEvent, Ctrl)
        Case "D14"
            strEvent = Me![D14]
            Call CouleurTextBox(strEvent, Ctrl)
    End Select   
End Sub

Private Function CouleurTextBox(strEvent As String, CtrlTextBox As Control)


Dim lngBlack As Long

Dim db As Database
Dim rst As Recordset


Set db = CurrentDb()
Set rst = db.OpenRecordset("Tbl_Evenement", dbOpenTable)
rst.Index = "CEvenement"


lngBlack = RGB(0, 0, 0)
Rem lngRed = RGB(255, 0, 0)
Rem lngWhite = RGB(22, 255, 255)


With rst
    .Seek "=", strEvent
    If .NoMatch Then
        MsgBox ("Bug sur CodeEvent" & strEvent)
    Else
        If ![Present] = True Then
            CtrlTextBox.ForeColor = lngBlack
            CtrlTextBox.BackColor = 16777215 ' blanc ou transparent
            Rem Me![D1].BackColor = 16777215 ' blanc ou transparent
        Else
            CtrlTextBox.ForeColor = lngBlack
            CtrlTextBox.BackColor = 12632256 'gris
            Rem Me![D1].ForeColor = lngBlack
            Rem Me![D1].BackColor = 12632256 'gris
        End If
    End If
End With
End Function

2 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 août 2007 à 09:05
salut,

Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
    Dim Ctrl As Control
    
    For Each Ctrl In Me.Détail.Controls
        If TypeOf Ctrl Is TextBox Then
            Call CouleurTextBox(Ctrl.Name,
Ctrl)
        End If
    Next Ctrl
End Sub

Private Function CouleurTextBox(strEvent As
String, CtrlTextBox As
Control)
    Dim db As Database
    Dim rst As Recordset
    
    Set db = CurrentDb()
    Set rst = db.OpenRecordset("Tbl_Evenement", dbOpenTable)
    rst.Index = "CEvenement"
    
    With rst
        .Seek "=", strEvent
        If .NoMatch Then
            MsgBox ("Bug sur CodeEvent" & strEvent)
        Else
            CtrlTextBox.ForeColor = vbBlack
            CtrlTextBox.BackColor = IIf(![Present], vbWhite, 12632256)
        End If
    End With
End Function

par contre je pige pas pourquoi tu gardes et regardes strEvent.
il va contenir le contenu de la textbox, pas sa nomenclature. est-ce le but?
dans tous les cas, comme tu passes Ctrl en paramètre tu n'as pas besoin de passer aussi strEvent qui est récupérable

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
cs_jyvaut75 Messages postés 9 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 15 février 2008
13 août 2007 à 14:11
Bonjour PCPT,


Merci pour le code simplifié qui fonctionne parfaitement. Effectivement, strEvent n'a aucun intérêt.

Le détail qui "tuait" la mise en forme des zones de texte: Pour toutes les zones de textes dont le nom était >D6, la propriété, style de fond était à "Transparent" au lieu d'être à "Standard". Résultat, beau essayer de colorer, ça ne marchait pas!

Encore merci.

JYV
0
Rejoignez-nous