Formatage zone de texte dans un rapport [Résolu]

Signaler
Messages postés
9
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
15 février 2008
-
Messages postés
9
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
15 février 2008
-
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

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
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
Messages postés
9
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
15 février 2008

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