Déclaration VBA d'1 variable tableau calculée

  • Initiateur de la discussion Ludo-ly
  • Date de début
L

Ludo-ly

Guest
Bonjour à tous,

J'essaye depuis un petit moment, sous VBA-Exel, d'utiliser une variable tableau dont la dimension serait calculée et non spécifiée par une constante rentrée au clavier.

J'ai eu beau déclarer la variable de calcul de cette dimension en variable globale cela ne foctionne pas.

Voici ce que j'ai essayé dans un module :

Public nb_enr As Integer

Public Sub Formulaire_Selection()
Dim Db3 As Database
Dim Rs3 As Recordset
Set Db3 = DBEngine.OpenDatabase(ThisWorkbook.Path & Repertoire)
Set Rs3 = Db3.OpenRecordset("Req_MAJ Excel", dbOpenDynaset)
' Alimentation des champs de critères de sélection
If Not Rs3.EOF Then
Rs3.MoveFirst
Do
Criteres_selection.Liste_Indicateur.AddItem (Rs3![Code Indicateur])
Rs3.MoveNext
Loop Until Rs3.EOF
' Calcul du nombre d'enregistrements retourné par la requête
nb_enr = Rs3.RecordCount
End If
End Sub

Public Sub Formulaire_Selection_Validation()
Dim cpt As Single ' Compteur de boucle
Dim Indicateur(nb_enr) As Variant ' Paramètre requête

For cpt = 0 To (Criteres_selection.Liste_Indicateur.ListCount - 1)
If Criteres_selection.Liste_Indicateur.Selected(cpt) = True Then
Indicateur(cpt) = Criteres_selection.Liste_Indicateur.List(cpt)
End If
Next cpt
End Sub


Merci d'avance,
Ludovic.
 
L

Ludo-ly

Guest
Bon, et bien après quelques heures de ténacité, j'ai finit par résoudre mon problème, il s'agit d'utiliser :

un tableau dynamique, et de le dimensionner à volonté

Voici ce que cela donne :

Public nb_enr As Integer
Public Indicateur() As Variant ' tableau dynamique stockant des Paramètres

Public Sub Formulaire_Selection()
Dim Db3 As Database
Dim Rs3 As Recordset
Set Db3 = DBEngine.OpenDatabase(ThisWorkbook.Path & Repertoire)
Set Rs3 = Db3.OpenRecordset("Req_MAJ Excel", dbOpenDynaset)
' Alimentation des champs de critères de sélection
If Not Rs3.EOF Then
Rs3.MoveFirst
Do
Criteres_selection.Liste_Indicateur.AddItem (Rs3![Code Indicateur])
Rs3.MoveNext
Loop Until Rs3.EOF
' Calcul du nombre d'enregistrements retourné par la requête
nb_enr = Rs3.RecordCount
End If
End Sub

Public Sub Formulaire_Selection_Validation()
Dim cpt As Single ' Compteur de boucle

ReDim Indicateur(nb_enr) ' Alloue nb_enr ligne au tableau

For cpt = 0 To (Criteres_selection.Liste_Indicateur.ListCount - 1)
If Criteres_selection.Liste_Indicateur.Selected(cpt) = True Then
Indicateur(cpt) = Criteres_selection.Liste_Indicateur.List(cpt)
End If
Next cpt
End Sub


Et voilà, tout seul, comme un grand.
Ludovic.

Victory. (mais reste à paramétrer une requête access via Excel ce qui risque d'être "coton" à automatiser au maximum car c'est le but de mon programme)
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 323
Membres
103 516
dernier inscrit
René Rivoli Monin