Erreur récurante de référence d'objet. [Résolu]

Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
- - Dernière réponse : whombat
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
- 31 oct. 2011 à 06:18
Bonjour à tous,

Je cherche depuis plus de 24h mais je sèche. Pour moi tout est bon mais le déboger me dit : 'La référence d'objet n'est pas définie à une instance d'un objet.' Je sais (à peu près) ce que ça veut dire mais là...

Voilà mon code, pas long pourtant :


        Dim Words() As String
        Dim FileString As String = String.Empty
        Dim f As String = My.Application.Info.DirectoryPath & "\_VAR_PAYS_PL.txt"

        If File.Exists(f) Then
            System.IO.File.WriteAllText(f, My.Resources._VAR_PAYS_PL)
        Else
            MessageBox.Show("Fichier des Pays -> Langues impossible à trouver..." & vbCrLf & "Désolé...")
            Exit Sub
        End If

        Dim fr As New System.IO.StreamReader(CStr(f))
        Dim i%

        For i = 1 To 137

            FileString = fr.ReadLine
            If FileString = "" Then Exit For

            'la ligne lue est du style string*string*string séparateur '*'
            Words = Split(FileString, "*")

            X = 1
            
            'Il bugue ici, au mot Word semble-t-il :
            For Each Word As String In Words
                If X 1 Then TabPaysLang(i, 1) Word
                If X 2 Then TabPaysLang(i, 2) Word
                If X 3 Then TabPaysLang(i, 3) Word
                X = X + 1
            Next Word

        Next



J'ai tenté d'indexer les Word (0), (1) et (2) mais j'ai la même erreur.
Si quelqu'un a une idée, je suis réellement preneur. D'avance merci.

Cordialement,

Whombat.
Afficher la suite 

20/42 réponses

Messages postés
111
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
17 novembre 2012
5
0
Merci
Mets des points d'arrêt dans ton code et fais-le progresser en pas à pas (F8 ou Maj+F8). Scrupte les variables clés durant ce test.
Tu auras plus d'info sur ce qui ne marche pas.
A mon humble avis ton erreur et en dehors du code que tu as exposé.
Commenter la réponse de mdevaux62
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Hola !
C'est quoi, ce code dont( tu dis qu'il "marche", whombat ?
d'où sortent d'un seul coup mot1, mot2 et mot3 (pas de ton code montré) ?



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Exact, j'ai mal copié mon code :

Et pour répondre à la seconde question : tout en gardant le code montré, j'ai contourné la ligne qui posait problème. En effet, depuis 36 heures je décortique ces quelques mots pour ne rien y découvrir à redire. Mais je suis novice en Net et en VB 2010.

Lorsque je laisse un message, ceux qui ont eu la gentillesse d'essayer de m'aider, et qui sont à coup sûr, plus érudits que moi, s'y cassent aussi le nez. Une phrase coince c'est :


TabPaysLang(idLigne, X) = word



j'ai donc contourné le problème. Nous sommes vendredi soir, je vais y travailler toute la nuit, sûrement et tout le week-end, je ne pouvais pas rester bloqué.

Avec mes excuses pour le copie partielle de mon code définitif. Entre temps il y en a eu deux et j'ai fais le copier / coller bêtement entre deux. Voilà le code définitif :


        Dim lignes As String() = (My.Resources._VAR_PAYS_PL).Split(vbCrLf)
        Dim idLigne As Integer = 0
        Dim TabPaysLang(0 To 136, 0 To 2)
        Dim Mot As String = String.Empty
        Dim Mot1 As String = String.Empty
        Dim Mot2 As String = String.Empty

        For Each ligne As String In lignes
            Mot = ""
            Mot1 = ""
            Mot2 = ""
            For i = 1 To ligne.Length
                Ch = Mid(ligne, i, 1)
                If Ch = "*" Then
                    If Mot1 = "" Then
                        TabPaysLang(idLigne, 0) = Mot.Trim
                        Mot1 = Mot
                        Mot = ""
                    ElseIf Mot2 = "" Then
                        TabPaysLang(idLigne, 1) = Mot.Trim
                        Mot = ""
                    End If
                Else
                    Mot = Mot & Ch
                End If                
            Next
            TabPaysLang(idLigne, 2) = Mot.Trim

            'pour contrôle
            MessageBox.Show(TabPaysLang(idLigne, 0) & "   " & TabPaysLang(idLigne, 1) & "   " & TabPaysLang(idLigne, 2))
            idLigne += 1
        Next




Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
tu ferais bien, dans ce cas, d'aller te reposer de suite, car ce code "corrigé" n'a toujours pas de sens logique (et plus particulièrement en ce qui concerne mot2 qui, avec un tel code, est toujours = "") !
Mais si tu en es satisfait, ma foi ... nul ne sera ici plus royaliste que le roi
Je cesse personnellement immédiatement de suivre la présente discussion, qui commence à devenir, y compris hors informatique, une suite de non-sens.
Bonne chance à ceux qui y restent.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Que je sois fatigué et que ce problème de dingue m'ait épuisé, on peut le comprendre. Faire une erreur parce que, à force d'avoir les yeux dessus, je ne vois plus vraiment très clair, c'est arrivé, et souvent, à chacun d'entre nous. Quand on ne trouve pas, nous procédons tous de la même manière. On teste un bout de code dans lequel on corrigera un mot ou deux, pour voir, au fur et à mesure des essais.

