Vb: passer un tableau en paramètre
Résolu/Fermé
A voir également:
- Vba passer un tableau en paramètre
- Vb - Télécharger - Langages
- Vb cable - Télécharger - Audio & Musique
- Vb editor - Télécharger - Langages
- Vb runtime - Télécharger - Divers Utilitaires
- Range vb - Forum VB / VBA
8 réponses
Utilisateur anonyme
22 mai 2012 à 20:56
22 mai 2012 à 20:56
re:
1.) dans la signature que tu as proposé :
function split(variant,string,tableau)
les mots [ variant ] et [ string ] sont des mots réservés que tu ne peux utiliser
comme nom de variable.
la signature devrait ressembler à :
function split(var1 As Variant, var2 As String, var3 As Array)
2.) n.b. Lorsque ByVal ou ByRef sont non spécifié, c'est la valeur [ ByVal ]
qui est considéré par défaut, donc :
function split(chaine as variant, caract as string) as variant
est équivalent à :
function split(ByVal chaine As Variant, ByVal caract As String) As Variant
Petit exemple d'utilisation ByVal et ByRef
Cdt
Lupin
1.) dans la signature que tu as proposé :
function split(variant,string,tableau)
les mots [ variant ] et [ string ] sont des mots réservés que tu ne peux utiliser
comme nom de variable.
la signature devrait ressembler à :
function split(var1 As Variant, var2 As String, var3 As Array)
2.) n.b. Lorsque ByVal ou ByRef sont non spécifié, c'est la valeur [ ByVal ]
qui est considéré par défaut, donc :
function split(chaine as variant, caract as string) as variant
est équivalent à :
function split(ByVal chaine As Variant, ByVal caract As String) As Variant
Petit exemple d'utilisation ByVal et ByRef
Option Explicit Sub Essai() Dim V1 As Long, V2 As Long, Res As Long Dim Reponse As Long, Texte As String V1 = 5: V2 = 6: Res = 0: Texte = "" Reponse = Additionne1(Res, V1, V2) Texte = Texte & "Reponse : " & Reponse & vbCrLf Texte = Texte & "Res : " & Res & vbCrLf Texte = Texte & "V1 : " & V1 & vbCrLf Texte = Texte & "V2 : " & V2 & vbCrLf MsgBox Texte Reponse = Additionne2(Res, V1, V2) ' Ici, tu verras que le paramètre [ Res ] à été passé à la fonction ' par référence, donc le contenu de la variable est modifié par ' la fonction. (Ce serait pareille pour un paramètre de Sub). Texte = Texte & "Reponse : " & Reponse & vbCrLf Texte = Texte & "Res : " & Res & vbCrLf Texte = Texte & "V1 : " & V1 & vbCrLf Texte = Texte & "V2 : " & V2 & vbCrLf MsgBox Texte End Sub ' Function Additionne1(ByVal Resultat As Long, _ ByVal Var1 As Long, _ ByVal Var2 As Long) As Long Resultat = Var1 + Var2 Additionne1 = Resultat End Function ' Function Additionne2(ByRef Resultat As Long, _ ByVal Var1 As Long, _ ByVal Var2 As Long) As Long Resultat = Var1 + Var2 Additionne2 = Resultat End Function '
Cdt
Lupin
ViriisXP
Messages postés
482
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
11 janvier 2023
40
22 mai 2012 à 09:56
22 mai 2012 à 09:56
bonjour, peux-tu envoyé un fichier d'exemple pour mieux comprendre.
upload : http://dl.free.fr
cordialement.
upload : http://dl.free.fr
cordialement.
Utilisateur anonyme
22 mai 2012 à 13:21
22 mai 2012 à 13:21
Bonjour,
Tu utilise des mots réservés pour le nom de tes variables...
À mon humble avis, c'est une bien mauvaise pratique :
Néanmoins, il y a confusion dans ton code ???
La fonction split crée une chaine de caractères, est-ce cette chaine
dont tu as besoin ?
quand la loop est finit, tu peut récupérer le résultat ainsi
split = sol
et dans l'appel :
Resultat = split(variable, Chaine, montableau())
Cdt
Lupin
Tu utilise des mots réservés pour le nom de tes variables...
À mon humble avis, c'est une bien mauvaise pratique :
Option Explicit Function split(ByVal pVariable As String, ByVal pChaine As String, ByVal pTableau() As String) As String Dim sol As String Do While pTableau(i) <> "" sol = sol & ";" & pTableau(i) Loop split = sol End Function ' Sub traitement() ' procédure principale Dim montableau() As String Dim Chaine As String Dim Resultat As String montableau = creation(Chaine) Resultat = split(variable, Chaine, montableau()) End Sub '
Néanmoins, il y a confusion dans ton code ???
La fonction split crée une chaine de caractères, est-ce cette chaine
dont tu as besoin ?
quand la loop est finit, tu peut récupérer le résultat ainsi
split = sol
et dans l'appel :
Resultat = split(variable, Chaine, montableau())
Cdt
Lupin
Merci pour ta réponse. J'ai finalement réussi à résoudre mon problème (que j'avais par ailleurs plutôt mal expliqué) en mettant le tableau en paramètre de sortie de la fonction split:
Puis dans la procédure on retrouve :
Qu'est ce que tu as voulu dire par : "Tu utilise des mots réservés pour le nom de tes variables"?
Et j'en profites, puisque tu as l'air de t'y connaître pas mal, ça sert à quoi le "ByVal" devant les paramètres?
function split(chaine as variant, caract as string) as variant
Puis dans la procédure on retrouve :
sub traitement() dim MonTab as variant, phrase as variant, separateur as string MonTab=split(phrase,separateur) end sub
Qu'est ce que tu as voulu dire par : "Tu utilise des mots réservés pour le nom de tes variables"?
Et j'en profites, puisque tu as l'air de t'y connaître pas mal, ça sert à quoi le "ByVal" devant les paramètres?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
22 mai 2012 à 21:52
22 mai 2012 à 21:52
Bonjour tous,
Excusez l'incruste, petite explication complémentaire
Voir l'aide,
spécifier si chaque argument doit être appelé par valeur (ByVal) ou implicitement par référence (ByRef)
Quand un argument est passé par valeur, seule une copie de la variable est passée à la procédure. Si celle-ci modifie la valeur, le changement affecte uniquement la copie et non la variable proprement dite. Utilisez le mot clé ByVal pour indiquer qu'un argument est passé par valeur.
Quand vous passez des arguments par référence, la procédure peut accéder à la variable proprement dite au niveau de l'emplacement de son adresse mémoire. La valeur de la variable peut ainsi être modifiée de manière permanente par la procédure à laquelle elle est passée. Le passage par référence est utilisé par défaut dans Visual Basic.
A+
Excusez l'incruste, petite explication complémentaire
Voir l'aide,
spécifier si chaque argument doit être appelé par valeur (ByVal) ou implicitement par référence (ByRef)
Quand un argument est passé par valeur, seule une copie de la variable est passée à la procédure. Si celle-ci modifie la valeur, le changement affecte uniquement la copie et non la variable proprement dite. Utilisez le mot clé ByVal pour indiquer qu'un argument est passé par valeur.
Quand vous passez des arguments par référence, la procédure peut accéder à la variable proprement dite au niveau de l'emplacement de son adresse mémoire. La valeur de la variable peut ainsi être modifiée de manière permanente par la procédure à laquelle elle est passée. Le passage par référence est utilisé par défaut dans Visual Basic.
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
22 mai 2012 à 22:09
22 mai 2012 à 22:09
Bonjour Lupin,
Ce devrait être la même chose, j'ai consulté l'aide de VB6.
Moi aussi je pensais que c'était par Byval, je me suis peut-être trompé de rubrique.
A+
Ce devrait être la même chose, j'ai consulté l'aide de VB6.
Moi aussi je pensais que c'était par Byval, je me suis peut-être trompé de rubrique.
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
22 mai 2012 à 22:19
22 mai 2012 à 22:19
En .Net
Le comportement par défaut en Visual Basic consiste à passer les arguments par valeur. Vous pouvez faciliter la lecture de votre code en utilisant le mot clé ByVal. En programmation, il est conseillé d'ajouter le mot clé ByVal ou ByRef à chaque paramètre déclaré.
Mais le comportement est différent
L'exemple suivant montre l'utilisation du paramètre ByVal qui passe le mécanisme avec un argument de type référence. Dans cet exemple, l'argument est c1, une instance de la classe Class1. ByVal empêche le code dans les procédures de modifier la valeur sous-jacente de l'argument de référence, c1, mais ne protège pas les champs et les propriétés accessibles de c1.
Comme quoi.. ont apprend tout les jours.
A+
Le comportement par défaut en Visual Basic consiste à passer les arguments par valeur. Vous pouvez faciliter la lecture de votre code en utilisant le mot clé ByVal. En programmation, il est conseillé d'ajouter le mot clé ByVal ou ByRef à chaque paramètre déclaré.
Mais le comportement est différent
L'exemple suivant montre l'utilisation du paramètre ByVal qui passe le mécanisme avec un argument de type référence. Dans cet exemple, l'argument est c1, une instance de la classe Class1. ByVal empêche le code dans les procédures de modifier la valeur sous-jacente de l'argument de référence, c1, mais ne protège pas les champs et les propriétés accessibles de c1.
Comme quoi.. ont apprend tout les jours.
A+
re:
En effet sous .NET, lorsque je ne déclare pas spécifiquement le ByVal ou le ByRef,
l'éditeur place le terme ByVal de façon automatique et même si je l'efface, il le remet.
Faut croire qu'a force de développer en .NET j'en perds mon VBA, j'ai même essayé
sous VB6 et il réagit comme sous VBA, ByRef étant implicite si non exprimé.
Toutefois, j'avais pris connaissance des sous-objets modifiables même si l'objet
racine est passé par ByVal.
@+
Lupin
En effet sous .NET, lorsque je ne déclare pas spécifiquement le ByVal ou le ByRef,
l'éditeur place le terme ByVal de façon automatique et même si je l'efface, il le remet.
Faut croire qu'a force de développer en .NET j'en perds mon VBA, j'ai même essayé
sous VB6 et il réagit comme sous VBA, ByRef étant implicite si non exprimé.
Toutefois, j'avais pris connaissance des sous-objets modifiables même si l'objet
racine est passé par ByVal.
@+
Lupin