OVH Cloud OVH Cloud

modifier backcolor par VB

4 réponses
Avatar
jipé
Bonsoir à tous,
Voici mon pb :
J'ai une bdd qui contient plus d'une centaine de formulaires dont je voudrais modifier la couleur de fond de toutes les sections qu'ils contiennent.
Evidemment, tous ne contiennent pas d'en-tête/pied-de-formulaire visibles. Donc à partir du formulaire1, je lance la procédure suivante (j'en ai essayé d'autres...) :

Dim db As Object
Dim frm As AccessObject
'Dim ctrl As AccessObject
Set db = Application.CurrentProject

For Each frm In db.AllForms
If Not (frm.Name = "formulaire1") Then
DoCmd.OpenForm frm.Name, acDesign, , , , acHidden
'Debug.Print frm.Name
Forms(strName).Section(acDetail).BackColor = -2147483633
Forms(strName).Section(acHeader).BackColor = -2147483633
Forms(strName).Section(acFooter).BackColor = -2147483633
DoCmd.Close acForm, frm.Name, acSaveYes
End If
Next frm

Dès que la proc rencontre un frm qui n'a pas d'en-tête visible, elle me renvoie un message brut sans code d'erreur récupérable "Numéro de section invalide" et plante. J'ai essayé des tas de feintes, mais rien n'y fait : dans tous les cas il faudrait que je puisse lire et modifier la propriété Visible des en-têtes pour pouvoir mettre une boucle conditionnelle et éviter le pb, mais celle-ci semble inaccessible ou au minimum en lecture seule dans VB.

Quelqu'un aurait-il une piste ou dois-je le faire obligatoirement "à la main" ?

Merci, @+
JP

4 réponses

Avatar
Raymond [mvp]
Bonsoir.

il faudrait mettre un on error resume next pour passer sur l'erreur
directement sans la traiter.

On Error Resume Next
For Each frm In db.AllForms


il y a plusieurs lignes qui semblent bizarres, notamment ce genre :
Forms(strName)...., je pense qu'il y a d'autres lignes mais qu'elles ont été
enlevées ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"jipé" a écrit dans le message de
news:c03jn1$2qn$
Bonsoir à tous,
Voici mon pb :
J'ai une bdd qui contient plus d'une centaine de formulaires dont je
voudrais modifier la couleur de fond de toutes les sections qu'ils

contiennent.
Evidemment, tous ne contiennent pas d'en-tête/pied-de-formulaire visibles.
Donc à partir du formulaire1, je lance la procédure suivante (j'en ai essayé

d'autres...) :

Dim db As Object
Dim frm As AccessObject
'Dim ctrl As AccessObject
Set db = Application.CurrentProject

For Each frm In db.AllForms
If Not (frm.Name = "formulaire1") Then
DoCmd.OpenForm frm.Name, acDesign, , , , acHidden
'Debug.Print frm.Name
Forms(strName).Section(acDetail).BackColor = -2147483633
Forms(strName).Section(acHeader).BackColor = -2147483633
Forms(strName).Section(acFooter).BackColor = -2147483633
DoCmd.Close acForm, frm.Name, acSaveYes
End If
Next frm

Dès que la proc rencontre un frm qui n'a pas d'en-tête visible, elle me
renvoie un message brut sans code d'erreur récupérable "Numéro de section

invalide" et plante. J'ai essayé des tas de feintes, mais rien n'y fait :
dans tous les cas il faudrait que je puisse lire et modifier la propriété
Visible des en-têtes pour pouvoir mettre une boucle conditionnelle et éviter
le pb, mais celle-ci semble inaccessible ou au minimum en lecture seule dans
VB.

Quelqu'un aurait-il une piste ou dois-je le faire obligatoirement "à la
main" ?


Merci, @+
JP







Avatar
jipé
Merci Raymond pour ta réponse,
Effectivement, il manque des lignes, dont la déclaration de strName
(=Frm.Name)...mais tu as rectifié de toi-même !
Cela dit, j'ai déjà essayé l'interception avec Resume Next, mais dans ce
cas, la proc va à son terme sans modifier les frm qui ne contiennent pas
d'en-tête visible, et ils sont majoritaires. D'ailleurs, je ne sais tjs pas
si cette section en-tête est simplement "cachée" (visibleúlse) ou s'il lui
est assigné la valeur "Null" dans l'objet frm lors de sa création (rien
trouvé dans la doc ou les forums à ce sujet).
Donc, retour à la case départ...
@+
JP


"Raymond [mvp]" a écrit dans le message news:
uxozq$
Bonsoir.

il faudrait mettre un on error resume next pour passer sur l'erreur
directement sans la traiter.

On Error Resume Next
For Each frm In db.AllForms


