VBA vecteur en argument

wesley78 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
wesley78 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   289
 
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   Statut Membre Dernière intervention  
 
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
Iama
 
Bonjours,

Pour copier tout essaye

vectcopy() = vecteurarg ()
0
wesley78 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
Iama
 
Domage sur la mienne ça marche
vectcopy() = vecteurarg()
0
wesley78 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   96
 
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   Statut Membre Dernière intervention  
 
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