L'indice n'appartient pas à la selection

Bonsoir tout le monde!

j'ai un grand besoin de vos compétences ça va etre rapide,

je vous explique, je dois gérer un portfeuille c'est à l'utilisateur de choisir les actifs quil veut dans son portefeuille et le code ci dessous , je voudrais qu'il permette de rentre dans un tableau virtuel actifs_choisis les valeurs à chaque instant des actifs sélectionnés par l'utilisateur mais vb a ne a decidé autrement car j'ai un message d'erreur 'l'indice n'appartient pas à la selection'.... je vous note le code ci dessous avec la base de donnée au cas ouù... un grand merci à ceux et cells qui me porteront un interet .

Sub creationTbl()

Dim l, c As Long

Dim marqueur, l2 As Integer

Dim actifs_choisis() As String

Dim feuil1, feuil2, data As Worksheets

ReDim actifs_choisis(l, c) As String

l = Worksheets("data").Columns(1).Find("*", , , , xlColumns, xlPrevious).Row - 7

c = Worksheets("feuil1").Columns(3).Find("*", , , , xlColumns, xlPrevious).Row - 2

' l2 As Long, c2 As Long, i As Long

For i = 1 To c + 2

marqueur = Application.Match(Worksheets("feuil1").Cells(c, 2), Worksheets("data").Rows(2), 0)

For l2 = 8 To l + 7

If i = 1 Then

actifs_choisis(l2 - 7, 1) = Worksheets("data").Cells(l2, 1)

Else

actifs_choisis(l2 - 7, i - 1) = Worksheets("data").Cells(l2, marqueur)

Worksheets("feuil2").Cells(l2 - 7, i) = actifs_choisis(l2 - 7, i - 1)

End If

Next l2

i = i + 1

Next i

Bonjour sabrina75005

dans le code suivant

Sub creationTbl()
Dim l, c  As Long
Dim marqueur, l2 As Integer
Dim actifs_choisis() As String
Dim feuil1, feuil2, data As Worksheets

ReDim actifs_choisis(l, c) As String

l = Worksheets("data").Columns(1).Find("*", , , , xlColumns, xlPrevious).Row - 7
c = Worksheets("feuil1").Columns(3).Find("*", , , , xlColumns, xlPrevious).Row - 2

tu déclares ton tableau actifs_choisis avec les variables l et c qui ne sont pas encore initialisées DONC cela revient à déclarer un tableau à 0

il faut donc que tu donnes une valeur à l et c avant d'initialiser ton tableau tel que

Sub creationTbl()
Dim l, c  As Long
Dim marqueur, l2 As Integer
Dim actifs_choisis() As String
Dim feuil1, feuil2, data As Worksheets

l = Worksheets("data").Columns(1).Find("*", , , , xlColumns, xlPrevious).Row - 7
c = Worksheets("feuil1").Columns(3).Find("*", , , , xlColumns, xlPrevious).Row - 2

ReDim actifs_choisis(l, c) As String

par contre je n'ai pas regardé la suite du code, mais déjà tu devrais pouvoir avancer...

merci beaucoup Andrea73. ta proposition a permis à vba de ne pas rencontrer d'ereeur ! mais le soucis que je tente de résoudre est que je n'arrive pas à afficher mes valeurs !!

Je n'ai pas suivi ce projet...

et j'avoue que je ne comprends pas très bien la finalité de ton code...

pourrais-tu expliquer ce que tu veux faire (quel résultat obtenir) à partir de quelles données avec un petit exemple !

merci de nouveau pour ta réponse ... je souhaite en fait afficher dans la feuil2 les valeurs des titres (avec en colonne 1 de mon tableau les dates) que l'utilisateur a choisis à travers le userform que j'ai construit mais maintenant jai changé mon code et voici en image le resultat que j'ai .. je ne comprends pas pourquoi

Sub creationTbl()

Dim l, c As Long

Dim marqueur, l2 As Integer

Dim actifs_choisis() As String

Dim feuil1, feuil2, data As Worksheets

l = Worksheets("data").Columns(1).Find("*", , , , xlColumns, xlPrevious).Row - 7

c = Worksheets("feuil1").Columns(3).Find("*", , , , xlColumns, xlPrevious).Row - 2

ReDim actifs_choisis(l, c + 1) As String

' l2 As Long, c2 As Long, i As Long

'l = Worksheets("data").Range("A8").End(xlDown).Row

'c = Worksheets("feuil1").Range("B3").End(xlDown).Row

For i = 2 To c

