Erreur "Type Mismatch" sur un label.Caption

Résolu
onix64 Messages postés 23 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 7 août 2011 - 16 mai 2010 à 18:08
onix64 Messages postés 23 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 7 août 2011 - 17 mai 2010 à 09:10
Voici mon bout de programme :


Private Sub cmdvaliderstats_Click()
Dim m As Integer
Dim n As Integer
Dim i As Integer
Dim nblign As Integer
Dim ligne As String
qqnr = FreeFile
qqr = FreeFile

For n = 0 To 13
If Optclubs(n).Value = True Then
Open IIf(Right(App.Path, 1) = "", App.Path, App.Path & "") & "\Données Rugby Top 14" & Optclubs(n).Caption & ".txt" For Input As #qqnr

' boucle pour compter le nombre de ligne du fichier
nblign = 0
Do While Not EOF(qqnr)
nblign = nblign + 1
Line Input #qqnr, ligne
Loop
Close #qqnr

For m = 1 To 4
qr = FreeFile
Open IIf(Right(App.Path, 1) = "", App.Path, App.Path & "") & "\Données Rugby Top 14\Composition joueur" & m & "_stats.txt" For Output As #qr
For i = 0 To nblign
If Lblindice(i).Caption = m Then
Print #qqr, Lblplayers(i).Caption
Print #qqr, Txtessais(i).Text
Print #qqr, Txtpieds(i).Text
End If
Next i
Close #qr
Next m
Else
End If

Next n

End Sub

Je vous explique : j'ai les noms des 14 clubs de rugby du TOP 14 dans des "Optclubs.value". Quand je clique sur l'un des OptionButton pour choisir un club j'ouvre un fichier texte qui a pour nom "nom du club choisi.txt" et qui contient les noms des joueurs de ce club.
J'ai ensuite des noms de joueurs (Lblplayers.caption) pris aléatoirement avec leurs statistiques (nombre d'essais Txtessais.txt et nombre de points aux pieds Txtpieds). Chacun de ses joueurs est affecté d'un indice (Lblindice) qui va de 1 à 4.

Ce programme ouvre donc ensuite un fichier texte "Composition joueur1_stats.txt" et y recopie tous les joueurs dont l'indice vaut 1 (Lblindice.caption=1) puis ouvre un fichier texte "Composition joueur2_stats.txt" et y recopie tous les joueurs dont l'indice vaut 2 (Lblindice.caption=2) et ainsi de suite jusqu'à 4.

Les boucles semblent marcher mais j'ai une erreur "Type Mismatch" sur la ligne "If Lblindice(i).Caption m Then". Est-ce le type de déclaration de "m" qui pose problème ? pourtant m 1 à 4 est bien un integer non ? Dois-je plutôt utiliser un Txtindice.text à la place d'un Lblindice.Caption ? Si vous avez des idées ? je sais pas pourquoi mais ça semble être tout simple comme problème.

Merci d'avance
A voir également:

10 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 mai 2010 à 21:03
Salut,

Est-ce que tes lblindices contiennent bien tous des nombres ?

Un type mismatch veut dire que le type de l'un ne correspond pas au type de l'autre, par exemple "toto" et 4.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
3
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
16 mai 2010 à 23:15
Essaye ceci :
If Val(Lblindice(i).Caption) = m Then

3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 mai 2010 à 00:01
Re
Oui, Philippe734 te propose la meilleure solution pour imposer un type de conversion "générique" sans génération d'erreur : Si le contenu de ton Label n'est pas conforme à un chiffre, Val renverra 0 (alors que CInt provoquera une erreur programme)

'i' au moment de l'erreur : ce n'est pas compliqué à lire --> Ctrl-G puis ? i
Pendant que tu es dans la fenêtre de debug, demande à visualiser le contenu de ton Lblindice(i) avec
? Lblindice(i).Caption
Si la fenêtre de debug provoque elle aussi une erreur, c'est qu'il y a un problème sur le type du composant ...

+

Il y a encore une erreur ici :
Tu ouvres ton fichier sous le numéro qr :
... For Output As #qr
et tu écris avec l'identifiant qqr
Print #qqr, Lblplayers(i).Caption 

Je te conseillerais vivement :
- Lancer ton application avec Ctrl-F5 et pas F5 tout seul --> Corriger toutes les erreurs mises en évidence.
Ctrl-F5 provoque une compilation complète alors que F5 n'analysera le programme qu'au moment où il passera dessus.
- Ajouter Option Explicit en t^te de chaque page de code --> Cela va t'obliger à dimensionner chacune de tes variables et ainsi éviter les erreurs entre qqr et qr
Cet Option Explicit peut être inséré dans chaque nouvelle page de code en réglant l'option "Déclaration obligatoire des variables"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 mai 2010 à 18:21
Pas bonjour à toi aussi,

