Access vba : aide pour fonction de coloriage
Résolu
arzawe
Messages postés
70
Date d'inscription
Statut
Membre
Dernière intervention
-
arzawe Messages postés 70 Date d'inscription Statut Membre Dernière intervention -
arzawe Messages postés 70 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Access vba : aide pour fonction de coloriage
- Acer quick access - Forum logiciel systeme
- Quick Access service ✓ - Forum PC portable
- Désinstaller ACER QUICK ACCESS - Forum Logiciels
- Access appdata - Guide
- Excel compter cellule couleur sans vba - Guide
10 réponses
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?
- 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?
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?
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 :-)
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 :-)
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?
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?
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...
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...
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
Moi j'ai fait les tests en mode formulaire...
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 :-)
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 :-)
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 :-)
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 :-)
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.
Ce n'est pas encore tout à fait ce que je veux, mais au moins j'ai l'impression d'avancer.
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 :-)
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 :-)
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!!
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!!
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...
Content que ça aide, j'en ai appris autant que toi!!
A refaire...
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 :-(
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 :-(
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