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

Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Dernière intervention
12 février 2013
- - Dernière réponse :  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.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
14321
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
13 décembre 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_ShayW
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Dernière intervention
12 février 2013
0
Merci
A oui et au faite, je voudrait que la Fonction ou Sub puisse modifier le tableau aussi !
Commenter la réponse de cs_dayvid
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
0
Merci
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
Commenter la réponse de cs_ShayW
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Dernière intervention
12 février 2013
0
Merci
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 !
Commenter la réponse de cs_dayvid
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Dernière intervention
12 février 2013
0
Merci
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 !!!
Commenter la réponse de cs_dayvid
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
212
Date d'inscription
mardi 18 janvier 2011
Dernière intervention
12 février 2013
0
Merci
Oui, j'ai compris se que tu viens de me dire, j'en prends bonne note merci
Commenter la réponse de cs_dayvid
Messages postés
14321
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
13 décembre 2018
0
Merci
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
Commenter la réponse de NHenry
0
Merci
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.
Commenter la réponse de Utilisateur anonyme

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.