marqueur = Application.Match(Worksheets("feuil1").Cells(c + 1, 2), Worksheets("data").Rows(2), 0)

For l2 = 8 To l + 6

If i = 2 Then

actifs_choisis(l2 - 7, 1) = Worksheets("data").Cells(l2, 1)

actifs_choisis(l2 - 7, 2) = Worksheets("data").Cells(l2, marqueur)

Else

actifs_choisis(l2 - 7, i + 1) = Worksheets("data").Cells(l2, marqueur)

End If

Next l2

Next i

For j = 1 To c

For i = 1 To l

Worksheets("feuil2").Cells(i, j) = actifs_choisis(i, j)

Next i

Next j

End Sub

vbaa

ok

je viens de tester ton code... et moi j'ai quelque chose du genre :

07/01/2005    100                100            100
07/08/2005    98.99840826        98.99840826    98.99840826
15/07/2005    102.1571626        102.1571626    102.1571626
22/07/2005    105.0846366        105.0846366    105.0846366
29/07/2005    105.6238753        105.6238753    105.6238753
08/05/2005    101.7719031        101.7719031    101.7719031
08/12/2005    101.6948096        101.6948096    101.6948096
19/08/2005    101.2326644        101.2326644    101.2326644
26/08/2005    99.61474044        99.61474044    99.61474044
09/02/2005    100.9244983        100.9244983    100.9244983
09/09/2005    103.8519722        103.8519722    103.8519722
16/09/2005    105.8551557        105.8551557    105.8551557
23/09/2005    103.389827        103.389827    103.389827
30/09/2005    105.7009688        105.7009688    105.7009688
10/07/2005    102.3111418        102.3111418    102.3111418
14/10/2005    105.3157092        105.3157092    105.3157092
21/10/2005    101.9258822        101.9258822    101.9258822
28/10/2005    101.1555709        101.1555709    101.1555709
11/04/2005    103.0045674        103.0045674    103.0045674
11/11/2005    107.3959862        107.3959862    107.3959862

mais ce j'aimerais savoir c'est "que faut-il mettre" dans le userform, et comment chercher les données et comment les présenter ?

ah ba c'est un peu mieux.. comment se fait-il que je n'ai pas la meme chose? mais on retrouve l'ensemble des valeurs d'un seul actif du portefeuille alors qu'il y en a plusieurs (tu peux les retrouver dans mon tableau sur la "feuil1" jai re trafiqué mon code et maintenant jai ça..... concernant le userform tu peux cliquer sur le dossier que j'ai joint tu va y trouver le userform les données on les récupère sur la feuille "data" mais on récupere les noms des actifs sur la feuil "feuil1". comment faire en sorte quil prenne bien les vleurs des différents actifs?

merci encore

Sub creationTbl()

Dim l, c As Long

Dim marqueur, l2 As Integer

Dim actifs_choisis() As String

Dim feuil1, feuil2, data As Worksheets

l = Worksheets("data").Columns(1).Find("*", , , , xlColumns, xlPrevious).Row - 7

c = Worksheets("feuil1").Columns(3).Find("*", , , , xlColumns, xlPrevious).Row - 2

ReDim actifs_choisis(l, c + 1) As String

' l2 As Long, c2 As Long, i As Long

'l = Worksheets("data").Range("A8").End(xlDown).Row

'c = Worksheets("feuil1").Range("B3").End(xlDown).Row

For i = 2 To c + 1

marqueur = Application.Match(Worksheets("feuil1").Cells(c + 1, 2), Worksheets("data").Rows(2), 0)

For l2 = 8 To l + 7

If i = 2 Then

actifs_choisis(l2 - 7, 1) = CDate(Worksheets("data").Cells(l2, 1))

actifs_choisis(l2 - 7, 2) = Val(Worksheets("data").Cells(l2, marqueur))

End If

actifs_choisis(l2 - 7, i) = Val(Worksheets("data").Cells(l2, marqueur))

Next l2

Next i

For j = 1 To c + 1

For i = 1 To l

Worksheets("feuil2").Cells(i, j) = actifs_choisis(i, j)

Next i

Next j

End Sub

image

je sais pas si c'est tres clair pour toi donc je prefere completer ma reponse ci dessus

en fait sur ma feuil1 dnas mon taleau en dessous de actifs il y a le nom des actifs choisis par l'utilisateur, donc l'optique est de la gestion de portefeuille donc je vais etre amené à faire des calculs avec les données qui commence à la ligne 8 jusquà la fin de la colonne de ma feuil "data" donc ne fait je veux rentrer dans un tableau virtuel la base de données dont jai besoin pour mes calculs futurs i-e les valeurs des actifs choisis par l'utilisateur .....je laffiche ici pour justement voir si mes valeurs sont bien rentrées dans le tableau ( ce que jai bien fait de faire puisque apparemment les valeurs sont mal rentrées .. jes pere que c un peu plus clair pour toi

