Vba access : erreur de type

Fermé
mato113 - 11 juin 2008 à 10:37
yg_be Messages postés 23358 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 - 11 juin 2008 à 22:22
Voici mon programme, je demande à l'utilisateur de saisir un "nom". Je creer une table qui se nommera "nom". Dedans j'insere des valeurs extraites d'une autre table "base_cnrs" par rapport à des critères choisie dans un formulaire :

sub valider_click
Dim db As DAO.Database
Dim base As DAO.Recordset

rep = InputBox("Veuillez saisir un nom d'enregistrement pour la table :", "ENREGISTREMENT", "extraction")
DoCmd.RunSQL "CREATE TABLE " & rep & " (NoContrat varchar, andebut number, Duree number, Intituleunite varchar, DSLAB varchar, RegLAB varchar, RaisonSociale varchar, CodeNAF varchar, Secteur_Activite varchar )"
'BD étudiée, c'est celle qui est courante..
Set db = CurrentDb
'nom de la table
MaTable = "base_cnrs"
'Empêche les demande de confirmation de s'afficher
DoCmd.SetWarnings False
'Efface le contenu de la table
DoCmd.RunSQL "DELETE * FROM " & rep & ";"
'Retablit les confirmations
DoCmd.SetWarnings True

'requete sql
sSQL = "SELECT Nocontrat, andebut, Duree, Intituleunite, DSLAB, RegLAB, RaisonSociale, CodeNAF, Secteur_Activite from " & MaTable
'tu definis ton recordset qui va contenir le resultat de la requete
Set base = db.OpenRecordset(sSQL)
If Not base.EOF Then
'tant qu'il n'est pas vide
Do While Not base.EOF
'recuperation des valeurs
noC = base.Fields("Nocontrat").Value
nomL = base.Fields("Intituleunite").Value
'remplace les ' par un espace afin que le programme distingue bien la chaine
nomL = Replace(nomL, "'", " ")
an = base.Fields("andebut").Value
ds = base.Fields("DSLAB").Value
reg = base.Fields("RegLAB").Value
rais = base.Fields("RaisonSociale").Value
rais = Replace(rais, "'", " ")
act = base.Fields("Secteur_Activite").Value
naf = base.Fields("CodeNAF").Value
tps = base.Fields("Duree").Value

'//POSSIBILITES D'EXTRACTIONS{

'si seulement un numero de contrat est saisi
If noC = num_contrat And coche.Value = True Then
'requete d insertion
sSQLInsert = "INSERT INTO " & rep & " ([Nocontrat],[andebut],[Duree],[Intituleunite],[DSLAB],[RegLAB],[RaisonSociale],[CodeNAF],[Secteur_Activite]) VALUES ( '" & noC & "','" & an & "','" & tps & "','" & nomL & "','" & ds & "','" & reg & "','" & rais & "','" & naf & "','" & act & "')"
'execution de la requete insert
db.Execute sSQLInsert, dbFailOnError
Exit Sub
End If

'//SEULEMENT UN CRITERE
'juste periode
If Not IsNull(date_debut) And Not IsNull(date_fin) And IsNull(nom_lab) And IsNull(ds_lab) And IsNull(reg_lab) And IsNull(rai_soc) And IsNull(sec_act) Then
If Coche_per.Value = True And an >= date_debut And an <= date_fin Then
sSQLInsert = "INSERT INTO " & rep & " ([Nocontrat],[andebut],[Duree],[Intituleunite],[DSLAB],[RegLAB],[RaisonSociale],[CodeNAF],[Secteur_Activite]) VALUES ( '" & noC & "','" & an & "','" & tps & "','" & nomL & "','" & ds & "','" & reg & "','" & rais & "','" & naf & "','" & act & "')"
'execution de la requete insert
db.Execute sSQLInsert, dbFailOnError
End If
End If
'.....d'autres possiblités
base.MoveNext
Loop
End If
'ferme/vide tout
base.Close
Set base = Nothing
db.Close
End If
End Sub

Mon probleme est qu'a la fin je n'ai rien dans la table sortie "nom". Cela vien des variables "andebut" et "duree".
Si dans la base je mets ces deux variables en format texte l'extraction fonctionne. Mais j'ai besoin de garder ces variables en numériques.

Je comprend pas d'ou ça peut venir

1 réponse

yg_be Messages postés 23358 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 Ambassadeur 1 555
11 juin 2008 à 22:22
Je te recommande chaudement d'ajouter "Option Explicit" au début de ton module, et de déclarer un type pour chaque variable.
De plus, si tu travaille avec des dates, déclare les comme date, dans les tables et dans les modules.
Je pense qu'ensuite tout va se clarifier.

Bon courage !
0