Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/04/2011, 15h35   #1
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Par défaut Affichage conditionnel d'un champ

Bonjour,

J'ai besoin de vous pour résoudre un problème qui peut certainement se faire en VBA mais je ne suis pas sûr du tout.
J'ai dans un formulaire un sous-formulaire affichant plusieurs lignes d'enregistrements. Ceux-ci contiennent des champs dont certains peuvent être vides. Les lignes contenant un certain champ vide sont affichées en blanc tandis que les autres sont affichées en vert avec la mise en forme conditionnelle d'Access.
Maintenant, j'aimerais qu'en plus de changer la couleur de la ligne selon son contenu, un bouton soit visible ou à la fin de la ligne. J'ai essayé plusieurs choses mais je ne parviens qu'à le rendre visible pour aucune ligne ou bien pour toutes. Voici comment est structuré mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
' Evènements lors de la sélection d'une fiche de poste dans la liste
Private Sub lst_Fiches_poste_AfterUpdate()
 
Dim str_Fiche As String
 
' Sélection des modules, des compétences et des infos concernant leur acquisition par l'opérateur
str_Fiche = "Requête SQL";
 
' Mise à jour du formulaire
Me.sf_Elements_FP_Op.Form.RecordSource = str_Fiche
 
End Sub
Ce morceau correspond à la procédure s'exécutant lors d'un choix dans une liste, c'est celui qui génère les résultats du sous-formulaire.
Merci d'avance!

Cordialement,
Prettyletter
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 15h56   #2
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
rien à voir avec le code !
pour qu'un objet soit différencié suivant les lignes, il faut qu'il ait une source, il ne faut donc pas qu'il soit indépendant. (donc pas un bouton mais une zone de texte, quite à lui donner une apparence de bouton)
après, tu peux lui appliquer les règles de mise en forme conditionnelle, y compris l'invisibilité.
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 16h02   #3
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Salut!

Merci pour ta réponse
Je ne sais pas si cela peut fonctionner dans mon cas puisque non seulement je dois rendre invisible ce bouton lorsque le champ est rempli, mais je dois aussi en afficher un autre à la place.
Pour être plus clair, mon tableau contient des noms de modules. Si ceux-ci ont été acquis, la date est renseignée et la ligne est verte. Le bouton en bout de ligne doit donc permettre la suppression de l'acquisition, donc la suppression de la date.
En revanche, si la date n'est pas renseignée, le bouton doit permettre l'ajout de l'acquisition en inscrivant la date dans le champ correspondant.

Mon idée, à la base, était de créer deux boutons qui sont rendus visibles ou invisibles selon la valeur du champ "date". Est-il possible de faire cela avec l'idée que tu m'as proposé? Je vais étudier cette piste en attendant ta réponse.
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 16h05   #4
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
tu peux tout à fait avoir un fonctionnement de bouton avec une zone de texte (sans son étiquette bien sûr!)
avec deux, il suffit de faire deux fois le boulot
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 16h14   #5
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Je crois que ça ne fonctionnera pas. J'ai besoin d'afficher une image et non du texte, et ce bouton n'a pas de source. J'aurais plutôt vu une solution comme l'affichage du tableau par VBA avec une boucle, en affichant le bouton à chaque itération selon la valeur de la date en cours. Je ne sais pas s'il est possible de procéder comme cela mais j'ai du mal à voir comment l'utilisation des zones de texte pourrait fonctionner dans mon cas.
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 10h33   #6
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Bonjour,

Je n'ai toujours pas trouvé de solution à mon problème. J'ai essayé plusieurs solutions, dont une qui pourrait peut-être fonctionner si je savais mieux m'y prendre.

Au lieu de modifier la propriété RecordSource de mon sous-formulaire lors de la sélection d'une fiche de poste dans la liste, j'ai essayé de l'afficher ligne par ligne avec un Recordset pour pouvoir traiter chaque ligne séparément. Le soucis, c'est que je n'ai jamais réussi à les afficher. Pourquoi? Je n'en sais rien.

J'avais donc procédé comme cela :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
' Evènements lors de la sélection d'une fiche de poste dans la liste
Private Sub lst_Fiches_poste_AfterUpdate()
 
Dim db As DAO.Database
Dim rst_Fiche As DAO.Recordset
 
Dim str_Fiche As String
 
' Sélection des modules, des compétences et des infos concernant leur acquisition par l'opérateur
str_Fiche = "REQUETE SQL"
 
' Ouverture de la base
Set db = Application.CurrentDb
 
' Ouverture du Recordset
Set rst_Fiche = db.OpenRecordset(str_Fiche)
 
While Not rst_Fiche.EOF
    Me.sf_Elements_FP_Op.Form.txt_Code = rst_Fiche("CODE")
    Me.sf_Elements_FP_Op.Form.txt_Libelle = rst_Fiche("LIBELLE")
    Me.sf_Elements_FP_Op.Form.txt_Formateur = rst_Fiche("FORMATEUR")
    Me.sf_Elements_FP_Op.Form.txt_Date_acq = rst_Fiche("DATE_ACQ")
    Me.sf_Elements_FP_Op.Form.txt_Observations = rst_Fiche("OBSERVATIONS")
 
    If rst_Fiche("DATE_ACQ") <> Null Then
        Me.sf_Elements_FP_Op.Form.btn_Valider.Visible = False
    Else
        Me.sf_Elements_FP_Op.Form.btn_Valider.Visible = True
    End If
 
    rst_Fiche.MoveNext
Wend
 
' Fermeture et libération des objets
rst_Fiche.Close
Set rst_Fiche = Nothing
Set db = Nothing
 
End Sub
Lorsque les propriétés Source des champs texte sont renseignés, le code retourne une erreur. Si je les enlève, et que les champs deviennent donc indépendants, je n'ai plus d'erreur mais rien ne s'affiche dans le sous-formulaire.
La requête fonctionne très bien puisque j'obtiens les résultats souhaités en procédant comme je le faisais avant, c'est-à-dire via la propriété Recordsource.
Je ne sais pas si ça vient d'une erreur d'écriture de mon code ou tout simplement si c'est parce qu'il n'est pas possible de procéder ainsi, en tout cas ça ne fonctionne pas. C'est pourquoi je me tourne encore vers vous!

Merci!

Cordialement,
Prettyletter
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 08h25   #7
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Bonjour,

Désolé d'insister mais ce problème me bloque toujours...

J'ai donc opté pour la solution qui m'a été donnée et j'ai utilisé un champ de texte avec affichage conditionnel. Maintenant, j'aimerais savoir s'il est possible d'afficher une valeur différente dans ce champ selon la valeur de la date? Par exemple, écrire "supprimer" dans un cas et "valider" dans l'autre, même si le mieux aurait été d'utiliser une image.

J'attends vos idées!
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h18.


 
 
 
 
Partenaires

Hébergement Web