il y a plusieurs lignes qui semblent bizarres, notamment ce genre :
Forms(strName)...., je pense qu'il y a d'autres lignes mais qu'elles ont
été

enlevées ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"jipé" a écrit dans le message de
news:c03jn1$2qn$
Bonsoir à tous,
Voici mon pb :
J'ai une bdd qui contient plus d'une centaine de formulaires dont je
voudrais modifier la couleur de fond de toutes les sections qu'ils

contiennent.
Evidemment, tous ne contiennent pas d'en-tête/pied-de-formulaire
visibles.


Donc à partir du formulaire1, je lance la procédure suivante (j'en ai
essayé

d'autres...) :

Dim db As Object
Dim frm As AccessObject
'Dim ctrl As AccessObject
Set db = Application.CurrentProject

For Each frm In db.AllForms
If Not (frm.Name = "formulaire1") Then
DoCmd.OpenForm frm.Name, acDesign, , , , acHidden
'Debug.Print frm.Name
Forms(strName).Section(acDetail).BackColor = -2147483633
Forms(strName).Section(acHeader).BackColor = -2147483633
Forms(strName).Section(acFooter).BackColor = -2147483633
DoCmd.Close acForm, frm.Name, acSaveYes
End If
Next frm

Dès que la proc rencontre un frm qui n'a pas d'en-tête visible, elle me
renvoie un message brut sans code d'erreur récupérable "Numéro de section

invalide" et plante. J'ai essayé des tas de feintes, mais rien n'y fait :
dans tous les cas il faudrait que je puisse lire et modifier la propriété
Visible des en-têtes pour pouvoir mettre une boucle conditionnelle et
éviter

le pb, mais celle-ci semble inaccessible ou au minimum en lecture seule
dans

VB.

Quelqu'un aurait-il une piste ou dois-je le faire obligatoirement "à la
main" ?


Merci, @+
JP











Avatar
Raymond [mvp]
je viens de tester cette procédure et la section détail est bien mise en
rouge en l'absence d'entête de formulaire, et le formulaire bien sauvegardé.
DoCmd.OpenForm "formulaire1", acDesign, , , , acHidden
On Error Resume Next
Forms("formulaire1").Section(acFooter).BackColor = 255
Forms("formulaire1").Section(acDetail).BackColor = 255
DoCmd.Close acForm, "formulaire1", acSaveYes

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"jipé" a écrit dans le message de
news:c05ro7$6im$
Merci Raymond pour ta réponse,
Effectivement, il manque des lignes, dont la déclaration de strName
(=Frm.Name)...mais tu as rectifié de toi-même !
Cela dit, j'ai déjà essayé l'interception avec Resume Next, mais dans ce
cas, la proc va à son terme sans modifier les frm qui ne contiennent pas
d'en-tête visible, et ils sont majoritaires. D'ailleurs, je ne sais tjs
pas

si cette section en-tête est simplement "cachée" (visibleúlse) ou s'il
lui

est assigné la valeur "Null" dans l'objet frm lors de sa création (rien
trouvé dans la doc ou les forums à ce sujet).
Donc, retour à la case départ...
@+
JP


Avatar
jipé
Salut Raymond,
J'avais mal vérifié. En fait, la proc incluait d'autres modif et certaines
faisaient également planter, si bien qu'à la fin, je ne savais plus trop par
quel bout prendre le truc. Voilà, je me suis cru malin, j'ai pas voulu
décomposer les modifs à effectuer et j'ai perdu des heures à bidouiller..!
Donc, effectivement, ça marche avec "resume next". Merci de t'être penché
sur ce pb.
@+
JP


"Raymond [mvp]" a écrit dans le message news:
#76KU#
je viens de tester cette procédure et la section détail est bien mise en
rouge en l'absence d'entête de formulaire, et le formulaire bien
sauvegardé.

DoCmd.OpenForm "formulaire1", acDesign, , , , acHidden
On Error Resume Next
Forms("formulaire1").Section(acFooter).BackColor = 255
Forms("formulaire1").Section(acDetail).BackColor = 255
DoCmd.Close acForm, "formulaire1", acSaveYes

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"jipé" a écrit dans le message de
news:c05ro7$6im$
Merci Raymond pour ta réponse,
Effectivement, il manque des lignes, dont la déclaration de strName
(=Frm.Name)...mais tu as rectifié de toi-même !
Cela dit, j'ai déjà essayé l'interception avec Resume Next, mais dans ce
cas, la proc va à son terme sans modifier les frm qui ne contiennent pas
d'en-tête visible, et ils sont majoritaires. D'ailleurs, je ne sais tjs
pas

si cette section en-tête est simplement "cachée" (visibleúlse) ou s'il
lui

est assigné la valeur "Null" dans l'objet frm lors de sa création (rien
trouvé dans la doc ou les forums à ce sujet).
Donc, retour à la case départ...
@+
JP