Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/04/2011, 10h27   #1
Futur Membre du Club
 
Femme myriam aslam
Étudiant
Inscription : avril 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Femme myriam aslam
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 106
Points : 18
Points : 18
Par défaut modifier et ajouter dans un meme code

Bonjour,

J'ai créée un bouton Valider dans mon formulaire CLIENT qui engendre un code VBA.
Le code VBA me permet de modifier ou ajouter un nouveau client. Je vous explique, si le numéro de clientqui est entré par l'utilisateur existe dans la table client alors on procède à une modification, si il n'existe pas alors on ajoute un nouveau client.
LE CODE EST LE SUIVANT
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub Commande90_Click()
Dim db As Database
Dim rs As Recordset
Dim rs1 As Recordset
Dim sql As String
sql = "select * from client where Num_CLI =" & Forms!clients!Numcli & " ;"
'1er cas : modification
Set rs1 = db.OpenRecordset(sql)
If rs1.EOF = False Then
Set db = CurrentDb
Set rs = db.OpenRecordset("client")
rs.Edit
rs!CLI_NOM = Forms!clients!Nomcli
rs!FOU = Forms!clients!fou
rs!adresse = Forms!clients!add
rs!prenom = Forms!clients!prenom
rs.Update
MsgBox ("Modification réalisée")
DoCmd.Close
Else
'2ième cas : ajouter
If rs1.EOF = True Then
rs.AddNew
rs!NUM_CLI = Forms!clients!numcli
rs!CLI_NOM = Forms!clients!Nomcli
rs!FOU = Forms!clients!fou
rs!COd = Forms!clients!COd1
rs!adrese= Forms!clients!add
rs!prenom = Forms!clients!prenom
rs.Update
rs.Close
MsgBox ("Le client a bien été ajouté.")
End If
DoCmd.Close
End If
End Sub
Cependant access me dit : Variable objet ou variable de bloc with non définie!
Je ne sais pas se que sa signifie !!! :s
merci de bien vouloir m'aider!!
myriame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 10h38   #2
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
bjr,

pensez à préciser la ligne en erreur

à priori c'est la variable db qui n'est pas initialisée à la ligne 8
le "set db = currentdb" devrait se situer plus haut

sinon je pense qu'un seul recordset suffit pour l'édition et l'ajout
l'édition ne fonctionnera pas en l'état, le edit doit se faire sur le rs1 pour editer le bon client, sinon il éditera le premier trouvé (rs ne filtrant pas sur le num client)
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 10h49   #3
Futur Membre du Club
 
Femme myriam aslam
Étudiant
Inscription : avril 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Femme myriam aslam
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 106
Points : 18
Points : 18
En effet c'est bien à la ligne 8 qu'il y a une erreur mais après avoir replacer plus c'est-à-dire
Code :
1
2
3
4
5
6
7
Private Sub Commande90_Click()
Dim db As Database
Dim rs1 As Recordset
Dim sql As String
Set db = CurrentDb
'1er cas : modification
Set rs1 = db.OpenRecordset(sql)
sa ne fonctionne toujours pas !!
access continue a me dire variable objet ou variable de bloc with non défini! :s
myriame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 11h19   #4
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
au cas où il y ait à la fois ADO et DAO référencés :

Code :
1
2
3
 
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
cela permet de préciser que tu travailles en DAO (les objets ont le même nom avec ADO mais fonctionnent différemment)
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 11h32   #5
Futur Membre du Club
 
Femme myriam aslam
Étudiant
Inscription : avril 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Femme myriam aslam
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 106
Points : 18
Points : 18
J'ai fait ce que vous m'avez dis, plus de problème de variable objet ou variable de bloc with non définie mais MAINTENANT erreur de paramètre ! ACCESS me dis Trop peu de paramètre. 1 attendu.
Lorsque je regarde mon code
Code :
Set rs1 = db.OpenRecordset(sql)
est souligné en jaune
myriame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 13h46   #6
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Citation:
Envoyé par myriame Voir le message
J'ai fait ce que vous m'avez dis, plus de problème de variable objet ou variable de bloc with non définie mais MAINTENANT erreur de paramètre ! ACCESS me dis Trop peu de paramètre. 1 attendu.
Lorsque je regarde mon code
Code :
Set rs1 = db.OpenRecordset(sql)
est souligné en jaune
ça avance

il y a un soucis dans le sql; un mot qu'il ne comprend pas et qu'il prend pour un paramètre (ou alors client est une requête paramétrée?)

il faudrait voir ce qu'il y a dans la variable sql
cf ce tuto pour l'explication du debug.print :
http://cafeine.developpez.com/access...el/debugprint/
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 15h10   #7
Futur Membre du Club
 
Femme myriam aslam
Étudiant
Inscription : avril 2011
Messages : 106
Détails du profil
Informations personnelles :
Nom : Femme myriam aslam
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 106
Points : 18
Points : 18
ma requête est la suivante
Code :
sql = "select* from clients where NUM_CLI = Forms!clients!NUMCLI"
myriame est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 15h46   #8
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Bonjour,
Non ta variable Sql ne contient pas ce que tu indiques.

Elle doit contenir :
select * from clients where NUM_CLI = ?;

Ou ? est normalement un entier (long).

Merci de regarder le tuto comme te l'indique pertinement Arkham46. Nous somme là pour donner des infos pas pour débogger à ta place.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h29.


 
 
 
 
Partenaires

Hébergement Web