FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Probleme avec un module VBA
 

Probleme avec un module VBA

Il y a 370 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Probleme avec un module VBA
 
Plus d'informations

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 : http://www.enregistrersous.com/images/64611109320070523211139.jpg

Voila le programme:

Code :
  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 Recordset
  7. Set bd = CurrentDb()
  8. 'mise a jour des places disponibles'
  9. MsgBox ("Saisissez le nombre de places" )
  10. nbre_places_disp = InputBox("Combien de places voulez vous ?" )
  11. rqpr1 = "SELECT UPDATE SEJOURS.code_sejour, nbre_places_max, nbre_places_disp" & _
  12. "FROM SEJOURS" & _
  13. "ORDER BY nbre_places_disp"
  14.  
  15.   MsgBox rqpr1
  16. Set Tabrqpr1 = bd.OpenRecordset(rqpr1)
  17. nbre_places_disp = nbre_places_max - nbre_places_disp
  18. MsgBox ("Le nombre de place disponible est de" & nbre_places_disp)
  19. End Sub


Message édité par shuin le 23-05-2007 à 22:24:45

Profil : Pointeur
Plus d'informations

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


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
zeb
Profil : Modérateur libre

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


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

a écrit :

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 .

Plus d'informations

a écrit :

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:


Message édité par shuin le 23-05-2007 à 22:42:36
Profil : Pointeur
Plus d'informations

bha tu crois mal ...

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


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

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

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.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Code :
  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.   nbre_places_disp = InputBox("Combien de places voulez vous ?" )
  8.   rqpr1 = "SELECT SEJOURS.code_sejour, nbre_places_max, nbre_places_disp " & _
  9. "FROM SEJOURS " & _
  10. "ORDER BY nbre_places_disp"
  11.  
  12. Set Tabrqpr1 = currentdb.createQueryDef("",rqpr1).openrecordset(dbopendynaset)
  13. 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 :
  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.

Message cité 1 fois
Message édité par Freeman23 le 24-05-2007 à 09:02:07

---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

a écrit :

Code :
  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 :

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


Message édité par shuin le 25-05-2007 à 02:04:53
Plus d'informations

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


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
zeb
Profil : Modérateur libre

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 )


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Je vois que la mauvaise foi n'a pas mis longtemps à surgir :D


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
zeb
Profil : Modérateur libre

:ouch: Quelle mauvaise foi !?


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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 )


---------------