Problème sous Access 2007

Bonjour tout le monde!

J'ai un petit problème avec une base de données ( pour un classement sportif ) que j'essaie de créer sous Access 2007. Ayant découvert ce logiciel depuis peu, je n'y connais pas grand chose. Voici ce que je voudrais faire :

J'ai créé une table "Points" avec les champs "ID", "NOM / Prénom" et "Points".

J'ai ensuite commencé à faire un formulaire : je choisis dans une liste déroulante une valeur du champ "NOM / Prénom", et j'aimerais que, en cliquant, par exemple sur un bouton "Valider", un nombre de points (déterminé auparavant) soit attribué automatiquement en plus de la valeur existante du champ "Points" associé au NOM / Prénom

Je vais donner un exemple, vous comprendrez peut-être mieux :)

Mr. "MUCHE Truc" a 10 points. Dans la liste déroulante du formulaire, je choisis son nom. J'ai décidé auparavant qu'en cliquant sur Valider, 50 points seraient attribués. Une fois son nom choisi, je clique donc sur Valider, et hop ! MUCHE Truc se retrouve avec 60 points ( 10 + 50 ).

Quelqu'un saurait-il quelle procédure effectuer ? Que créer ? Quel code (je suppose qu'il faut une macro ou un truc du genre pour ca ) faut-il taper ??

Voilà, en espérant m'être fait comprendre!!

Merci d'avance !
Configuration: Windows XP
Internet Explorer 7.

28 réponses

Résumé de la discussion

