Erreur "Type Mismatch" sur un label.Caption [Résolu]

Messages postés
23
Date d'inscription
vendredi 7 août 2009
Dernière intervention
7 août 2011
- 16 mai 2010 à 18:08 - Dernière réponse :
Messages postés
23
Date d'inscription
vendredi 7 août 2009
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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
- 16 mai 2010 à 21:03
3
Merci
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

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Meilleure réponse
Messages postés
309
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
15 juin 2015
- 16 mai 2010 à 23:15
3
Merci
Essaye ceci :
If Val(Lblindice(i).Caption) = m Then

Merci Philippe734 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Philippe734
Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 17 mai 2010 à 00:01
3
Merci
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)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
- 16 mai 2010 à 18:21
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
23
Date d'inscription
vendredi 7 août 2009
Dernière intervention
7 août 2011
- 16 mai 2010 à 18:34
0
Merci
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,
Commenter la réponse de onix64
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 16 mai 2010 à 20:08
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 16 mai 2010 à 20:14
0
Merci
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.
Commenter la réponse de cs_Jack
Messages postés
23
Date d'inscription
vendredi 7 août 2009
Dernière intervention
7 août 2011
- 16 mai 2010 à 20:54
0
Merci
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
Commenter la réponse de onix64
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 17 mai 2010 à 00:03
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
23
Date d'inscription
vendredi 7 août 2009
Dernière intervention
7 août 2011
- 17 mai 2010 à 09:10
0
Merci
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 !
Commenter la réponse de onix64

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.