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

Résolu
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 8 janv. 2013 à 10:17
 Utilisateur anonyme - 8 janv. 2013 à 20:00
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
8 janv. 2013 à 12:41
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
1
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 janv. 2013 à 12:56
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
1
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
8 janv. 2013 à 10:18
A oui et au faite, je voudrait que la Fonction ou Sub puisse modifier le tableau aussi !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2013 à 10:29
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.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2013 à 10:38
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2013 à 11:01
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.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 janv. 2013 à 11:56
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
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
8 janv. 2013 à 12:26
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 !
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
8 janv. 2013 à 13:10
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 !!!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2013 à 13:10
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.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
8 janv. 2013 à 13:28
Oui, j'ai compris se que tu viens de me dire, j'en prends bonne note merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
8 janv. 2013 à 14:00
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
0
Utilisateur anonyme
8 janv. 2013 à 20:00
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.
0
Rejoignez-nous