La discussion porte sur Access 2007 : comment ajouter automatiquement des points à la valeur existante du champ Points pour la personne choisie via une liste NOM / Prénom dans un formulaire. Des solutions pratiques existent, notamment un code sur le bouton Sur Clic qui additionne 50 au champ Points de l'enregistrement, ou une zone de texte pour saisir une valeur variable et l'utiliser dans l'expression. Certaines réponses traitent des cas d'erreur (erreur d'exécution '2465') et de la nécessité de faire référence au formulaire et champ corrects pour éviter les références non valides. Des échanges soulignent aussi que la solution choisie dépend de la manière dont le formulaire est lié à la table et du contrôle utilisé pour sélectionner l'enregistrement.

Bobot (l’IA à votre service)
  1. http://www.cijoint.fr/cjlink.php?file=cj200809/cijgnAfOQ5.zip

    Voici le lien vers ma base.
    0
    1. Bonjour,
      Voici la procédure correcte pour votre cas :

      Private Sub Valider1_Click()
      DoCmd.RunSQL "UPDATE Compta SET Compta.Points = Compta.Points + 50 WHERE (((Compta.[ID]) = [Formulaires]![Form1]![List1]))"
      End Sub

      0
  2. Après avoir un peu fouiné, voici ce que j'ai rentré comme code VBA, dans la propriété sur Clic du Bouton. J'ai inséré du SQL dans le code :

    Private Sub Valider1_Click()
    Dim Var1 As String
    Var1 = List1.Value
    DoCmd.RunSQL "UPDATE Compta SET Compta.Points = Compta.Points + 50 WHERE (((Compta.Nom_Prenom)=' & Var1 & '))", True
    End Sub
    


    Le problème, c'est que quand je clique sur le Bouton Valider1 après avoir sélectionné un nom dans la liste déroulante, il me dit : Vous allez mettre à jour 0 lignes. Il devrait pourtant y avoir une ligne mise à jour!

    J'ai l'impression que c'est au niveau de la variable que j'ai créée que quelque chose ne va pas.

    Qu'est ce qu'il faut corriger ?
    0
    1. Bonjour,
      Juste en attendant, il n'est pas possible de trouver l'erreur dans votre code sans connaitre se qui se trouve exactement sur votre formulaire !
      0
  3. Je ne peux pas poster de fichier .accdb sur cijoint.fr..
    0
    1. Bonjour rougv86,
      Vous compressez votre base sur ZIP comme préciser dans la liste :
      Les formats acceptés sont :
      ".odt", ".ods", ".odp", ".odg", ".odb", ".sxc", ".sxw", ".sxi", ".sxd", ".oxt"
      ".txt", ".dbf", ".pdf", ".zip", ".mid" ,".ogg", ".wma", ".mp3, ".png", ".jpg", ".gif", ".bmp"
      ".doc", ".xls", ".ppt", ".pps", ".rtf"
      --

      Salutations.
      Jean-Pierre
      0
  4. Mais quelle info veux-tu donc "me soutirer" ?? Je ne comprends pas!

    et tu dis : "Si, si quelque part on indique à Access quelles valeurs". Ou c'est, ce quelque part ? Ou faut-il indiquer les valeurs à ajouter ?
    0
    1. Bonjour,
      Les conseils de LatelyGeek sont judicieux ...
      Pouvez-vous mettre votre base sur www.cijoint.fr et poster le lien.
      Il serat peut plus simple de vous aider ...
      0
  5. Si, si quelque part on indique à Access quelle valeur, et c'est ça que je n'arrive pas à te soutirer comme info.

    Comme c'est toi qui décide du nombre de points, comment voudrais tu qu'Access "devine"???
    0
    1. Normalement, oui, puisque lorsque que je n'ai qu'un enregistrement, ca marche parfaitement. Mais, alors, ce n'est pas possible, dans un même formulaire, d'attribuer des valeurs différentes à plusieurs enregistrements ?
      0
      1. Mais qu'est ce qu'il ya dans ton formulaire????????? Tu as fait comme j'ai dit dans le post 6????

        Si tu as à l'écran UN enregistrement, c'est à celui là que seront attribué les X points.
        0
        1. Si j'écris + 30 sur un bouton et + 50 sur l'autre, quand je clique sur le bouton +30, ca ajoute 30 points au gars qui est concerné par le + 30, mais aussi au gars qui est concerné uniquement par le +50. Mais je ne veux ajouter + 30 qu'à une seule personne ! pas à tout le monde! et idem pour le +50. Je voudrais pouvoir avoir des "ensembles" : une liste déroulante ou je choisis un nom, et un bouton +50 par exemple qui ajoute 50 points uniquement à ce nom ; une autre liste déroulante ou je choisis un nom, et un bouton +30 qui ajoute 30 points uniquement à ce nom.. etc etc. Or, je n'arrive pas à ce qu'Access différencie ces différents "ensembles"
          0
          1. Si je mets sur un bouton Me!Points.Value = Me!Points.value + 50, et sur un autre bouton, Me!Points.Value = Me!Points.value + 30, ca ne marche pas. Comment faire ?

            Toutes les solutions que je t'ai données jusqu'à présent fonctionnent chez moi, et je ne comprends vraiment pas du tout où est ton problème. Si tu écris +30 sur un bouton et +50 sur un autre, qu'est ce qui ne marche pas?????
            0
            1. Les points sont attribués, en quelque sorte, "en fonction de rien", c'est moi qui détermine combien de points ajouter "sur clic" de tel ou tel bouton. Le nombre de points à ajouter n'est pas une variable, il est une valeur fixe dans le code.

              L'idée du formulaire et du bouton n'était juste qu'une solution, une requête de mise à jour me satisferait aussi, le seul problème, c'est que je ne sais pas non plus quel code taper. Cette idée m'avait été donnée sur un autre forum où j'ai soumis mon problème, mais personne ne m'a répondu quand j'ai demandé des précisions.

              D'autre part, tu me dis : "Sinon, tu fais un bouton "+30", un bouton "+50" etc, avec un code différent à chaque fois" : c'est justement ça que je cherche à faire. Mais le problème, c'est que je ne sais pas comment faire pour différencier ces boutons, histoire qu'il ne m'ajoute pas +30 ou +50 à tout le monde, mais juste à une personne. Si je mets sur un bouton Me!Points.Value = Me!Points.value + 50, et sur un autre bouton, Me!Points.Value = Me!Points.value + 30, ca ne marche pas. Comment faire ?
              0
              1. Je ne comprends pas. En fonction de QUOI sont attribués les points?????

                Pourquoi passer par un formulaire et un bouton??? Pourquoi pas une requête Mise à Jour????

                Sinon, tu fais un bouton "+30", un bouton "+50" etc, avec un code diffréent à chaque fois, et tu cliques sur celui que tu veux après avoir sélectionné la personne dans la liste, mais j'avoue ne pas bien saisir le pourquoi du comment, dans ton truc.
                0
                1. Ben non, si je pouvais éviter de devoir à chaque fois mettre la valeur à attribuer, ca serait mieux. J'aimerais bien pouvoir déterminer dans un code, pour chaque bouton, combien de points sont attribués "Sur Clic".

                  Mais à la limite, c'est pas ca le plus important.
                  Ce qui ne vas pas pour l'instant, c'est que je n'arrive pas à dissocier les différentes listes déroulantes, pour qu'il n'attribue pas la valeur souhaitée à tous les enregistrements sélectionnés dans les différentes listes déroulantes

                  L'idéal, ca serait de pouvoir faire un code tel que, pour chaque liste déroulante, on puisse attribuer une valeur souhaitée (sans avoir recours à InputBox("Combien de points?") ). Ce serait possible ?

                  En tout cas, merci beaucoup de ta patience :=)
                  0
                  1. Le but de ça, c'est qu'Access te pose la question à chaque fois:
                    InputBox("Combien de points?")
                    0
                    1. oui, mais le problème, c'est que quand je fais ca, il attribue automatiquement 50 points, non seulement à la valeur choisie dans la première liste déroulante, mais aussi à toutes les autres valeurs . En résumé, c'est comme si j'attribuais 50 points à tout le monde. Or, je voudrais pouvoir attribuer des nombres de points différents aux Noms choisis dans chaque liste déroulante, et non pas ajouter 50 partout. Tu saisis ?
                      0
                      1. Essaye

                        Me!Points.Value = Me!Points.Value + InputBox("Combien de points?")
                        0
                        1. Ben j'veux juste pouvoir, en gros, faire un formulaire "de classement" :

                          On choisit dans la liste déroulante qui est 1er, et on lui attribue un nombre de points
                          On choisit dans une autre liste déroulante qui est le deuxieme, et on lui attribue un nombre de points (différent)
                          Et caetera...

                          Les valeurs des points à attribuer sont fixes, je les détermine par moi même.
                          0
                          1. Oui, c'est possible, si on a un moyen d'expliquer à Access en fonction de quoi il choisit les points (ancienneté ou autre)

                            Explique moi STP
                            0
                            1. Ah ca y'est, j'ai compris ! Et ca marche !

                              En revanche, est ce qu'il est possible d'attribuer à différentes personnes des valeurs différentes, sur le même formulaire ??

                              Ex:

                              On choisit, "MUCHE Truc" dans une liste déroulante 1, on lui attribue 50 points
                              On choisit "MACHIN Truc" dans une liste déroulante 2, on lui attribue 30 points
                              On choisit "TRUC Bidule" dans une liste déroulante 3, on lui attribue 15 points , etc etc.. et tout ca dans le même formulaire

                              Comment faut il procéder pour pouvoir faire ça ??
                              0
                              1. Je vais passer pour un gros boulet, mais : comment créer un formulaire "basé sur la table Compta" ? :)

                                Désolé, j'y connais vraiment rien.
                                Merci!
                                0
                                • 1
                                • 2