Access code VBA dans état

Résolu/Fermé
Signaler
Messages postés
3
Date d'inscription
samedi 19 janvier 2013
Statut
Membre
Dernière intervention
12 mai 2020
-
Messages postés
192
Date d'inscription
lundi 17 décembre 2012
Statut
Membre
Dernière intervention
19 janvier 2013
-
Bonjour,
Je suis débutante en Access et en VBA. J'ai créé un état et je voudrais qu'une zone de texte de l'état ne s'affiche que si le contrôle de cette zone est positif. En m'inspirant d'un exemple trouvé sur Internet, j'ai essayé pour commencer de définir une fonction Niveau() toute simple :
Function Niveau()
If Me.Somme_De_Débit > Me.Somme_De_Crédit.Value Then
Else: Niveau() = Me.Somme_De_Débit.Value
End If

End Function
Dans l'état, en mode création, j'ai mis dans la zone de texte (à la place de "Indépendant") : =Niveau()

Mais j'obtiens une erreur dans l'état.

Que dois-je faire ?

Merci d'avance

3 réponses

Messages postés
192
Date d'inscription
lundi 17 décembre 2012
Statut
Membre
Dernière intervention
19 janvier 2013
22
Bonsoir,
Il n'y a rien d'étonnant à ce que Access vous signale une erreur, c'est le contraire qui l'aurait été. (LOL)
Je me permettrais qq conseils d'un vieux routier autodidacte puisque vous dites que vous êtes débutante.
1) Entrainez-vous avec des macros que vous convertissez en VBA, et apprenez à les lire. Quand vous serez aguerrie à cet exercice, reprenez ce que vous avez obtenu par ce moyen et complexifiez fur à mesure. Puis d'un besoin à un autre, reprenez et adaptez encore et encore, comme des briques de Lego. Tout le monde fait comme cela et finalement, il y a pas beaucoup d'écriture de code totalement neuf et original.
2) Vous n'avez pas vraiment choisi la facilité en reprenant un morceau de code VBA pour un état, qui sert surtout sinon exclusivement pour la mise en page, et l'adaptation de partie d'état en fonction de la valeur de certains contrôles de la partie en question. La principale difficulté, je trouve, est dans le fait qu'il faut bien viser la partie qui ne prend pas le même nom en VBA et sur l'état. Entrainez-vous plutôt avec des actions sur des formulaires, c'est bien plus facile que sur des états.
3) Comme si ce n'était pas suffisant vous allez directement à la mise en place d'une fonction, si j'ai bien lu votre code, avec "=Niveau() " et "indépendant" pour lequel votre lecteur ignore ce qu'il représente, ce qui fait qu'on ne sais pas de quoi il s'agit. Alors, c'est plutôt difficile de vous corriger sur ce point.
4) Enfin, le morceau de code lui-même;

La syntaxe du "si" est la suivante
If condition1 then
........action_1 ou résultat_1
Elseif condition2 then
........action2 ou résultat2
elseif ...... then
......
else
............action_N ou résultat_N
End if

Je plaisantais parce que vous avez écrit:
Else: Niveau() = Me.Somme_De_Débit.Value
sur la même ligne et avec ":" par dessus le marché.
Immanquablement Access bute et c'est normal; il ne faut rien mettre derrière "Else". Donc, même sans rien comprendre de ce que vous vouliez obtenir, il était facile de voir un des points principaux où votre code ne va pas.
5) Et pour finir un dernier conseil. Quand vous avez des "SI" ou des "with", des boucles, etc, ménagez-vous toujours des marges et des retraits comme je viens de vous écrire, vous verrez beaucoup mieux ce que vous avez écrit et vous vous y retrouverez bien plus facilement dans votre propre écriture. Surtout quand vous aurez à faire des conditions ou d'autres choses imbriquées. Vous devez toujours savoir que s'ils sont imbriqués, ils ne doivent pas se chevaucher, mais rester encastrer les uns dans les autres comme des boites. (Ici, j'ai été obligé de mettre des .... Parce que CCM ne garde pas les espaces sinon il s'agit bien d'espaces.

En espérant vous avoir été un peu utile.
Bon courage.
0
Messages postés
16195
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 janvier 2022
1 580
Bonjour vansav

() en trop apres le Else:

Function Niveau() 
  If Me.Somme_De_Débit > Me.Somme_De_Crédit.Value Then 
  Else: Niveau = Me.Somme_De_Débit.Value 
  End If 
End Function




Bonjour Tessel75,

Else: Niveau() = Me.Somme_De_Débit.Value
sur la même ligne et avec ":" par dessus le marché.
seules les () posent probleme, les : apres le Else sont acceptes, de meme si vous en mettez apres un Case ex:

Sub test() 
  Select Case x 
    Case 1: z = s 
    Case 2: z = d 
    Case 3: z = e 
  End Select 
End Sub


Bonne suite
0
Messages postés
3
Date d'inscription
samedi 19 janvier 2013
Statut
Membre
Dernière intervention
12 mai 2020

Merci beaucoup pour vos réponses : en supprimant la condition else if j'avais toujours une erreur mais en supprimant les () après le nom de la fonction, ça marche !
0
Messages postés
192
Date d'inscription
lundi 17 décembre 2012
Statut
Membre
Dernière intervention
19 janvier 2013
22
Et bien je ne savais pas qu'on pouvais mettre " : " et aussi numéroter les conditions. ça fait toujours du bien d'apprendre.
Bonne suite à tous les deux.
0