chrisnyc
Messages postés25Date d'inscriptionmardi 16 août 2005StatutMembreDernière intervention22 septembre 2005
-
9 sept. 2005 à 16:41
chrisnyc
Messages postés25Date d'inscriptionmardi 16 août 2005StatutMembreDernière intervention22 septembre 2005
-
12 sept. 2005 à 21:35
bonjour
voici mon probleme j ai besoins d alimenter un tableau 2 d mais dont la taille n est pas constante
les redim utilises ici me donne une erreur!!!!!
voici mon bout de code qui plante
Dim Price() As String
Dim OverFlds() As String
Dim cusip() As String
.........................
For compt2 = LBound(cusip) To UBound(cusip)
If cusip(compt2) <> "" Then
Sheets(3).Range("A1").Select
compt = 0
For n = 1 To nb_over
If ActiveCell.Offset(compt2 - 1, n).Value <> "" Then
'ReDim Preserve Price(compt2, compt)
'ReDim Preserve OverFlds(compt2, compt)
OverFlds(compt2, compt) = Override_mnem(0)
Price(compt2, compt) = ActiveCell.Offset(compt2 - 1, n).Value
compt = compt + 1
End If
Next n
End If
Next compt2
..........................................
Merci d avance pour vos conseils
cordialement
christophe
Zlub
Messages postés809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20109 11 sept. 2005 à 03:14
Salut Chris NYC,
Ou si tu préféres avec le "PCPT Style"
Type Tableau
ligne() As String
col() As String
End Type
Sub tableaux()
Dim t() As Tableau
Dim tmp As Tableau
Dim i As Integer
For i = 1 To 10
' Ajouter une entrée au tableau principal
If i = 1 Then
ReDim t(1 To 1)
Else
ReDim Preserve t(1 To i)
End If
' Ajouter des infos pour inserer une ligne dans le tableau principale
Dim j As Integer
For j = 1 To 7
If j = 1 Then
ReDim tmp.ligne(1 To 1)
ReDim tmp.col(1 To 1)
Else
ReDim Preserve tmp.ligne(1 To j)
ReDim Preserve tmp.col(1 To j)
End If
tmp.ligne(j) = "Attribut " & j
tmp.col(j) = "Valeur " & j
Next j
t(i) = tmp
Next i
' On affiche le tout
For i = 1 To UBound (t)
tmp = t(i)
Debug.Print vbCrLf
For j = 1 To UBound (tmp.ligne)
Debug.Print "tab(" & i & ")" & ".col(" & j & ") = " & tmp.col(j)
Debug.Print "tab(" & i & ")" & ".ligne(" & j & ")= " & tmp.ligne(j)
Next j
Next i
End Sub
Zlub
Messages postés809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20109 10 sept. 2005 à 00:55
Salut Chris NYC,
Tu ne peux redimensionner que la dernieredimension d'un tableau. Donc
pour un tableau une Dimension, forcement ça fonctionne bien, mais un
tableau 2D, seul la seconde est modifiable.
Pour contourner, faut par exemple utiliser des types
Type Tableau
ligne() As String
col() As String
End Type
Sub tableaux()
Dim t() As Tableau
Dim tmp As Tableau
Dim i As Integer
For i = 1 To 10
' Ajouter une entrée au tableau principal
If i = 1 Then
ReDim t(1 To 1)
Else
ReDim Preserve t(1 To i)
End If
' Ajouter des infos pour inserer une ligne dans le tableau principale
Zlub
Messages postés809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20109 9 sept. 2005 à 17:27
Salut,
Forcément, avec un type, c'es plus élégant ...
Sauf que son probléme, c'est le redim dynamique ... d'où mon exemple
idiot, pour presenter comment ça fonctionne. Apres, c'est clair que
l'utilisation de type est préférable ... Pour ne nombreuse raison, dont
la lisibilitée du code...
chrisnyc
Messages postés25Date d'inscriptionmardi 16 août 2005StatutMembreDernière intervention22 septembre 2005 9 sept. 2005 à 18:24
Voici toute ma procedure
Sub Get_Cusips(Cusips() As String, Fields() As String, Fields_mnem() As String, Override() As String, Override_mnem() As String, Curve() As String, nb_cusip As Integer, nb_curve As Integer, nb_field As Integer, nb_over As Integer)
Dim Price() As String
Dim OverFlds() As String
Dim cusip() As String
Dim RngCusips As Range
Dim RngCell As Range
Dim n As Integer
Dim m As Integer
Dim compt As Integer
Dim compt2 As Integer
Dim ligne As Integer
ligne = 10
Sheet3.Select
Sheets(3).Range("A10").Select
For compt = 0 To nb_curve - 1
'CREATE CURVE
If Curve(compt) <> "" Then Call Module10.create_curve_bloomberg(Curve(compt), compt + 1)
'DEFINE ATTRIBUTE
For compt2 = 0 To nb_cusip - 1
ReDim Preserve cusip(ligne + compt2)
'JE RAJOUTE UNE CASE POUR CHAQUE CUSIP
ReDim Preserve Price(ligne + compt2)
ReDim Preserve OverFlds(ligne + compt2)
cusip(ligne + compt2) = Cusips(compt2)
Next compt2
ligne = ligne + 6 + nb_cusip
If compt <> nb_curve - 1 Then ActiveCell.Offset(ligne, 0).Select
Next compt
For compt2 = LBound(cusip) To UBound(cusip)
If cusip(compt2) <> "" Then
Sheets(3).Range("A1").Select
compt = 0
For n = 1 To nb_over
'JE VEUX RAJOUTER UNE DIMENSION SI LA CASE EST REMPLIE
If ActiveCell.Offset(compt2 - 1, n).Value <> "" Then
ReDim Preserve Price(0 to compt2, 0 To compt)
ReDim Preserve OverFlds(0 to compt2, 0 To compt)
OverFlds(compt2) = Override_mnem(0)
Price(compt2) = ActiveCell.Offset(compt2 - 1, n).Value
compt = compt + 1
End If
Next n
End If
Next compt2
'SEND TO BLP
Set DataControl = New Class1
Call DataControl.Get_OAS(cusip, Price, OverFlds, Fields_mnem, ligne)
Sheets(3).Range("A10").Select
End Sub
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
En fait le probleme est certainement que ma table doit avoir autant de colonne sur chaque ligne?
dans ce cas me serait il possible de mettre un tableau dans un tableau?
de quel type doit etre le premier tableau (tableau contenant l autre)
merci pour vos conseils
cordialement