Access avis aux amateurs structure de fractio
Antoine
-
LatelyGeek Messages postés 1774 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Access avis aux amateurs structure de fractio
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Access runtime ✓ - Forum Access
- Access appdata - Guide
- Exemple base de données access à télécharger gratuit ✓ - Forum Logiciels
15 réponses
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.
Donne moi les noms des champs et de la table si tu veux que je t'écrive la formule.
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
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
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
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
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
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
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?
(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?
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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.
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.
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
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
Je vois pas d'où vient le problème. Il doit y avoir quelque chose puisque chez moi, ça fonctionne, mais quoi?
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
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
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...
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...
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
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
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?
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?
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?
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?
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.
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.
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