Se connecter avec
S'enregistrer | Connectez-vous

Probleme avec un module VBA

Dernière réponse : dans Programmation

Bonjour
Je vien de faire ce programme en VBA sur acces mais il y’a un petit problème.
Est-ce que vous pouvez m’aider à le résoudre ?
Svp j’en ai besoin pour demain
Merci d’avance
Il y’a ce message qui s’affiche :

Voila le programme:
  1. Sub Mise_a_jour_places_dispo()
  2.  
  3. Dim nbre_places_max As Integer 'nombre de palces maxi'
  4. Dim nbre_places_disp As Integer 'nombre de places disponibles'
  5. Dim bd As Database
  6. Dim rqpr1 As String
  7. Dim Tabrqpr1 As Recordset
  8.  
  9. Set bd = CurrentDb()
  10.  
  11. 'mise a jour des places disponibles'
  12. MsgBox ("Saisissez le nombre de places")
  13. nbre_places_disp = InputBox("Combien de places voulez vous ?")
  14.  
  15. rqpr1 = "SELECT UPDATE SEJOURS.code_sejour, nbre_places_max, nbre_places_disp" & _
  16. "FROM SEJOURS" & _
  17. "ORDER BY nbre_places_disp"
  18.  
  19. MsgBox rqpr1
  20.  
  21.  
  22. Set Tabrqpr1 = bd.OpenRecordset(rqpr1)
  23.  
  24. nbre_places_disp = nbre_places_max - nbre_places_disp
  25.  
  26. MsgBox ("Le nombre de place disponible est de" & nbre_places_disp)
  27.  
  28.  
  29. End Sub

Autres pages sur : probleme module vba

Lassé par la pub ? Créez un compte

Citation :
1/ balise [code]
2/ elle est sensée faire quoi ta requete ?


Merci KangOl pour ta reponse ,
ma requete est sensée permettre de mettre à jour le nombre de places disponibles pour chaque séjour en tenant compte des inscriptions effectuées .

Je suis un peu desordonné, enfin ce programme vba que j'ai fais devra normalement me permettre de mettre à jour le nombre de places disponibles pour chaque séjour en tenant compte des inscriptions effectuées, je ne suis meme pas sure qu'il faut mettre une requette sql dans ce programme la,
svp aidez moi je n'en est besoin pour demain matin. Merci
Expert Programmation

Ligne 15, il y a écrit "SELECT UPDATE ... ORDER BY ...". Je doute fort que ton SGBD puisse comprendre ça.

D'après la suite du code, ceci devrait retourner des valeurs, donc le UPDATE n'a rien à faire là.

Tu parles maintenant de mise à jour... Donc il faudra faire un UPDATE, c'est sûr. Donc le problème est bien SQL, pas VB, CQFD.

  1. Sub Mise_a_jour_places_dispo()
  2. Dim nbre_places_max As Integer 'nombre de palces maxi'
  3. Dim nbre_places_disp As Integer 'nombre de places disponibles'
  4. Dim bd As Database
  5. Dim rqpr1 As String
  6. Dim Tabrqpr1 As DAO.Recordset
  7.  
  8. nbre_places_disp = InputBox("Combien de places voulez vous ?" )
  9. rqpr1 = "SELECT SEJOURS.code_sejour, nbre_places_max, nbre_places_disp " & _
  10. "FROM SEJOURS " & _
  11. "ORDER BY nbre_places_disp"
  12.  
  13. Set Tabrqpr1 = currentdb.createQueryDef("",rqpr1).openrecordset(dbopendynaset)
  14.  
  15. End Sub

Jusque là ca semble correct globalement, attention au espace entre les sauts de ligne sur ta requête.Mais après je ne comprend pas trop. Est ce que ta requête ne renvoie qu'une seule valeur ? Logiquement tu devrais obtenir une liste de séjour avec des places restantes. Donc soit tu veux un total global, soit une liste par ligne, dans ce cas il faut savoir ou tu veux l'afficher.

Mais d'ors et déjà tu auras besoin de ceci concernant les recordsets.
  1. Tabrqpr1.close 'fermeture
  2. Tabrqpr1.movefirst ' placage sur le premier élement
  3. Tabrqpr1.EOF ' Fin du recordset
  4. Tabrqpr1.movenext ' enregistrement suivant
  5. Tabrqpr1.addnew ' Nouveau
  6. Tabrqpr1.edit ' modification enregistrement
  7. Tabrqpr1.update ' Validation modification ou création.

novice_33 a dit :
  1. Est ce que ta requête ne renvoie qu'une seule valeur ?


Oui ma requete renvoie qu'une seule valeur.

