Comment passer un tableau à dimension multiple (2) à une procédure (Function ou [Résolu]

Signaler
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Statut
Membre
Dernière intervention
12 février 2013
-
 Utilisateur anonyme -
Bonjour,

Comment passer un tableau à dimension multiple (2 dimension dans mon exemple) à une procédure (Function ou Sub)
Exemple:

Module Module1

    Function RemplirMonTableau(ByRef MonTableau() As String) As String

        For I = 1 To 100
            For J = 1 To 100
                MonTableau(I, J) = "0"
            Next
        Next

    End Function

    Sub Main()

        Dim MonTableau(100, 100) As String

        RemplirMonTableau(MonTableau())

    End Sub

End Module


Ceci est juste un exemple, voici le code en question:
Sub Print(ByRef Tableau() As String, ByVal Chaine As String, Optional ByVal CouleurChaine As Integer 7, Optional ByVal CouleurFontChaine As Integer 0, Optional ByVal PositionX As Integer = -1, Optional ByVal PositionY As Integer = -1, Optional ByVal Alinea As Integer = 0)

        Dim Caractère As String = ""
        Dim CurseurX As Integer = Console.CursorLeft
        Dim CurseurY As Integer = Console.CursorTop

        If PositionX > -1 And PositionX <= Console.LargestWindowWidth Then
            Console.CursorLeft = PositionX
            CurseurX = PositionX
        End If

        If PositionY > -1 And PositionX <= Console.LargestWindowHeight Then
            Console.CursorTop = PositionY
            CurseurY = PositionY
        End If

        For Lecture As Integer = 0 To Chaine.Length - 1
            Caractère = Chaine.Substring(Lecture, 1)
            Tableau(CurseurX + Lecture, CurseurY) = Caractère ' ICI SA COINCE !!!
        Next

        Console.ForegroundColor = CType(CouleurChaine, ConsoleColor)
        Console.BackgroundColor = CType(CouleurFontChaine, ConsoleColor)

        If Alinea = 1 Then
            Console.WriteLine(Chaine)
        Else
            Console.Write(Chaine)
        End If

    End Sub


Je souhaite remplir une partie du tableau avec se que l'utilisateur veux écrire
Mais je ne sais pas comment passer un tableau a dimension multiple
à une fonction ou sub pour ensuite le remplir ou autre.

13 réponses

Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Bonjour,

Pour passer un tableau multi-dimensionnel, il faut préciser son type :

String(,) '2dim
String(,,) '3dim
...

v----Signature--------v----------------------------------------------
[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.VisualBasic (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
---
Mon site
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Private Sub ModifyArray(ByVal table(,,) As String)

End Sub


aussi si tu utilises ton tableau dans plusieurs
fonction et sub il vaudrait mieux de déclarer
ton tableau comme membre privé de ton module
sans le passer comme parametre à tes sub

ps n'oublie pas explicit on
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Statut
Membre
Dernière intervention
12 février 2013

A oui et au faite, je voudrait que la Fonction ou Sub puisse modifier le tableau aussi !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,
en le passant à une fonction sans les parenthèses et sans son type (donc en variant)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
L'appel et le passage peuvent également se faire en spécifiant le type et en utilisant les parenthèses (des deux côtés, donc).
Mais ton problème n'est manifestement pas là (celui du passage de paramètres), mais bien en amont et n'a rien à voir avec ce passage de paramètres.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Ca y est ? Si oui ; corrige. Si non : demande-toi la signification de
RemplirMonTableau(MonTableau())
alors que RemplirMonTableau est une fonction


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

pour scaner un tableau multi dimensional de string
Dim table(70, 7, 14) As string
 For i = 0 To table.GetUpperBound(0)
  For j = 0 To table.GetUpperBound(1)
     For k = 0 To table.GetUpperBound(2)
        table(i, j, k) = "bonjour"
      Next
   Next
 Next
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Statut
Membre
Dernière intervention
12 février 2013

Merci bien ucfoutu mais je n'est pas compris, désoler
Merci à toi également ShayW, mais je voudrait passer mon tableau
à une fonction ou Sub pour pouvoir l'utiliser et le modifier !
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Statut
Membre
Dernière intervention
12 février 2013

aussi si tu utilises ton tableau dans plusieurs
fonction et sub il vaudrait mieux de déclarer
ton tableau comme membre privé de ton module
sans le passer comme parametre à tes sub

Ok !, c'est une solution aussi !

ps n'oublie pas explicit on

Déjà fais dans les options

Merci beaucoup !!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Je t'ai pourtant presque tout dit, dayvid !
Si tu te sers d'une fonction et mets entre parenthèses, comme ici :
RemplirMonTableau(MonTableau())
cela plantera puisque les parenthèses en rouge signifient : retour d'une valeur
Hors, tu ne veux aucune valeur, mais modifier ton tableau ! Et dans ce cas :
- ce n'est plus une fonction, qu'il te faut, mais une simple procédure (sub)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Statut
Membre
Dernière intervention
12 février 2013

Oui, j'ai compris se que tu viens de me dire, j'en prends bonne note merci
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Bonjour,

UcFoutu, en .NET, il y a forcément les parenthèses, donc pas de problème à ce niveau.

v----Signature--------v----------------------------------------------
[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.VisualBasic (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
---
Mon site

Bonjour,

En VB.net les paramètres sont passés par valeur (ByVal) sauf s'il est passé par référence (ByRef). Quand il est passé par valeur, les résultats calculés dans une sub() n'ont aucune action sur les données de la procédure appelante. Quand ils sont passés par référence (ByRef) la variable modifée dans la sub appelée est aussi modifiée dans la sub appelante. Cherche ByRef dans l'aide. Chercher dans l'aide, cela ne fait pas mourrir.