laurent950
XLDnaute Barbatruc
Bonsoir,
' Fichier avec exemple ici (Comment extraire sans une boucle explication ci-dessous de ceux que j'ai fais)
J’aimerais connaitre la ligne de commande qui permet d’extraire en une fois une dimension d’une Variable Tableau Multidimensionnel.
J’ai construit sur la Base des numéro du Keno (des couples de Numéro que j’ai stocké comme suit
Variable tableau de 4 dimensions ici pour cet exemple
- Remplissage de la dimension 1 = couple de 2 numéros
- Remplissage de la dimension 2 = couple de 3 numéros
- Remplissage de la dimension 3 = couple de 4 numéros
- Remplissage de la dimension 4 = couple de 5 numéros
Mais comment extraire juste la dimension que l’on veut sans passer par une boucle.
C’est le remplissage est ultra rapide et l’extraction serait hyper rapide sans refaire une nouveau tour de boucle.
J’ai argumenté la macro qui peux servir d’exemple avec une astuces pour crée une colonne vides entre chaque colonne dans cette variable tableau multidimensionnel
Code :
Fonction Lier au code :
Fonction de remplissage de la variable tableau 4 dimensions // A2_FunKeno
Fonction d'extration des dimensions // A3_Extraction
Laurent
' Fichier avec exemple ici (Comment extraire sans une boucle explication ci-dessous de ceux que j'ai fais)
J’aimerais connaitre la ligne de commande qui permet d’extraire en une fois une dimension d’une Variable Tableau Multidimensionnel.
J’ai construit sur la Base des numéro du Keno (des couples de Numéro que j’ai stocké comme suit
Variable tableau de 4 dimensions ici pour cet exemple
- Remplissage de la dimension 1 = couple de 2 numéros
- Remplissage de la dimension 2 = couple de 3 numéros
- Remplissage de la dimension 3 = couple de 4 numéros
- Remplissage de la dimension 4 = couple de 5 numéros
Mais comment extraire juste la dimension que l’on veut sans passer par une boucle.
C’est le remplissage est ultra rapide et l’extraction serait hyper rapide sans refaire une nouveau tour de boucle.
J’ai argumenté la macro qui peux servir d’exemple avec une astuces pour crée une colonne vides entre chaque colonne dans cette variable tableau multidimensionnel
Code :
VB:
Sub KenoCoupleT3D()
' Base Keno
' Feuilles sources ou sont stocké les valeur (Feuille Excel)
Dim F1 As Worksheet
Set F1 = Worksheets("Keno")
' Feuilles du Resultat extrait du tableau multidimensionnel
Dim F2 As Worksheet
Set F2 = Worksheets("Couple2")
Dim F3 As Worksheet
Set F3 = Worksheets("Couple3")
Dim F4 As Worksheet
Set F4 = Worksheets("Couple4")
Dim F5 As Worksheet
Set F5 = Worksheets("Couple5")
' Donner de la Feuilles sources Stocké dans le Tableau T()
Dim T As Variant
fin = F1.Range("A65536").End(xlUp).Row
T = F1.Range(F1.Cells(2, 1), F1.Cells(fin, 7)) ' Valeur source stocké dans un tableau
' Création d'un tableau dimensionnel.
Dim Tpos() As Variant
' Tpos(Nombres de Lignes,Nombres de Colonnes, Nombres de dimensions)
' Ici même nombre de lignes que le tableau T(), 12 colonnes, et 4 dimensions)
ReDim Tpos(1 To UBound(T, 1), 1 To 22, 1 To 4) ' Ici dimension d'un tableau multidimensionnel
' Boucle de Remplissage du tableau dimensionnel
' Remplissage date et Remplissage des heures
' Pour dimension (1 et 2 et 3 et 4)
For i = 1 To UBound(T, 1)
For j = 1 To 2
For k = 1 To UBound(Tpos, 1)
For m = 1 To UBound(Tpos, 3)
Tpos(k, j, m) = T(i, j)
Next m
Next k
Next j
Next i
' Ici pour exemples de remplissages
' dimension 1 = Combinaison de couples de 2 numéros
' dimension 2 = Combinaison de couples de 3 numéros
' dimension 3 = Combinaison de couples de 4 numéros
' dimension 4 = Combinaison de couples de 5 numéros
cpt = 3
For i = 1 To UBound(Tpos, 3)
For j = 1 To UBound(T, 1)
For k = 3 To UBound(T, 2)
For l = k + i To UBound(T, 2)
' Voir fonction A2_FunKeno cf explication dans la fonction
couple2 T, Tpos, j, cpt, i, k, l
Debug.Print Tpos(j, cpt, i)
' Ici un compteur pour une colonne vide entre chaque couple.
cpt = cpt + 2
Next l
Next k
cpt = 3
Next j
cpt = 3
Next i
' Ici j'aimerais extraire les dimensions ( 1 puis 2 puis 3 puis 4) comme ont le fait avec une
' Ligne de commande pour un tableau 2 dimensions :
' Qui serait = F2.Cells(2, 1).Resize(UBound(Tpos, 1), UBound(Tpos, 2)) = Tpos
' Mais qui ne fonctionne pas comme ceci pour un tableau Multidimensonel.
' Transfert vers excel en une seul fois pour la : Dimension 1
'F2.Cells(2, 1).Resize(UBound(Tpos, 1), UBound(Tpos, 2), 1) = Tpos
' Transfert vers excel en une seul fois pour la : Dimension 2
'F3.Cells(2, 1).Resize(UBound(Tpos, 1), UBound(Tpos, 2), 2) = Tpos
' Transfert vers excel en une seul fois pour la : Dimension 3
'F4.Cells(2, 1).Resize(UBound(Tpos, 1), UBound(Tpos, 2), 3) = Tpos
' Transfert vers excel en une seul fois pour la : Dimension 4
'F5.Cells(2, 1).Resize(UBound(Tpos, 1), UBound(Tpos, 2), 4) = Tpos
' Je suis Obliger de passer par une boucle pour extraire les valeur vers Excel
' Ici une boucle
' Dimension (Extraction de toutes les dimensions avec fonction)
For i = 1 To UBound(Tpos, 3)
For j = 1 To UBound(Tpos, 1)
For k = 1 To UBound(Tpos, 2)
' Voir fonction A3_Extraction cf explication dans la fonction
Transfert Tpos, j, k, i, F2, F3, F4, F5
Next k
Next j
Next i
End Sub
Fonction Lier au code :
Fonction de remplissage de la variable tableau 4 dimensions // A2_FunKeno
VB:
Function couple2(T, Tpos, j, cpt, i, k, l)
If i = 1 Then
' Ici remplissage de la dimension 1 = couple de 2 numéros
Tpos(j, cpt, i) = "'" & T(j, k) & "-" & T(j, l)
ElseIf i = 2 Then
' Ici remplissage de la dimension 2 = couple de 3 numéros
Tpos(j, cpt, i) = "'" & T(j, k) & "-" & T(j, k + 1) & "-" & T(j, l)
ElseIf i = 3 Then
' Ici remplissage de la dimension 3 = couple de 4 numéros
Tpos(j, cpt, i) = "'" & T(j, k) & "-" & T(j, k + 1) & "-" & T(j, k + 2) & "-" & T(j, l)
ElseIf i = 4 Then
' Ici remplissage de la dimension 4 = couple de 5 numéros
Tpos(j, cpt, i) = "'" & T(j, k) & "-" & T(j, k + 1) & "-" & T(j, k + 2) & "-" & T(j, k + 3) & "-" & T(j, l)
End If
End Function
Fonction d'extration des dimensions // A3_Extraction
VB:
Function Transfert(Tpos, j, k, i, F2, F3, F4, F5)
' Transfère les éléments du tableau vers Excel pour chaques dimensions
If i = 1 Then
' Ici extraction de la dimension 1 vers la feuille Couple2 d'Excel
F2.Cells(j, k) = Tpos(j, k, i)
ElseIf i = 2 Then
' Ici extraction de la dimension 2 vers la feuille Couple3 d'Excel
F3.Cells(j, k) = Tpos(j, k, i)
ElseIf i = 3 Then
' Ici extraction de la dimension 3 vers la feuille Couple4 d'Excel
F4.Cells(j, k) = Tpos(j, k, i)
ElseIf i = 4 Then
' Ici extraction de la dimension 4 vers la feuille Couple5 d'Excel
F5.Cells(j, k) = Tpos(j, k, i)
End If
End Function
Laurent
Pièces jointes
Dernière édition: