Access vba : aide pour fonction de coloriage

Résolu/Fermé
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 - 12 mars 2008 à 14:49
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 - 13 mars 2008 à 15:30
Bonjour,

Je cherche toujours à mettre en gras le contenu de champs en fonction de sa valeur. Pour cela, j'ai écrit la fonction suivante, que je lui demande d'utiliser à l'ouverture de mon formulaire :

Public Function coloriage()

If Forms![F - Ratios]![Sac ou Gaine] = "TOTAL" Then
Forms![F - Ratios]![Sac ou Gaine].FontBold = True
End If
End Function

Le problème est qu'il ne se passe rien. la syntaxe ne le choque pas, mais il ne fait rien. Alors je m'interroge.
Est-ce que comme le contenu de mon formulaire est long il faut que je fasse une boucle (sachant que cela représente une bonne dizaine de lignes à colorer) ?
Et dans ce cas laquelle ?
J'ai essayé avec DO LOOP, mais d'une part ça ne donne rien, et d'autre part, j'ai lu quelque part sur le web (ça fait un moment que je cherche) que la boucle s'arrêtait dès qu'il trouvait la bonne valeur, alors que je veux qu'il balaye l'intégralité de la colonne.

Je continue à chercher, mais si l'un de vous avait la possibilité de m'orienter dans la bonne direction (je ne demande pas forcément la solution complète), cela m'aiderait à avancer.

Merci d'avance

10 réponses

Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
12 mars 2008 à 15:12
Bonjour,

- je viens de tester vite fait, et ça marche... Mais pour les besoins du test, j'ai mis le code en direct sur l'évènement ouverture de formulaire...comme ça :

Private Sub Form_Open(Cancel As Integer)
Me![Sac ou Gaine] = "TOTAL"
End Sub

Private Sub Sac_ou_Gaine_GotFocus()
If Me![Sac ou Gaine] = "TOTAL" Then
Me![Sac ou Gaine].FontBold = True
End If
Me!Commande2.SetFocus
End Sub

- quel est le type de champ que tu veux mettre en gras? Une zone de texte, une étiquette?
- comment initialises-tu ce champ? Est-ce qu'il ne prend pas la valeur TOTAL après que tu aies lancé ton script?
1
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
12 mars 2008 à 16:05
Ce sont des zones de textes isses d'une table dans laquelle mes calculs ont déjà été faits. Donc la fonction doit s'exécuter à l'ouverture du formulaire.

En fait je pourrais les produire dans un état, mais ma chef veut que ce soit un formulaire. La valeur Total est définie avant l'ouverture de la table, par un bouton qui lance toute une série de calculs. Et chaque ligne Total correspond à des sommes en fonction de divers critères. Donc mon formulaire doit afficher des lignes en gras, et des lignes en normal.

Je vais essayer ton code, mais j'ai juste une question : comme je ne veux pas copier bêtement, je souhaiterais comprendre : Pourquoi 2 private sub ? A quoi correspond la première ? Elle s'éxécute à l'ouverture du formulaire, mais pourquoi juste une ligne à l'intérieur ? A quoi sert le deuxième ? A quoi correspondes gotfocus et setfocus ?

Merci de ton aide
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
12 mars 2008 à 15:09
J'ai un pu avancé. Pour faire une boucle, il faut, si j'ai bien compris un nombre d'exécution qui sert de compteur. Moi je veux que le compteur soit le nombre d'enregistrements. Comment récupérer ce nombre et ensuite compter mes enregistrements dans la table?
0
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
12 mars 2008 à 16:23
Ah, ces chefs...lol

J'ai mis deux petites procédures pour simuler ton problème... la première, à l'ouverture du formulaire pour initialiser la zone de texte Sac ou Gaine, la seconde, c'est lorsque la dite zone reçoit le focus (est sélectionnée), elle fait le test et se met en gras, ensuite j'ai juste mis un contrôle sur lequel j'envoie le focus pour déselectionner la zone de texte et vérifier qu'elle est bien en gras!! (sinon si elle reste sélectionnée, je n'y voyais rien... lol)

Je viens de tester ça :
Private Sub Form_Open(Cancel As Integer)
If Me![sac ou gaine] = "TOTAL" Then
Me![sac ou gaine].FontBold = True
End If
End Sub

...et ça marche... Je pense que le problème vient de l'appel de la fonction que tu définis. Essaye comme ça et dis voir ce qui se passe :-)

0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 09:07
J'ai essayé les deux procédures que tu m'as indiquées : pour les deux, il ne dit rien, mais ne fait rien non plus.

Mais je ne désespère pas de trouver
0
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
13 mars 2008 à 09:18
Bizarre... lol

As-tu essayé de mettre des points d'arrêt, pour voir ce qui se passe dans ton code?

Je sais que c'est pas simple, mais peux-tu mettre un exemple en ligne?
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 09:27
En fait, il fait comme s'il en reconnaissait pas les champs, ou plutôt comme s'il ne les voyait pas. Pour la première fonction : il ne sait pas de quoi je parle genre c'est quoi ce Me.
J'ai remplacé Me par Forms![F - Ratios]![Sac ou Gaine] et là il me dit Erreur d'exécution 2448 : Impossible d'attribuer une valeur à cet objet.

La deuxième fonction il ne dit strictement rien.

J'ai essayé hier soir à la maison sur une base bidon, avec une pauv'table sur dans laquelle j'ai bêtement rentré des données, et là la deuxième procédure que tu m'as indiquée a fonctionné. Grrrrrrrr!

C'est peut-être que c'est tout bêtement dans les propriété de mes contrôles.

Je continue à bidouiller, et je te tiens au courant.

Je n'ai pas le droit de faire sortir ma base de mon bureau, même avec ma clé usb, alors la mettre sur le net pour un exemple...
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 09:32
Private Sub Sac_ou_Gaine_Enter()
If Me![sac ou gaine] = "TOTAL" Then
Me![sac ou gaine].FontBold = True
End If

End Sub


Voilà ce que j'ai mis directement sur mon contrôle [Sac ou Gaine]. En première apparence, il ne fait rien. Si je clique sur une des données de la colonne concernée, il me met toute la colonne en gras, même ce que je ne veux pas voir en gras.
Mais là je trouve qu'on avance
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 09:40
Je viens d'avoir une idée : si je fais une boucle. Est-ce que tu crois que c'est possible? Ainsi, il prendrait en compte la valeur de chaque enregistrement et non pas la colonne entière.
Mais par contre, je ne sais pas quelle boucle utiliser
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
13 mars 2008 à 09:43
Otes-moi d'un doute... tu affiches ton formulaire en mode données ou formulaire? Parce que ça change tout... lol

Moi j'ai fait les tests en mode formulaire...
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 09:56
Je passe bien en mode formulaie pour faire mes tests : je ne suis pas douée, mais il ne faut quand même pas exagérer...
:-)
0
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
13 mars 2008 à 10:07
Non, non je me moquais pas, loin de là... juste que les procédures ci-dessus marchent bien en mode formulaire, mais pas du tout en mode feuilles de données...:-)

Et justement, en mode feuille de données, j'ai mis ce code :
Private Sub Form_Load()
Me![sac ou gaine] = "total"
Me![Texte2] = "toto"
If Me![sac ou gaine] = "total" Then
MsgBox "toto"
Me![sac ou gaine].FontBold = 1
End If
End Sub

Le msgbox est juste là pour qu'il se passe quelque chose!! lol

En regardant les variables pas à pas, on voit bien la valeur fontbold de sac ou gaine passer de 0 à 1, par contre il ne se passe rien à l'écran (encore une fois en mode données...), je me demande pourquoi...

Je continue à chercher :-)
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 10:43
J'ai essayé un autre truc

Public Function coloriage()


Dim bdd As Database
Dim RstRatio As Recordset
Dim RaTio As TableDef
Dim SG

Set bdd = CurrentDb
Set RaTio = bdd.TableDefs("Ratios")
Set RstRatio = bdd.OpenRecordset("Ratios")
Set SG = RstRatio![Sac ou Gaine]

Select Case SG
Case "TOTAL"
Forms![F - Ratios]![Sac ou Gaine].FontBold = True
Case Else
Forms![F - Ratios]![Sac ou Gaine].FontBold = False
End Select

End Function

Mais là pareil, il ne me fait rien. Pourtant, je suis assez contente de moi, ça me semblait bien propre mon code :-)
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 11:03
Alors, si je le mets dans un Private Sub à l'ouverture, il ne fait rien, quand je le mets dans une fonction que je lance par macro à l'ouverture, il ne fait rien, mais si je l'exécute avec le formulaire déjà ouvert, il me met toute la colonne en gras.

Ce n'est pas encore tout à fait ce que je veux, mais au moins j'ai l'impression d'avancer.
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 11:21
Une petite expérience avec des msgbox montre qu'il n'arrive pas à lire la première partie de mon Case, celle où il est question de Total.
0
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
13 mars 2008 à 11:58
Re :-)

Tu peux faire une copie d'écran de ton formulaire, que je reproduise ça dans une base factice..., histoire de parler de la même chose :-)
0
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
13 mars 2008 à 12:33
Tu vas rire... jaune :-)

Dans ton formulaire en mode feuille de données, clic sur un cellule de ta colonne Sac ou Gaine, puis Format/Mise en forme conditionnelle, dans condition 1 tu mets Valeur de champ, puis egal à, et tu tapes "TOTAL" (avec les guillemets), puis tu choisis gras (et rouge, tant qu'à faire!! lol) puis tu valides par OK...

Et hop!!
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 14:52
Je suis dégoutée : mais bon, j'ai au moins appris à faire des boucles, à m'arrêter à chaque enregistrement.
Maistenant, il faut que toute ma ligne prenne le format souhaité.

Merci beaucoup
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5 > arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014
13 mars 2008 à 14:57
C'est bon : j'ai compris comment tout çamarche et j'ai mis toute ma ligne en orange.


MERCI BEAUCOUP, BEAUCOUP, BEAUCOUP pour ton aide, pour l'utilisation de ton cerveau, et le temps que tu y as passé.

A bientôt
0
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
13 mars 2008 à 15:00
Euh... le cerveau c'est ce truc entre les oreilles? Moi j'ai juste bossé avec mes petits doigts musclés... lol

Content que ça aide, j'en ai appris autant que toi!!

A refaire...
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 15:12
Non, mais regarde jusqu'où j'étais arrivée ce matin :
Private Sub Form_Load()
Dim bdd As Database
Dim RstRatio, RstForms As Recordset
Dim RaTio As TableDef
Dim SG, Lign, i
Dim FldSG As Field

Set RstForms = Forms("F - Ratios").Recordset

Set bdd = CurrentDb
Set RaTio = bdd.TableDefs("Ratios")
Set RstRatio = bdd.OpenRecordset("Ratios")



Do Until RstForms.EOF
Set SG = RstForms![Sac ou Gaine]
Select Case SG
Case "TOTAL"
Forms![F - Ratios]![Sac ou Gaine].Recordset.FontBold = True

MsgBox "Total"
Case "S"
Forms![F - Ratios]![Sac ou Gaine].FontBold = False
MsgBox "bouh"
Case "M"
Forms![F - Ratios]![Sac ou Gaine].FontBold = False
MsgBox "Pouet"

End Select
RstForms.MoveNext
Loop


End Sub



Mais le résultat était seulement qu'il passait chaque ligne en revue :-(

0
Fxbrg Messages postés 711 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 198
13 mars 2008 à 15:19
Cool!!
0
arzawe Messages postés 70 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 14 septembre 2014 5
13 mars 2008 à 15:30
Tu peux rire. Pour arriver à ce résultat en une matinée, on s'y est quand même mis à 3 !!!!! :-)
0