Affectation de valeurs au tableau bidimensionnel

J'essaie d'get des données que je saisis avec une autre macro dans un tableau bidimensionnel afin que je puisse appliquer une fonction à ces données, mais peu importe ce que j'essaye, je continue à avoir des erreurs. Les données include les strings et les nombres. Je pourrais toujours simplement faire reference aux cellules et oublier le tableau, mais cela complique la fonction. Voici mon code:

(Déclarations)

Dim nLiens As Byte, nCreditors As Byte Dim SecurityV As Currency, ASecurityV As Currency Const adjuster = 0.9 

(Sous-set pertinent)

 Public Sub VariableDeclaration() nLiens = InputBox("Enter number of liens in security") nCreditors = InputBox("Enter number of creditors") SecurityV = InputBox("Enter security full value") ASecurityV = adjuster * SecurityV Call ODebt End Sub Sub ODebt() ' '(...) ' Dim oDebt() As Variant ReDim oDebt(1 To nCreditors + 1, 1 To nLiens + 1) Dim rg As Range Set rg = Range(Cells(1, 1), Cells(nCreditors + 1, nLiens + 1)) oDebt = rg.Value MsgBox (oDebt) '>>> ERROR: type mismatch Call SAllocation End Sub ' Public Sub VariableDeclaration() nLiens = InputBox("Enter number of liens in security") nCreditors = InputBox("Enter number of creditors") SecurityV = InputBox("Enter security full value") ASecurityV = adjuster * SecurityV Call ODebt End Sub Sub ODebt() ' '(...) ' Dim oDebt() As Variant ReDim oDebt(1 To nCreditors + 1, 1 To nLiens + 1) Dim rg As Range Set rg = Range(Cells(1, 1), Cells(nCreditors + 1, nLiens + 1)) oDebt = rg.Value MsgBox (oDebt) '>>> ERROR: type mismatch Call SAllocation End Sub ' Public Sub VariableDeclaration() nLiens = InputBox("Enter number of liens in security") nCreditors = InputBox("Enter number of creditors") SecurityV = InputBox("Enter security full value") ASecurityV = adjuster * SecurityV Call ODebt End Sub Sub ODebt() ' '(...) ' Dim oDebt() As Variant ReDim oDebt(1 To nCreditors + 1, 1 To nLiens + 1) Dim rg As Range Set rg = Range(Cells(1, 1), Cells(nCreditors + 1, nLiens + 1)) oDebt = rg.Value MsgBox (oDebt) '>>> ERROR: type mismatch Call SAllocation End Sub 

J'ai essayé d'autres alternatives, comme la configuration de la cellule de contenu par cellule avec deux loops 'For' et LBound et UBound , mais rien ne semble fonctionner.

Vous n'obtenez pas votre erreur lors du remplissage, mais en affichant le tableau. Il n'est pas possible de Msgbox simplement un Msgbox car Msgbox s'attend à un argument Ssortingng. Vous pouvez, d'autre part, afficher des positions spécifiques (p. oDebt(1,1) . oDebt(1,1) ).

Si vous souhaitez examiner tous ses contenus, utilisez le mode de debugging et la window Local , ou imprimez-le dans des cellules inutilisées.

Je copyrais les valeurs de la feuille de données de cette façon:

 Dim oDebt As Variant Dim rg As Range Set rg = Range(Cells(1, 1), Cells(nCreditors + 1, nLiens + 1)) oDebt = rg ' get data from sheet '... do calculations with oDebt array rg = oDebt ' put data on sheet 

En mots: vous dimensionnez le tableau automatiquement en assignant la plage. Si vous avez besoin des limites numériques, utilisez

 nrows = UBound(oDebt, 1) ncols = UBound(oDebt, 2) 

Ici, vous voyez aussi la signification de la dimension, l'index 1 est une ligne, l'index 2 est une colonne.