Erreur 13 Imcompréhensible...

Résolu
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013 - 18 avril 2012 à 12:28
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013 - 20 avril 2012 à 11:10
Bonjour,

Alors voila je suis bloqué sur un problème vraiment incompréhensible.. J'ai une Erreur 13 "imcompatibilité de types" qui arrive plus ou moins aléatoirement, je m'explique:

-J'ouvre ma base et je vais tester le module Numérotation. Il s'execute correctement et me sors bien un numéro libre dans ma table T_Demandeur.

-J'ouvre mon formulaire F_Demande et je lance le module afin de récupérer mon numéro automatiquement. C'est la que l'erreur 13 s'affiche.

-Je re-teste mon module Numérotation et la non plus ca ne fonctionne plus alors que l'appel de la fonction "Numero" est la même que au début... De plus il suffit que je modifie quelquechose dans le module et que je l'enregistre a nouveau pour que le problème reprenne depuis le début...

Pour finir ce module fonctionnait encore très bien il y a 2Heures .. Je ne l'ai pas touché.

Voici mes codes:

Code du Module "Numérotation":
Function Numero(ByVal strTable As String, ByVal strField As String, Optional ByVal intDigits As Integer)
    
'On Error GoTo NuemeroErr
Dim varMarkers As Variant, varMark As Variant
Dim STRCriteria As String
Dim strNum As String, lngNum As Long, strPart As String
strField = "[" & strField & "]"
strFormat = Replace(strFormat, "'", "''")

varMarkers = Array("0")
'For Each varMark In varMarkers
    
STRCriteria = strField & " LIKE '" & strFormat & "*'"
strNum = Nz(DMax(strField, strTable, STRCriteria), "")





lngNum IIf(strNum "", 3000000, Val(Mid(strNum, Len(strFormat) + 1)) + 1)
strFormat = strFormat & Format(lngNum, String(intDigits, "0"))

Numero = strFormat


Exit Function

NumeroErr:
  MsgBox "Erreur : " & Err.Description, vbCritical
  Numero = ""
 ' Exit Function
End Function


Code du Formulaire pour appeler la fonction:
Private Sub Numero_Outillage_Click()



'Appel de la fonction Numero afin de créer le numéro unique de l'outillage.

  If IsNull(Numero_Outillage) Then
    Numero_Outillage = Numero("T_Demandeur", "Numero_outillage", 7)
  End If

End Sub


La fonction de test dans la case Execution de l'éditeur de code:
? Numero("T_Demandeur","Numero_outillage",7)
3000003


Voila si j'ai pas été clair dites le moi.

Merci d'avance a ceux qui m'aideront !

15 réponses

eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013
20 avril 2012 à 11:10
Bonjour a tous!
Je n'ai pas eu le temps de regarder le programme hier mais ce matin je l'ai ré-écris et ca fonctionne de nouveau. De plus j'ia appliqué ton conseil 4u4me4us ! J'ai changé les noms dans mes tables pour ne pas avoir de doublon c'est en effet plus joli et je n'avais pas remarqué mais a cause de ca j'avais des erreurs dans mes formulaires !

Merci a vous de m'avoir aidé je met ma réponse comme acceptée pour cloturer le sujet !
3
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
18 avril 2012 à 12:56
Bonjour,

Ce n'est pas du .NET, mais au minimum du VB6 voir du VBA, merci de préciser. J'ai déplacer le sujet.
Sur quelle ligne se produit l'erreur, quelles sont les valeurs des données de la ligne ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013
18 avril 2012 à 13:42
Ah ok désolé j'était pas sur de la categorie.

Alors l'erreur se produit a la ligne
d'appel de la fonction

Numero_outillage= Numero("T_Demandeur","Numero_outillage",7)

Pourtant j'envoie bien deux String et un Integer..

La Ligne est vierge. En fait j'ai une table T_Demandeur où on fait des demandes d'outil. Chaque demande implique la création d'un Numéro d'outil unique. La fonction réponds a ce besoin.

J'ouvre donc un formulaire F_Demande vierge ou je rentre les informations de l'outil dans la base ainsi que le numéro d'outillage qui est donc caluclé par la fonction "Numero" afin qu'il soit unique.

Ce qui me perturbe c'est que tout le temps que je n'ai pas utilisé le formulaire la fonction marche a merveille mais a partir du moment ou j'ai ouvert le formulaire il n'y a plus rie na faire ...
0
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013
18 avril 2012 à 13:45
Ah oui au fait le champ Numero_outillage dans ma table est de type Texte car le numéro a terme devra comporter des chiffres et des lettres. Mais cela n'avait pas posé de problème auparavant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
18 avril 2012 à 14:03
Bonjour,