la je vien de retravailler tout mon programme , il là l'aire de marcher mais je ne sais pas s'il remplie bien sa fonction qui est de "permettre de mettre à jour le nombre de places disponibles pour chaque séjour en tenant compte des inscriptions effectuées".

voila le pro :
  1. Sub Mise_a_jour_places_disp()
  2.  
  3. Dim nbre_places_max As Integer 'nombre de palces maxi'
  4. Dim nbre_places_disp As Integer 'nombre de places disponibles'
  5. Dim nbre_insc_effec As Integer 'nombre d'inscription effectuer'
  6. Dim bd As Database
  7. Dim rqpr1 As String
  8. Dim Tabrqpr1 As DAO.Recordset
  9. Dim x As String
  10.  
  11. 'mise a jour des places disponibles'
  12.  
  13. nbre_places_max = InputBox("Saisissez le nombre de places Maxi")
  14. Do
  15. nbre_insc_effec = InputBox("Combien de places voulez vous ?")
  16.  
  17. nbre_places_disp = nbre_places_max - nbre_insc_effec
  18.  
  19. rqpr1 = "SELECT SEJOURS.code_sejour, nbre_places_max, nbre_places_disp " & _
  20. "FROM SEJOURS " & _
  21. "ORDER BY nbre_places_disp"
  22.  
  23. Set Tabrqpr1 = CurrentDb.CreateQueryDef("", rqpr1).OpenRecordset(dbOpenDynaset)
  24.  
  25. MsgBox ("Le nombre de place disponible est de " & nbre_places_disp)
  26. nbre_places_max = nbre_places_disp
  27. x = InputBox("Continuer l'operation O/N ?")
  28. Loop While x = "o"
  29.  
  30. End Sub


Et autre chose dans le programme qu'est ce que font ces choses la , leurs roles dans le programme :

Dim bd As Database
Dim rqpr1 As String
Dim Tabrqpr1 As DAO.Recordset

Et

Set Tabrqpr1 = CurrentDb.CreateQueryDef("", rqpr1).OpenRecordset(dbOpenDynaset)

Merci

Bonjour,

Ce que je ne comprends pas bien dans ton programme, c'est la logique que tu appliques et les messages box.
Donc si je résume tu as une table séjour contenant un code séjour, nbmax place et nb restant place, N'y a t'il pas un table concernant les reservations ou achat de place ?

Enfin pour tes questions.

  1. Dim db as database ' inutile ici
  2. Dim rqpr1 As String ' Chaine de caractère pour la constitution de ta requête (supprimable)
  3. Dim Tabrqpr1 As DAO.Recordset ' Recordset consulte aide en ligne.
  4.  
  5. Set Tabrqpr1 = CurrentDb.CreateQueryDef("", rqpr1).OpenRecordset(dbOpenDynaset)

OpenRecordset permet d'ouvrir un recordset sur une table ou une requête de sélection. Le recordset c'est un peu comme le pointeur (fleche noire) quand tu consultes le contenu de tes tables. Donc ca te permet d'effectuer des traitements sur une table complète.

Dans ton problème il me semble que ca doit servir, puisque une fois que tu as ouvert ce recordset tu devrais parcourir les enregistrements et mettre à jour pour chaque séjour le nombre de places restantes.
Expert Programmation

Citation :
pointeur

On dit "Curseur".

Euh, ce n'est pas pour te reprendre, c'est juste parce que c'est le jargon en base de données. ;) 

( Quand il jettera ACCESS aux orties :lol:  et qu'il utilisera un vrai SGBD, il faudra qu'il utilise des CURSORs, alors autant être précis )

Lu je suis nouveau sur ce site et en programmation VBA
J'aimerai savoir comment on enregistre un fichier dans un endroits donner grace a une macro
Merci d'avance

(si ce n'est pas claire dites le, ou si il faut que j'envoi le code dites le aussi )
Expert Programmation

Shuin>> donne un nom moins générique à ton sujet.
Ca évitera aux nouveaux venus de croire qu'il est judicieux de poster leurs questions dans ton topic.

Hoegarden>> Bienvenue. Tu as le droit de créer ton propre sujet pour poser ta question. Donne lui un titre judicieux :sarcastic: 

novice_33 a dit :
Bonjour,
Donc si je résume tu as une table séjour contenant un code séjour, nbmax place et nb restant place, N'y a t'il pas un table concernant les reservations ou achat de place ?


voila le model relationnel de la table SEJOURS :
SEJOURS (code_séjour, date début, date fin, prix du séjour, nombre de places maxi, nombre de place disponibles, code lieu)
Clé primaire : code_séjour
Clé étrangère : code lieu en référence à code lieu de la relation LIEUX

et il n'y a aucune table concernant les reservations ou achat de place
Lassé par la pub ? Créez un compte