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
Configuration: Windows XP
Internet Explorer 7.0

15 réponses

  1. 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
    1. 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
  2. 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
  3. 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
    1. 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
  4. 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
    1. 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
    2. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
    1. 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
  16. 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