Essaye ainsi :
If Cint(Lblindice(i).Caption) = m Then
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0

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

Posez votre question
onix64 Messages postés 23 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 7 août 2011
16 mai 2010 à 18:34
Bonjour,

Désolé j'ai pas mis "bonjour" précédemment je m'en excuse. Je l'ai toujours mis dans mes précédents mails par ailleurs. J'avais déjà essayé la fonction "Cint" puisque j'ai déjà parcouru une bonne demi heure le forum au cas où le même problème existerait (comme le dit le règlement) et que j'ai trouvé des exemples de ce même message résolus avec "Cint". J'ai aussi utilisé d'autres exemples trouvés dans ce forum (comme le dit le règlement) mais sans réussite. C'est pourquoi je pose la question dans un nouveau message. Pour "Cint" ça fait la même erreur "Type Mismatch" et à la même ligne "If Cint(Lblindice(i).Caption) = m Then ".

Merci pour ton aide.

Cordialement,
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 mai 2010 à 20:08
Salut

Que vaut 'i' au moment des faits ?
Existe t-il un Label nommé Lblindice et portant cet Index ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 mai 2010 à 20:14
Aurais-tu malencontreusement nommé une variable Lblindice comme le nom de tes Labels ?

D'autre part, ceci est incorrect :
Open IIf(Right(App.Path, 1) = "", App.Path, App.Path & "") & "\Données ... 
Tu te retrouves avec un double \\ après App.Path

L'erreur sur le Label peut venir de cette précédente erreur sur le Open, à voir.
0
onix64 Messages postés 23 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 7 août 2011
16 mai 2010 à 20:54
Salut !

Que vaut 'i' au moment des faits ?
Au moment des faits la valeur de i varie donc je pense que le problème viendrait de "m" mais j'en suis pas sûr. En fait, il semblerait que le programme m'affiche cette erreur quand "m" passe à 2 car le fichier "Composition joueur1_stats.txt" est créée et se remplit avec les noms des joueurs ayant pour Lblindice 1 puis le message arrive. Alors que quand les indices sont 1, 3 et 4 (cad les valeurs de "m") ça marche c'est plutôt bizarre. J'ai essayé d'écrire la boucle à la main avec m 1 puis m = 2 etc... mais c'est pareil donc il semblerait que le fait que "m" soit un chiffre le gêne.

Existe t-il un Label nommé Lblindice et portant cet Index ?
Il existe bien un Label Lblindice portant cet Index.

Aurais-tu malencontreusement nommé une variable Lblindice comme le nom de tes Labels ?
Non j'ai bien regardé je pense pas.

Tu te retrouves avec un double \\ après App.Path
C'est vrai mais même avec un seul "" j'ai la même erreur.

Merci encore pour ton aide
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 mai 2010 à 00:03
Rectif :
... Option Explicit peut être inséré automatiquement lors de la génération d'une nouvelle page de code ...
(si la page existe déjà, il te faudra le mettre toi même à la main)
0
onix64 Messages postés 23 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 7 août 2011
17 mai 2010 à 09:10
Bonjour à tous!

J'ai trouvé d'où venait le problème grâce à vos indications. En fait, vous avez tous raison je m'explique :

La solution de Philippe734 ("If Val(Lblindice(i).Caption) = m Then") fonctionne et m'enlève l'erreur donc merci Philippe734 mais en fait ça me dit pas quel erreur j'ai faite dans mon code mais ça la corrige et fait en sorte que ça marche donc merci encore! je m'en souviendrai à l'avenir.

Ensuite grâce aux conseils de DARKSIDIOUS et de Jack, j'ai quand même voulu chercher où se situait le problème. Et oui, même quand ça marche je suis têtu je veux pas seulement résoudre le problème mais le comprendre pour éviter de le reproduire. En regardant la valeur de "i" au moment de l'erreur puis en regardant le contenu des lblindices j'ai trouvé.

En fait, j'ai en tout 33 Lblplayers (qui ont chacun leurs Lblindices) et que je rempli avec les noms de joueurs qui sont au nombre de nblign (nombre de ligne du fichier correspondant car un nom par ligne). Donc en fait il y a des Lblplayers qui restent vide quand nblign < 33 par conséquent les Lblindices correspondant sont vides eux-aussi et indiquent " ". C'est ce vide qui me renvoi le message d'erreur : en mettant zéro au lieu du vide tout marche nickel. C'est logique en y pensant mais je pensais que le vide était considéré comme valeur nulle.

Merci encore pour votre aide à tous et bonne continuation !
0
Rejoignez-nous