VBA vecteur en argument

Fermé
wesley78 Messages postés 11 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 29 mai 2010 - 28 mai 2010 à 16:21
wesley78 Messages postés 11 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 29 mai 2010 - 29 mai 2010 à 20:40
Bonjour,

Je débute en VBA et pour m'entrainer j'ai décidé de commencer par un algo classique: le bubblesort auquel j'envoie un vecteur et qui me le renvoie trié par ordre croissant. trouver la sol sur internet est facile mais je ne comprends pas mon erreur.

Voici mon code qui me renvoie des #valeur!


Function bubblesort(vecteurarg) ' prend un vecteur et range par ordre croissant

Dim i, j, n As Integer
Dim vectbis() As Double 'vecteur où je vais copier des valeurs
vectcopy = vecteurarg

n = UBound(vectcopy, 1)
ReDim vectbis(n) As Double


For j = n - 1 To 1 Step -1

For i = 1 To j

If (vectcopy(i) < vectcopy(i + 1)) Then
vectbis(i) = vectcopy(i)
vectcopy(i) = vectcopy(i + 1)
vectcopy(i + 1) = vectbis(i)
End If

Next i

Next j

bubblesort = vectcopy

End Function


Merci d'avance à celui ou ceux qui pourront m'éclairer. pour leur temps

3 réponses

wesley78 Messages postés 11 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 29 mai 2010
28 mai 2010 à 17:29
en fait je suis sûr que c'est une erreur stupide de déclaration ou de redéclaration de mon vecteur passé en argument... Dois-je ajouté quelque chose dans Function bubblesort(vecteurarg), ai je besoin de créer vectcopy ou puis je manipuler directement vecteurarg... svp je m'arrache les cheveux là pour le coup! c'est frustrant!!! :)
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
28 mai 2010 à 22:35
Bonsoir,
Je pense que tu ne peux pas écrire : vectcopy = vecteurarg
Il faut affecter les valeurs une par une :
vectcopy(i) = vecteurarg(i)
@+
0
wesley78 Messages postés 11 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 29 mai 2010
29 mai 2010 à 10:22
Bonjour Gord21,

Merci beaucoup pour la réponse, je suis tout à fait d'accord avec toi ce qui m'a amené à mon 2è souci... pour faire cette boucle afin de copier j'ai besoin de récupérer la taille du vecteur passé en argument et j'obtiens des #valeur! si j'écris:

n = UBound(vecteurarg, 1)

donc à priori vectcopy(i) = vecteurarg(i) tombe à l'eau...

qu'en penses tu?
0
Bonjours,

Pour copier tout essaye

vectcopy() = vecteurarg ()
0
wesley78 Messages postés 11 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 29 mai 2010
29 mai 2010 à 13:07
Bonjour Iama,

J'ai essayé mais cela n'a pas l'air de fonctionner, en tout cas pas sur ma machine! Merci quand même!
0
Domage sur la mienne ça marche
vectcopy() = vecteurarg()
0
wesley78 Messages postés 11 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 29 mai 2010
29 mai 2010 à 19:29
ok super! merci beaucoup alors! ça me rassure! c'est ma version d'excel qui est un peu pourrie!! pendant que j'y suis: n = UBound(vecteurarg, 1) devrait marcher aussi non?

merci pour ton temps!
0
Geo373 Messages postés 600 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 29 juillet 2014 96
29 mai 2010 à 19:32
Je ne m'y connais pas trop en VB, mais je pense que ceci est du au fait que tu n'as pas déclaré la variable vectcopy avant de l'utiliser
0
wesley78 Messages postés 11 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 29 mai 2010
29 mai 2010 à 20:40
hello Geo373,

merci de ton aide, je regarderai ceci plus tard mais je garde ta remarque en tête et je te tiens au courant!

bon week end
0