Bonjour tout le monde,

j'ai avancé dans mon code donc j'arrive à afficher les dates et les valeurs de mes actifs dans la feuil2 mais le soucis c que les dates ne s'affichent pas correctement sur excel et mes valeurs affichées ne prennent paq la partie décimales. comment faire svp? une fois c pb résolu,je pourrais avancer.

merci encore et encore

Sab

mon code:

Sub creationTbl()

Dim l, c As Long

Dim marqueur, l2 As Integer

Dim actifs_choisis() As String

Dim feuil1, feuil2, data As Worksheets

l = Worksheets("data").Columns(1).Find("*", , , , xlColumns, xlPrevious).Row - 7

c = Worksheets("feuil1").Columns(3).Find("*", , , , xlColumns, xlPrevious).Row - 2

ReDim actifs_choisis(l, c + 1) As String

For i = 2 To c + 1

marqueur = Application.Match(Worksheets("feuil1").Cells(i + 1, 2), Worksheets("data").Rows(2), 0)

For l2 = 8 To l + 7

If i = 2 Then

actifs_choisis(l2 - 7, 1) = CDate(Worksheets("data").Cells(l2, 1))

actifs_choisis(l2 - 7, 2) = Val(Worksheets("data").Cells(l2, marqueur))

End If

actifs_choisis(l2 - 7, i) = Val(Worksheets("data").Cells(l2, marqueur))

Next l2

Next i

'partie à effacer une fois quon a vu que ca marché bien !

For j = 1 To c + 1

For i = 1 To l

Worksheets("feuil2").Cells(i, j) = actifs_choisis(i, j)

Next i

Next j

End Sub

image1

Bonjour,

Sans entrer dans le vif du sujet (je n'ai pas lu), tu déclares tes variables en pensant sans doute que le type que tu indiques vaut pour celles énumérées dans la ligne, c'est FAUX !

Toute variable dont le nom n'est pas suivi de As type n'a pas de type déclaré (et donc est déclaré comme Variant).

Exemple:

Dim l, c As Long

c sera de type Long, l sera de type Variant.

D'autre part rien ne t'empêche de déclarer sur la même ligne des variables de types différents (vu ton code, tu sembles penser que ce n'est pas faisable).

Autre chose:

Dim feuil1, feuil2, data As Worksheets

Si feuil1 et feuil2 sont de type Variant, data n'est pas de type objet feuille de calcul, tu ne l'as pas déclaré: As Worksheet, mais As Worksheets, soit comme objet Collection de feuilles de calcul. Je ne pense pas que c'est ce qui était souhaité.

Enfin (tant que j'y suis), pour raccourcir la longueur de tes lignes de déclarations, tu peux utiliser pour certaines variables (String, Integer, Long, Single et Double), leur caractère de déclaration de type (respectivement: $, %, &, !, #)

Dim l&, c&, marqueur%, l2%, actifs_choisis() As String
Dim feuil1 As Worksheet, feuil2 As Worksheet, data As Worksheet

Cordialement.

Merci Mferrand pour tes conseils et tes remarques car je ne savais pas tout ça ...

peux tu juste m'éclairer de nouveau sur le fait que mes dates s'affichent (image cap) ainsi alors que je fais un copier de date à partir d'une feuille où elles s'affichent correctement (image cap1)? peux tu me dire comment obtenir la meme forme?!

je te remercie

Sab

cap1 cap

Tu as visiblement un mélange de dates en format (numérique) date [cadrées à droite] et de dates en format texte.

Il faudrait donc convertir en format numérique : on le fait en général en multipliant par 1. Dans les cas standard ça marche, sinon faut chercher pourquoi.

merci Mferrand pour tes remarques pertinentes ....jait rouver mon pb avec les dates c'est que excel comprends jj/mm/aaaa ALORS QUE VBA COMPRENDS mm/dd/yyyy donc apparemment ça le perturbe beaucoup . Comme mes dates s'affichent sous le format jj/mm/aaaa jai fait comprendre à vba grace à mon code où est le jour, le mois , l'année :

actifs_choisis(l2 - 7, 1) = Format(Worksheets("data").Cells(l2, 1), "mm/dd/yyyy")

Merci a vous tous et très bonne journée

Rechercher des sujets similaires à "indice appartient pas selection"