De quel type est la variable Numero_Outillage ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013
18 avril 2012 à 14:07
Texte
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 avril 2012 à 14:21
je pense que c le fait que tu travaille avec des variants (mais pas sur)

ta fonction :
Function Numero(ByVal strTable As String, ByVal strField As String, Optional ByVal intDigits As Integer)

change avec
Function Numero(ByVal strTable As String, ByVal strField As String, Optional ByVal intDigits As Integer) As Long


Fais en sorte que ton Numero_Outillage soit de type long ou Integer. Si il est Integer tu dois changer

Numero_outillage= Numero("T_Demandeur","Numero_outillage",7)

par

Numero_outillage= CInt(Numero("T_Demandeur","Numero_outillage",7))
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 avril 2012 à 14:26
Correction vu que j'ai oublier que tu utilise des strings donc :

Function Numero(ByVal strTable As String, ByVal strField As String, Optional ByVal intDigits As Integer)


change avec
Code VBScript :

Function Numero(ByVal strTable As String, ByVal strField As String, Optional ByVal intDigits As Integer) As String


Fais en sorte que ton Numero_Outillage soit de type long ou String. Si il est variant

Numero_outillage= Numero("T_Demandeur","Numero_outillage",7)

par

Numero_outillage= Cstr(Numero("T_Demandeur","Numero_outillage",7))
0
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013
18 avril 2012 à 14:34
Merci d'avoir répondu 4u4me4us !

Malheureusement ca ne fonctionne toujours pas. Pense-tu qu'un changement exterieur au module ai pu l'affecter ? Car j'ai écrit cette fonction hier soir je n'y ai plus touché depuis. Ce matin j'ai travaillé sur la suite de la base mais sur d'autres tables... Ca pourrait avoir eu une incidence ?
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 avril 2012 à 15:21
"Pense-tu qu'un changement exterieur au module ai pu l'affecter ? " Tout dépends des modif. mais je ne pense pas.

Tu as le même message d'erreur en mettant As String à ta fonction et en changent Numero_Outillage en String ?

Peut être que :

Il faut changer le non de ta variable Numero_Outillage car elle à le même nom que la sub (c peut être pas l'erreur mais c très moche avis perso)

Pour moi la ligne faible c :
strFormat = strFormat & Format(lngNum, String(intDigits, "0"))


Dis moi, le message d'erreur il vient de ton on erreur?
0
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013
18 avril 2012 à 16:14
Oui toujours la même erreur. Je n'arrive pas a comprendre pourquoi cela ne fonctionne plus .. C'est rageant!

Y a une auto-correction dans Access 2003 quand on enregistre ? Car sur une autre base le nom d'une table a carrément été modifié de "T_Nom_EPU" a "T_Nom_EPU_ANCIEN" et ce ne peut pas être quelqu'un qui la modifié je suis le seul a y avoir acces ...

Du coup si il y en a une cela expliquerais le fait que ca fonctionnait mais que ca ne fonctionne plus si Access a modifié un paramètre sans que je le vois ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
18 avril 2012 à 17:13
a carrément été modifié de "T_Nom_EPU" a "T_Nom_EPU_ANCIEN" et ce ne peut pas être quelqu'un qui la modifié je suis le seul a y avoir acces

Aucune modification spontanée de l'espèce n'est possible autrement que manuellement ou par code ! Les fantômes n'existent pas !
Il est plus vraisemblable (mais tu es seul à le savoir), que tu as fait des copies, les a renommées ... et te perds dans ces copies.

Un champ, une variable et un contrôle portant le même nom est on ne peut plus dangereux !
(en plus de toutes les observations déjà faites par 4u4me4us)
Private Sub Numero_Outillage_Click()
   'Appel de la fonction Numero afin de créer le numéro unique de l'outillage.
  If IsNull(Numero_Outillage) Then
    Numero_Outillage = Numero("T_Demandeur", "Numero_outillage", 7)
  End If
End Sub





________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 avril 2012 à 18:04
Change ta ligne
'On Error GoTo NuemeroErr

Par
On Error GoTo NuemeroErr

Lance ton prog. Et dis nous si tu as un message box ANSI que le texte qu'il affiche
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
18 avril 2012 à 18:22
Aussi pense à relancer ton application en pas à pas. Le problème c peut-être déplacé.
0
eltinquen Messages postés 12 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 3 mai 2013
18 avril 2012 à 18:52
Ok bin je vais revoir tout ça demain car je ne suis plus au travail la je ne l'ai pas sous les yeux.

Merci a vous
0