Le code issu de ces réflexion n'a rien d'académique bien souvent. Ce n'est d'ailleurs pas son but. Ce qu'on lui demande c'est soit de fonctionner, soit de nous indiquer la bonne piste. Une fois le code efficace, alors là on prend le temps de l'écrire dans les formes.

Exact pour Mot2. Cela fait partie de mes tâtonnements. En fait, dans un premier temps il y avait Mot1, Mot2 et Mot3. Puis je me suis vite rendu compte que, compte tenu du fait qu'il n'y avait que 2 séparateurs (problème des intervalles) mot3 n'existerai jamais.

J'ai donc corrigé immédiatement en remplissant la 3ème colonne de chaque rangée du tableau après la boucle for.

Je suis allé trop vite lorsque j'ai copié mon code sur mon message. Il était en cours de correction.

Alors mea culpa, mea maxima culpa. Je te présente mes excuses ucfoutu. Ainsi qu'à tout le monde.

Petite satisfaction, bien courte, j'ai trouvé pourquoi le code d'origine buguait (ainsi que tous les autres codes proposés d'ailleurs). Mais à en connaître la raison, ça ne m'en a pas donné la solution.

En fait, le tableau 'TabPaysLang(0 to 136,0 to 2) as String' est donc déclaré au niveau module (chez moi). Il est déclaré au niveau procédure ici parce qu'un intervenant l'avait souhaité, cela rendait le code plus clair.

Si le tableau est déclaré au niveau procédure, le code fonctionne, quel qu'il soit. Si le tableau est au niveau module, le code plante. Ce qui coince c'est donc que le tableau n'est plus accessible qu'au niveau de la procédure, ce qui ne sert pas à grand chose.

Je n'arrive pas à comprendre pourquoi. J'ai fait le pas à pas et j'ai également cherché à savoir si le tableau entre le module et la procédure subissait une quelconque modification, mais non. C'est quasi direct. Il n'y a rien entre les deux.

Cordialement,

Whombat.
Commenter la réponse de whombat
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
45
0
Merci
Bonsoir

pourquoi tu dois definir la grandeur du tableau
TabPaysLang ?
Commenter la réponse de cs_ShayW
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
1) A lire et à appliquer :
Ce tutoriel
2) si le problème persiste : rechercher si, dans ton appli, le nom TabPaysLang n'a pas été malencontreusement attribué également à autre chose.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Merci de vos réponses.

Pourquoi le tableau ? Parce que je m'en sers tout au long de mon script, il est donc déclaré au niveau module. (pas ici pour le confort de compréhension comme souhaité par un intervenant)

Et pour ucfoutu, j'ai fais le pas à pas et depuis la déclaration dans le module, c'est la première fois qu'il sert puisqu'il s'initialise en se chargeant. C'est plus tard, rempli, qu'il servira plusieurs fois. Pour ce qui concerne le tuto préconisé, je connais la portée des variable. Ça c'est bon.

J'ai bien sûr fais une recherche sur Tout le script pour contrôler où était cité ce tableau et si, éventuellement,... Eh bien non. Tout semble clair.

