Erreur 13 Imcompréhensible...

[Résolu]
Signaler
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013
-
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013
-
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

Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013

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 !
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
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
---
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013

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 ...
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013

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.
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
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
---
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013

Texte
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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))
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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))
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013

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 ?
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
"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?
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013

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 ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Aussi pense à relancer ton application en pas à pas. Le problème c peut-être déplacé.
Messages postés
12
Date d'inscription
jeudi 13 août 2009
Statut
Membre
Dernière intervention
3 mai 2013

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