Vba access : erreur de type

Fermé
Signaler
-
Messages postés
18298
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 janvier 2022
-
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

Messages postés
18298
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
22 janvier 2022
1 002
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