Mais, j'ai de nombreux soucis avec ce vb 2010. Je l'ai installé trois fois (après un formatage de mon DD, j'ai une sauvegarde sans VB) et j'ai toujours des coupures intempestives, des exceptions qui font qu'il refuse de démarrer alors qu'il n'y a pas d'erreur, etc... Je suis obligé de fermer et de la relancer pour qu'il s'aperçoive que finalement il n'y avait pas de soucis. Pourtant je l'ai re-téléchargé de chez MS, au cas où le 1er téléchargement fut défectueux.. Mais bon..

Il n'empêche que j'arrive à développer, et bien, à par ce 'léger' détail...

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Montre comment tu as déclaré ce tableau dans un module, en nous précisant le module.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Exactement comme je l'ai déclaré (pour de faux) dans la procédure plus haut (en mettant Public à la place de Dim :

Public TabPaysLang(0 To 136, 0 To 2)

Le module :


Imports ASE.Mod_Langues

Module Mod_Param

#Region "Paramêtres généraux"

    '                                 GENERAL

    'Variable string
    Public CheminDepart As String = CurDir()
    Public CheminConfig As String = CheminDepart & "\data\config"
    Public CheminDesBases As String = String.Empty
    Public CheminDesCot As String = String.Empty
    Public CheminRessources As String = My.Application.Info.DirectoryPath    
    Public TextDesCot As String = String.Empty
    Public SEPARATOR_SEMICOLON As String = ";"

    'Variables integer ou autres nombres
    Public NouvText As Integer = 0
    Public tempoTimer1 As Integer = 100

    'Tableaux string
    Public TabMois(12) As String
    Public TabDesCotsTries(950, 2) As String
    Public TabCot(950, 2) As String
    Public TabRepart(10, 100) As String
    Public Tab_RTL() As String
    Public TabLangPays(0 to 136,0 to  2) As String
    Public TabPaysLang(0 to 136,0 to  2) As String
    Public TAB_LES_PAYS(0 to 136) As String
    Public TAB_LANGUES(0 to 136) As String

    'couleur des fenêtres
    Public FondFenetreMain As String = "DimGray"
    Public FondFenetreOptions As String = "DimGray"
    Public FondFenetrePalette As String = "DimGray"    
    Public FondFenetreGraph As String = "DimGray"
    Public FondFenetreEtat As String = "DimGray"    
    Public FondFenetreBilan As String = "DimGray"
    Public FondFenetreDefDates As String = "DimGray"
    Public FondFenetreSimul As String = "DimGray"

    'couleur des courbes
    Public CoulCourbe1 As System.Drawing.Color = System.Drawing.Color.Blue
    Public CoulCourbe2 As System.Drawing.Color = System.Drawing.Color.Aqua
    Public CoulCourbe3 As System.Drawing.Color = System.Drawing.Color.Green
    Public CoulCourbe4 As System.Drawing.Color = System.Drawing.Color.Yellow
    Public CoulCourbe5 As System.Drawing.Color = System.Drawing.Color.Red
    Public CoulCourbe6 As System.Drawing.Color = System.Drawing.Color.Black

#End Region

End Module



Le Module Mod_Langues contient les sub par langue et les variables et leur valeur, ex :


Public Sub Langue_frFR()

        Dim ci As New CultureInfo("fr-FR")
        lg_CodePays = "fr-FR"
        lg_Pays = "Français - France"
        lg_Identif = "0x040C"
        Thread.CurrentThread.CurrentUICulture = ci

        'Général

        'Mois
        JANVIER = "Janvier"
        FEVRIER = "Février"
        MARS = "Mars"
        AVRIL = "Avril"
        MAI = "Mai"
       ................
end sub



Un truc simple et de base. Ne pas oublier que je viens de VB 4, j'ai donc quelques courtes bases mais je suis béotien en Net. Alors le moins de vagues possible. Je reste dans le sûr...

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
45
0
Merci
Salut
quand tu écris Dim TabPaysLang(0 To 136, 0 To 2)
0 to 136 tu te bases sur le nombre de lignes du
fichier text ce n'est pas recommandé
vaux mieux utiliser le listof ou
redim TabPaysLang
en fin de compte je n'ai pas compris ce que tu
veux faire
Commenter la réponse de cs_ShayW
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Une chose est claire, Whombat :
Si ce module est un module standard et si TabPaysLang n'a pas été utilisé autrement dans ton projet, tout devrait "marcher" exactement de la même manière que si cette déclaration avait était faite comme tu nous l'avais montré précédemment (et tu nous as dit qu'elle "marchait" alors).
Dans de telles conditions : impossible que ton "erreur" soit générée, à moins d'avoir une version étonnamment "spéciale" de VB !
J'abandonne maintenant ma participation.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
C'est simple : j'ai un fichier texte dans les ressources. En début d'application, je veux charger un tableau (Global) des données du fichier texte ce qui me permettra d'y accéder tout au long de mon appli, par index interposé. Code définitif qui fonctionne parfaitement même si, pour du Net, il reste peut académique :

N.B. J'ai rajouté une donné au fichier texte par rapport à celui sur lequel nous avions travaillé, ce qui fait que le tableau a été re-déclaré (0 to 136, 0 to 3 <-). Je ne l'avais pas modifié lors de mon précédent copier / Coller pour ne pas perturber. Donc considérer les tableaux défini au niveau module comme suit :

Public TabLangPays(0 to 136,0 to 3) As String
Public TabPaysLang(0 to 136,0 to 3) As String


    Public Sub ChargeTabPaysLang()

        Dim lignes As String() = (My.Resources._VAR_PAYS_PL).Split(vbCrLf)             
        Dim Mot As String = String.Empty
        Dim Mot1 As String = String.Empty
        Dim Mot2 As String = String.Empty
        Dim Ch As String = String.Empty
        Dim i As Integer = 0
        Dim X As Integer = 0

        For Each ligne As String In lignes
            Mot = ""
            Mot1 = ""
            Mot2 = ""
            ligne = ligne.Trim
            For i = 1 To ligne.Length
                Ch = Mid(ligne, i, 1)
                If Ch = "*" Then
                    If Mot1 = "" Then
                        TabPaysLang(X, 0) = Mot
                        Mot1 = Mot
                        Mot = ""
                    ElseIf Mot2 = "" Then
                        TabPaysLang(X, 1) = Mot
                        Mot2 = Mot
                        Mot = ""
                    Else
                        TabPaysLang(X, 2) = Mot
                        Mot = ""
                    End If
                Else
                    Mot = Mot & Ch
                End If
            Next
            TabPaysLang(X, 3) = Mot
            X += 1
        Next

    End Sub



Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Je te comprends, ucfoutu, moi-même j'ai rendu les armes. Je te remercie infiniment pour le temps passé. J'espère que mes prochains soucis seront plus clairs...

Pour le fun, voilà le début de mon fichier texte à mettre dans le tableau :


AFRIQUE_DU_SUD_AFRIKAANS*Afrique_du_Sud.jpg*0*"afZA"
AFRIQUE_DU_SUD_ANGLAIS*Afrique_du_Sud.jpg*0*"enZA"
ALBANIE_ALBANAIS*Albanie.jpg*1*"sqAL"
ALGERIE_ARABE*Algerie.jpg*2*"arDZ"
ALLEMAGNE_ALLEMAND*Allemagne.jpg*3*"deDE"
ARABIE_SAOUDITE_ARABE*Arabie_Saoudite.jpg*4*"arSA"
ARGENTINE_ESPAGNOL*Argentine.jpg*5*"esAR"
ARMENIE_ARMENIEN*Armenie.jpg*6*"hyAM"
AUSTRALIE_ANGLAIS*Australie.jpg*7*"enAU"
AUTRICHE_ALLEMAND*Autriche.jpg*8*"deAT"
AZERBAIDJAN_AZERI_CYRILLIQUE*Azerbaidjan.jpg*9*"azAZCyrl"
AZERBAIDJAN_AZERI_LATIN*Azerbaidjan.jpg*9*"azAZLatn"
BAHREIN_ARABE*Bahrein.jpg*10*"arBH"
BELGIQUE_FRANÇAIS*Belgique.jpg*11*"frBE"
BELGIQUE_NEERLANDAIS*Belgique.jpg*11*"nlBE"



Merci encore.

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Allez : bye ...
Car cela suffit pour constater du "n'importe quoi" !
For Each ligne As String In lignes
            Mot = ""
            Mot1 = ""
            Mot2 = ""
            ligne = ligne.Trim
            For i = 1 To ligne.Length
                Ch = Mid(ligne, i, 1)
                If Ch = "*" Then
                    If Mot1 = "" Then
                        TabPaysLang(X, 0) = Mot
                        Mot1 = Mot
                        Mot = ""
                    ElseIf Mot2 = "" Then
                        TabPaysLang(X, 1) = Mot
                        Mot2 = Mot
                        Mot = ""
                    Else
                        TabPaysLang(X, 2) = Mot
                        Mot = ""
                    End If
                Else
                    Mot = Mot & Ch
                End If
            Next
            TabPaysLang(X, 3) = Mot
            X += 1
        Next

où mot sera toujours = "", ainsi d'ailleurs que mot1 et mot2
Et tu vas probablement venir (une fois de plus) : "ah oui ! Exact ! mais ce n'est pas là le code que j'ai écrit, etc ... etc ..."
Bonne chance dans tes .... "approximations", tâtonnements, etc ... sans aucun sens logique.
Désolé, mais là, vois-tu ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
Là, tu es injuste ! If faut bien, à chaque tour vider les variables mot1 et mot2 ! D'autre part, la variable mot doit être vidée à chaque séparateur pour pouvoir se recharger !

C'est pas sympa d'agir comme ça, tu me déçois beaucoup.

C'est injustifié. Tout simplement pas bien !
Commenter la réponse de whombat
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Après relecture du code : ce n'est même pas çà ! c'est pire !
Que cherches-tu à faire, là (et si maladroitement) ? à remplacer le split ?
Relis plus haut (j'y ai écrit une chose, mais elle ne semble pas avoir "percuté"), donc ! Utilise-le, ce split ! et sans tout ce saint-frusquin !
Allez ===> je te laisse, maintenant.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
La différence entre toi et moi se situe à deux niveaux :

1) tu n'auras jamais besoin de moi (sait-on jamais...) tandis que moi je serai souvent appelé au début à réclamer les lumières des intervenants qui voudront bien m'aider. Et tu en feras sûrement partie.

2) Tu n'as qu'un vague souvenir du code qui 'coinçait, et c'est normal, tu ne vis pas avec. Moi, j'y ai passé 48 h sur ces 10 malheureuses lignes, je les connaît par coeur, puis j'ai travaillé dessus (ou autour) tout le week-end Donc c'est tout frais. Alors, rappel des épisodes précédents : c'est justement lors de l'utilisation du split que le programme a bugué. Pas moyen de loger ce 'Split' sans coincer. Et personne n'a trouvé la solution (pour autant qu'il y en ait une...). J'ai dû prendre un chemin de traverse pour y arriver. Sinon, c'était toute la philosophie, la structure du script en général qui était à re-écrire.

Ne crois pas, pas plus pour toi que pour qui que ce soit, que je sois irrespectueux, 'jemenfoutiste' ou que je n'intègre pas les conseils. Je suis d'un âge où l'on a été élevé dans le respect des autres.

Cordialement,

Whombat.
Commenter la réponse de whombat
Messages postés
111
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
17 novembre 2012
5
0
Merci
Hors propos, mais...
Pourquoi s'obstiner à utiliser un tableau alors qu'il serait plus simple de créer une classe ou une structure et ranger la liste de tes pays dans une liste de cette classe ou structure.

Avantages : plus souple, plus de fonctions sur les listes que sur les tableaux, ouvert (on fixe pas de limite en ouvrant une liste), etc.

Je t'ai fait un exemple avec une structure...

Public Class Form1

    'Je déclare une structure publique pour recevoir les éléments de ton fichier
    'Les variables dans cette structure sont clairement identifiées : nom, image, etc...
    Public Structure PaysLang
        Dim nomPays As String
        Dim imgDrapeau As String
        Dim variable3 As String
        Dim variable4 As String
    End Structure

    'Je déclare ensuite une liste qui recevra chacun de tes pays (le premier sera le pays 0)
    Public listePays As New List(Of PaysLang)

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'C'est parti !
        ChargeLesLangues()
        'Vérification : je prends le 5ème pays par exemple et j'affiche ses valeurs dans un messageBox
        MessageBox.Show(listePays(4).nomPays & vbCrLf & listePays(4).imgDrapeau & vbCrLf & listePays(4).variable3 & vbCrLf & listePays(4).variable4)
    End Sub

    Public Sub ChargeLesLangues()
        Dim lignes As String() = (My.Resources._VAR_PAYS_PL).Split(vbCrLf)
        For Each ligne As String In lignes
            'Pour chaque ligne, je sépare les mots
            Dim words As String() = ligne.Split("*")
            'On déclare un nouveau pays en tant que structure PaysLang
            Dim nouveauPays As New PaysLang
            'On charge chacun des éléments de la ligne (petite vérification en début de ligne pour contrôler que l'élément existe vraiment)
            With nouveauPays
                If words.Length > 0 Then .nomPays = words(0)
                If words.Length > 1 Then .imgDrapeau = words(1)
                If words.Length > 2 Then .variable3 = words(2)
                If words.Length > 3 Then .variable4 = words(3)
            End With
            'On ajoute ce nouveau pays à la liste
            listePays.Add(nouveauPays)
        Next
        'Fini !
    End Sub

End Class
Commenter la réponse de mdevaux62
Messages postés
188
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 novembre 2011
0
Merci
C'est nickel, et c'est du Net !

Ça crie un peu autour de moi parce qu'on m'attend pour passer à table. Mais je vais essayer ça au plus tôt. Il n'y a pas de grosses modifs à apporter à mon script (au niveau temps) donc tout concourt à ce que ça cadre.

Je te tiens au courant.

Et bon app si ce n'est pas encore fait...

Cordialement,

Whombat.

Prédire l'avenir est particulièrement aléatoire, 
surtout lorsqu'il s'agit du futur.
Commenter la réponse de whombat