Condition if sur un sous formulaire

Fermé
unseen Messages postés 56 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 25 avril 2013 - 25 avril 2013 à 20:27
 Tessel75 - 27 avril 2013 à 13:18
Bonjour à tous,

j'ai un formulaire X avec des 3 champs

A
B
C liste déroulante (conserve; autres)

et un sous formulaire Y avec 3 champs

D
E
F

je voudrais écrire le code suivant :

si champ C du formulaire X = conserve
alors désactiver champs E et F du sous formulaire Y

et si champ C du formulaire X = autres
alors désactiver champ D

Aidez moi à écrire le code complètement svp

j'ai écris le code et l'ai mis sur afterupdate en C et current du formulaire X mais ya un débogeage du genre "erreur d'éxécution 424" peut être qu'il ya une condition à mettre ds le sous formulaire Y.. HELP ME

ds la réalité j'ai écris l

Private Sub C_AfterUpdate()

If C = "PRODUITS DE CONSERVES" Then

NATURE.Locked = True
NOMBRE.Locked = True
TYPE_EMBALLAGE.Locked = True
ESPECE.Locked = False
NOM_SCIENTIFIQUE.Locked = False
TYPE_ESPECE.Locked = False
QUALITE_DE_ESPECE.Locked = False
POIDS.Locked = True
VALEUR.Locked = True

End If

If TYPE_DU_PRODUIT = "AUTRES PRODUITS DE PECHE" Then

NATURE.Locked = False
NOMBRE.Locked = False
TYPE_EMBALLAGE.Locked = False
ESPECE.Locked = True
NOM_SCIENTIFIQUE.Locked = True
TYPE_ESPECE.Locked = True
QUALITE_DE_ESPECE.Locked = True
POIDS.Locked = True
VALEUR.Locked = True

End If
End Sub

Private Sub Form_Current()
If TYPE_DU_PRODUIT = "PRODUITS DE CONSERVES" Then

NATURE.Locked = True
NOMBRE.Locked = True
TYPE_EMBALLAGE.Locked = True
ESPECE.Locked = False
NOM_SCIENTIFIQUE.Locked = False
TYPE_ESPECE.Locked = False
QUALITE_DE_ESPECE.Locked = False
POIDS.Locked = True
VALEUR.Locked = True

End If

If TYPE_DU_PRODUIT = "AUTRES PRODUITS DE PECHE" Then

NATURE.Locked = False
NOMBRE.Locked = False
TYPE_EMBALLAGE.Locked = False
ESPECE.Locked = True
NOM_SCIENTIFIQUE.Locked = True
TYPE_ESPECE.Locked = True
QUALITE_DE_ESPECE.Locked = True
POIDS.Locked = True
VALEUR.Locked = True

End If
End Sub

1 réponse

Bonjour,
Il ne sert à rien de poster des lignes et des lignes de code si tu ne dis pas toi-même la quelle accroche. Et de toutes façons quand bien même toutes seraient bien écrites, il suffit d'une seule pour que le déroulé du code se bloque.
Tu écris: "ya un débogeage du genre "erreur d'éxécution 424". Espères-tu vraiment qu'un de tes interlocuteurs connaisse par coeur la liste de toutes les erreurs signalées par VBA et te réponde: "c'est ceci ou c'est cela"
Il te faut aller dans VBA et avec l'iciône "Pas à pas" regarder comment VBA déroule ton code, quelle variable il calcule, et enfin là où il s'arrête.

A lire ton code toutes les lignes se ressemblent à la valeur prise par les variable près. Il ne sert donc à rien de mettre 4 fois la même syntaxe si celle-ci est fausse dès la 1ère ligne.
Et aussi tu écris plusieurs fois la condition "IF", il te faut écrire quand les conditions sont alternatives "If ... then ..., elseif .... then ... , else ... end if. Cela te gagnera du temps et de la compréhension pour toi-même.

Ayant peu l'habitude d'utiliser les "Private sub" mais plutôt les modules de classe "Public", je connais mal l'utilisation du "Me", néanmoins je peux te dire que lorsque tu écris:
"
If C = "PRODUITS DE CONSERVES" Then 
NATURE.Locked = True
... 
"
Si toi tu sais que "C" et "NATURE" sont le noms de tes contrôles, VBA ne le sais pas et il faut le lui dire, soit par un "Me" soit par un "ScreenActiveObject", soit par une autre écriture qui lui indique qu'il s'agit du nom d'un contrôle du formulaire ou du sous-formulaire sur lequel tu es en train de travailler. L'écriture est alors du type:
Me!Nature.Locked = True

Commence par ça, et le reste devrait suivre parce que toutes les lignes sont identiques.
Bonne suite.
0