Probleme avec un module VBA

  • Auteur de la discussion shuin
  • Date de début

shuin

Nouveau membre
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:
Code:
Sub Mise_a_jour_places_dispo()

Dim nbre_places_max As Integer 'nombre de palces maxi'
Dim nbre_places_disp As Integer 'nombre de places disponibles'
Dim bd As Database
Dim rqpr1 As String
Dim Tabrqpr1 As Recordset

Set bd = CurrentDb()

'mise a jour des places disponibles'
MsgBox ("Saisissez le nombre de places")
nbre_places_disp = InputBox("Combien de places voulez vous ?")

rqpr1 = "SELECT UPDATE SEJOURS.code_sejour, nbre_places_max, nbre_places_disp" & _
"FROM SEJOURS" & _
"ORDER BY nbre_places_disp"
  
  MsgBox rqpr1


Set Tabrqpr1 = bd.OpenRecordset(rqpr1)

nbre_places_disp = nbre_places_max - nbre_places_disp

MsgBox ("Le nombre de place disponible est de" & nbre_places_disp)


End Sub
 

KangOl

Grand Maître
1/ balise
Code:
2/ elle est sensée faire quoi ta requete ?
 

shuin

Nouveau membre
1/ balise
Code:
2/ elle est sensée faire quoi ta requete ?[/quote]

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 .
 

shuin

Nouveau membre
Commence par renommer ton sujet "Probleme avec SQL" !!!!!

c'est un probleme de VBA et je ne pense pas qu'il est un probleme avec ma requete sql enfin c'est ce que je croi. :wahoo:
 

KangOl

Grand Maître
bha tu crois mal ...

Code:
update table set column = newvalue where condition = true;
 

shuin

Nouveau membre
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
 

zeb

Modérateur
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.
 

Freeman23

Expert
Code:
Sub Mise_a_jour_places_dispo()
   Dim nbre_places_max As Integer 'nombre de palces maxi'
   Dim nbre_places_disp As Integer 'nombre de places disponibles'
   Dim bd As Database
   Dim rqpr1 As String
   Dim Tabrqpr1 As DAO.Recordset

   nbre_places_disp = InputBox("Combien de places voulez vous ?" )
   rqpr1 = "SELECT SEJOURS.code_sejour, nbre_places_max, nbre_places_disp " & _
"FROM SEJOURS " & _
"ORDER BY nbre_places_disp"
  
Set Tabrqpr1 = currentdb.createQueryDef("",rqpr1).openrecordset(dbopendynaset)

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.
Code:
Tabrqpr1.close 'fermeture
Tabrqpr1.movefirst ' placage sur le premier élement
Tabrqpr1.EOF ' Fin du recordset
Tabrqpr1.movenext ' enregistrement suivant
Tabrqpr1.addnew ' Nouveau 
Tabrqpr1.edit ' modification enregistrement
Tabrqpr1.update ' Validation modification ou création.
 

shuin

Nouveau membre

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 :
Code:
Sub Mise_a_jour_places_disp()

Dim nbre_places_max As Integer 'nombre de palces maxi'
Dim nbre_places_disp As Integer 'nombre de places disponibles'
Dim nbre_insc_effec As Integer 'nombre d'inscription effectuer'
Dim bd As Database
Dim rqpr1 As String
Dim Tabrqpr1 As DAO.Recordset
Dim x As String

'mise a jour des places disponibles'

nbre_places_max = InputBox("Saisissez le nombre de places Maxi")
Do
nbre_insc_effec = InputBox("Combien de places voulez vous ?")

nbre_places_disp = nbre_places_max - nbre_insc_effec

rqpr1 = "SELECT SEJOURS.code_sejour, nbre_places_max, nbre_places_disp " & _
"FROM SEJOURS " & _
"ORDER BY nbre_places_disp"

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

MsgBox ("Le nombre de place disponible est de " & nbre_places_disp)
nbre_places_max = nbre_places_disp
x = InputBox("Continuer l'operation O/N ?")
Loop While x = "o"

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
 

Freeman23

Expert
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.

Code:
Dim db as database ' inutile ici
Dim rqpr1 As String ' Chaine de caractère pour la constitution de ta requête (supprimable)
Dim Tabrqpr1 As DAO.Recordset ' Recordset consulte aide en ligne.

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.
 

zeb

Modérateur
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 )
 

hoegarden31

Expert
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 )
 

zeb

Modérateur
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:
 

shuin

Nouveau membre


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
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 052
Membres
1 586 393
Dernier membre
mathhh28
Partager cette page
Haut