Access avis aux amateurs structure de fractio

Antoine -  
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J,aimerai faire une structure de fractionnement sous access. Je m'explique:

Ma table principale est "Risques". elle dispose de 4 champs
le premier est la description du risque
le deuxieme et l'appartenance du risque a un groupe (chiffre enter 1 et 4 )
le troisieme et l'appaternance du risque a un sous groupe (chiffre entre 1 et 9)
mon 4ieme champ est le nom risque

c'est le 4ieme champ qui m'interesse:
j'aimerai que ce champ montre l'appartenance de mon risque aux group et sous groupes et qu'il se remplisse automatiquement.
J'aimerai donc que ce champ soit un texte de la forme suivate:

2.3.5
ou
2 represente le chiffre qui se trouve dans mon deuxieme champ (le groupe)
3 represente le chiffre qui se trouve dans mon troisieme champ (le sous groupe)
et 5, (c'est la que sa se complique), doit representer le numero de mon risque dans la structure 2.3

si j'ai deux risques qui appartiennent aux group et sous groupes 2.3, j aimerai que mon premier risque s appel 2.3.1 et le deuxieme 2.3.2
par contre si apres dans ma table j ai un noubeu risque mais qui appartien aux groupes et sous groupes 1.3 j aimerai qu'il y ait dans le champ 4 le nom : 1.3.1 il faut que ca revienne a 1 si on change de groupe

exenple dans le tableau si dessous

champ 2 champ 3 champ 4
1 2 1.2.1
1 2 1.2.2
2 2 2.2.1
1 2 1.2.3
1 3 1.3.1
2 2 2.2.2

j aimerai que le champ 4 m affiche les resultats comme cidessus

voila je sais pas si j ai été assez clair mais si ca interesse quelqu'un ca m arrangerait enormement

j ai reussi a le faire sous excel mais ca prend des grosses formules et j sais pas si ca existe sous acces et je pensse que ca devrait etre possible avec une macro

merci et dites moi s il faut plus d informations

Antoine
A voir également:

15 réponses

LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
La dernière valeur doit être générée avec la fonction MaxDom (Ou DMax si tu le fais en SQL) +1

Donne moi les noms des champs et de la table si tu veux que je t'écrive la formule.
0
Antoine
 
Excellent ce bon vieux latelyGeek, toujours present!!!!

bon ma table s'appel "Registre",
mes champs s'appellent:

Type
Major group
Component

et le champ que je veux est "RBS"
il me faut donc:

dans table Registre,

RBS=Type.Major group.Component.1

le 1 doi etre le max des autres RBS dans Type.Major group.Component +1

si tu peux faire quelque chose avec ca!!!

sinon tu dois surement avoir la solution a mon autre probleme


"

Bonjour,

J'ai crée sous access un formulaire qui se base sur ma table principale "Risque"
Dans ce formulaire j ai crée un bouton avec la macro suivante:

Private Sub Commande345_Click()
On Error GoTo Err_Commande345_Click

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

Exit_Commande345_Click:
Me!RiskRankingbm.Value = Me!RiskRankingbmcalc
Me!Riskrankingam.Value = Me!Riskrankingcalcam
Exit Sub

Err_Commande345_Click:
MsgBox Err.Description
Resume Exit_Commande345_Click

End Sub

c'est ma commande 345 qui doit actualiser dans un premier temps mon formulaire (pour faire des calculs plus vite) et qui ensuite doit prendre deux valeurs calculées dans mon formulaire (RiskRankingbmcalc et Riskrankingcalcam) et les copiers dans ma table principale sous les noms RiskRankingbm et Riskrankingam qui sont des champs.

Cette commande marche mais mon probleme c'est que le copiage de Riskrankingam et Riskrankingam ne se fait que pour le champs dans lequel je suis qu'en j appui sur le bouton. J'aimerai que cela s'applique directemetn a toute la table des que j'appui

est ce que quelqu'un sait ce qu il faut rajouter a ma macro?

Merci

Antoine

"


Merci Laty
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Eh oui, encore cette bonne vieille LatelyGeek (Une gonzesse, je tiens à le préciser!)

Je réponds d'abord à ta deuxième question parce que c'est plus rapide:

"Me!UnNomDeChamp" fait précisément référence au champ de l'enregistrement actif.
Si tu as besoin d'écrire le résultat des calculs de tous les enregistrements du sous formulaire, je te conseille de le faire avec une requête, qui fera référence au formulaire actif.

Par exemple, si tu veux calculer les risques pour le client présent dans le formulaire principal, dans ta requête Mise à jour tu indiques le calcul qui doit mettre les champs à jour et sur le champ Client tu mets un critère de type forms!NomDuFormulaire!Client

Bon, je réfléchis à l'autre question et je reviens
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Pour nous simplifier la vie, j'ai créé dans le formulaire un champ que j'ai appelé Clé qui contient Type&MajorGroup. Ca servira dans le critère du DMax

Private Sub MajorGroup_AfterUpdate()

If IsNull(DMax("Right(RBS,1)", "Clients", "Type & MajorGroup = Clé")) Then
RBS.Value = Me!Type & "." & Me!MajorGroup & "." & 1

Else
RBS.Value = Me!Type & "." & Me!MajorGroup & "." & Val(DMax("Right(RBS,1)", "Clients", "Type & MajorGroup = Clé")) + 1

End If

End Sub
0
anocheda
 
Hé bien enchanté jolie Lately...

merci pour les deux reponses ca m aide beaucoup,
pour la premiere c est excellent ca marche tres bien
pour celle la j ai un petit probleme

quand je change majore group c beug avec la premiere ligne du code en jaune..
qu est ce que tu appel client? c'est ma table sur laquele est basé le formulaire ou autre chose?

Right(RBS,1) ca veut dire quoi?
et a quo iset ton champ clé puisqu il n apparait dans aucunes formules?

merci encore,

Antoine
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Ben moi je le vois là, le champ Clé... (Qui n'est pas un champ, d'ailleurs, mais une variable)

(DMax("Right(RBS,1)", "Clients", "Type & MajorGroup = Clé")

Oui, Clients est le nom de la table. Chez toi c'est Registre, bien sûr, qu'il faut mettre. Quelle truffe, je suis encore allée trop vite.

Et Right(RBS,1) ça veut dire d'extraire le caractère de droite de RBS, c'est à dire son numéro d'ordre.

Tu fais bien de poser la question, parce qu'évidemment à partir de la dixième valeur ça va merdouiller.
Est ce que ça va dépasser les 10?
0
anocheda
 
ce que je veux dire c que clé il sert a rien puisque apres tu lui redonne une valeur, autant garder Type & MajorGroup et pas faire appel a clé
sinon oui ca peut depasser les 10 ca devrai merder
mais surtout ca marche pas il me di qu il y a un bug sur la premiere ligne (ifnul....)
donc je sais pas quoi faire

mais merci tout de meme
0
anocheda
 
ce que je veux dire c que clé il sert a rien puisque apres tu lui redonne une valeur, autant garder Type & MajorGroup et pas faire appel a clé
sinon oui ca peut depasser les 10 ca devrai merder
mais surtout ca marche pas il me di qu il y a un bug sur la premiere ligne (ifnul....)
donc je sais pas quoi faire

mais merci tout de meme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Si tu ne crées pas le champ Clé dans le formulaire, ça ne risque pas de fonctionner...
0
anocheda
 
Salut Lately

Ca marche toujours pas

j ai cré un champ "Max" dans mon formulaire
et sur un bouton j ai mi le code :
Max.Value = DMax("Right([RBS],1)", "Registre", "RBSType & RBSMajorGroup & RBSComponent = Cle")

j ai crée aussi le champ cle

Si dans mon formulaire je donne la valeur au champ "cle" =[RBSType] & [RBSMajorGroup] & [RBSComponent]

alors quel que soit mon numero j ai Max =1

si je ;et pas de valeur au champ Cle dans mon formulaire,
jai toujours la valeur pour Max = 9

voila je comprend pas pourquo ica marche pas y a u nprobleme avec la fonction Dmax

merci de ton aide
Antoine
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Max.Value = DMax("Right([RBS],1)", "Registre", "RBSType & RBSMajorGroup & RBSComponent = Cle")

Tu n'as pas à rajouter RBS Component. Au contraire!
Le but, c'est de trouver RBS Component, justement.
Donc on cherche la valeur maxi du RBS Component pour le Type et MajorGroup.

Paer exemple, si tu as déjà 1.1.1 et 1.1.2 et que ton nouveau produit est de Type 1 et MajorGroup 1, on cherche la plus grande valeur du caractère de droite pour les produits commençant par 1.1, pas par 1.1.2. Et ça donne 2, auquel on rajoute 1 pour avoir 3.

Enlève RBSComponent, et tiens moi au courant.
0
anocheda
 
non j'ai bien compri l idée!!!
mais en fait RBSComponent ca fait parti de ma structure
RBS il est divisé en 4
Type, majorgroup ,component et apres on donne un numero
je l avais pas mi avant poour simplifier dsl

donc mais produits ils s appellent 1.1.1.1 et le suivant 1.1.1.2 et je veux avoir pou rla suite 1.1.1.3

mon numero avec le code ci dessus il me donne toujours 1 si je met rien dans mon formulaire pour cle et 9 si je met
= RBSType & RBSMajorGroup & RBSComponent dans le champ cle du formualire

merci
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Je vois pas d'où vient le problème. Il doit y avoir quelque chose puisque chez moi, ça fonctionne, mais quoi?
0
anocheda
 
Bé j'ai l'impression qu'il reconnait pas tres bien "cle"
j ai crée le champ cle dans mon formulaire, est ce que je dois lui donner la formule
= RBSType & RBSMajorGroup & RBSComponent dans le formulaire ? ou je dois le laisser vide

et sinon y a pas des problemes de parenthese dans ma formule, ou de crochets:

Max.Value = DMax("Right([RBS],1)", "Registre", "RBSType & RBSMajorGroup & RBSComponent = Cle")

tojours merci
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Je rajouterais un Me! devant Cle dans le DMax, mais à part ça je ne vois pas de truc manquant.

Pour être certain qu'Access a bien tous les éléments en main, force un enregistrement avant le Max.Value.

Sinon, je vois toujours pas...
0
anocheda
 
SAlut Lately

bon ca marche maintenant j ai mi un
Left(RBS,5)= Cle a la place de RBSType... et ca marche c cool !!!

il reste deux petits problemes:

le premier c que il verifi mon max dans toutes ma table et du cou psi je fais un changement dans un enregistrement anterieur il le prend en compte et il lui donne un numero superieur est ce que c'est possible de faire la recherche de mon max seulement dans les enregistrements de ma table avant celui actif
la clé de ma table c'est RONumber et c'est une incrementation automatique
est il donc possible de rajouter une fonction if dans ma formule pour avoir : fair le calcul seulement pour RONumber < RONumber actif ...

le deuxieme probleme c que ca marche plus a apartir de 9 comme tu avais dit donc est ce qu il y a une solution

je sais j suis un gros tanant mais si tu te pointe dans le coin je t offre une l'apéro lately

merci
Antoine
0
anocheda
 
pour le deuxieme probleme en fait c'est bon
je vais faire un VraiFaux du style
VraiFaux(DMax (RBS,1) > 8 ; DMax (RBS, 2) ; DMax (RBS,1)) avec bien sur les conditions du Max
ca pe marcher ca?
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Ben non, ça va pas marcher parce que si tu as 11, Right(RBS,1) va donner 1...

Je ferais comme ça:

VraiFaux(Gauche(Droite(RBS;2),1)=".";Droite(RBS;1);Droite(RBS;2))

Ca permettra de tester si l'avant dernier caractère est un ., ce qui veut dire que le numéro d'ordre est sur un caractère. Ca va fonctionner jusqu'à 99...

Et pour l'autre truc tu peux rajouter AND RONumber<Me!RONumber...

Cela dit, je ne comprends pas trop. Si tu modifies un enregistrement existant tu n'as pas besoin de changer son RBS, si?
0
anocheda
 
mon truc cété tout nul effectivement
mais y a un probleme avec le gauche droite: fo faire un Dmax dedans et ca va pas marcher si y a un point il va pas marcher mon Dmax ...
0
LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
 
Si, ça commence même à être sympa.

Max.Value = DMax("Iif(Left(Right(RBS;2),1)=".";Right(RBS;1);Right(RBS;2))", "Registre", "RBSType & RBSMajorGroup & RBSComponent = Cle")

Enfin... En espérant que ça fonctionne.
Sinon, tu crées un autre champ dans le formulaire, comme pour Clé, si DMax n'en veut pas.
0