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: