laurent950
XLDnaute Barbatruc
Bonsoir,
Ps : Pefixe Excel 2013 (Mais ce code est compatible toutes version Excel)
En Détaillant la problématique ci dessous :
* J'ai juste une ligne de code que je n'arrive pas à faire fonctionner.
' Indice hors plage (Erreur 9) --- Essayer de d'ajouter une colonne suplémentaire directement !
ReDim Preserve Cls_TabBase(LBound(TabBase(i), 1) To UBound(TabBase(i), 1), LBound(TabBase(i), 2) To UBound(TabBase(i), 2) + 1)
' Solution pour contourner se probléme :
TabTemp = TabBase(i)
ReDim Preserve TabTemp(LBound(TabTemp, 1) To UBound(TabTemp, 1), LBound(TabTemp, 2) To UBound(TabTemp, 2) + 1)
TabBase(i) = TabTemp
' Pour Voir l'anomalie et l'erreur dans le code :
Décoché la ligne en Rouge pour voir la ligne d'arret du code Bug erreur 9
ReDim Preserve Cls_TabBase(LBound(TabBase(i), 1) To UBound(TabBase(i), 1), LBound(TabBase(i), 2) To UBound(TabBase(i), 2) + 1)
ps : Elle est coché volontairement dans le code pour monter que cela fonctionne avec la solution de contournement.
' J'ai détailler tous le processe ci-dessous ! ainsi que le code que j'ai documenté.
  
' Ci-vous avez une idée avec un grand plaisir car je suis bloqué ici sur cette ligne qui devrait fonctionner !
	
	
	
	
	
		
Merci Laurent
	
		
			
		
		
	
				
			Ps : Pefixe Excel 2013 (Mais ce code est compatible toutes version Excel)
En Détaillant la problématique ci dessous :
* J'ai juste une ligne de code que je n'arrive pas à faire fonctionner.
' Indice hors plage (Erreur 9) --- Essayer de d'ajouter une colonne suplémentaire directement !
ReDim Preserve Cls_TabBase(LBound(TabBase(i), 1) To UBound(TabBase(i), 1), LBound(TabBase(i), 2) To UBound(TabBase(i), 2) + 1)
' Solution pour contourner se probléme :
TabTemp = TabBase(i)
ReDim Preserve TabTemp(LBound(TabTemp, 1) To UBound(TabTemp, 1), LBound(TabTemp, 2) To UBound(TabTemp, 2) + 1)
TabBase(i) = TabTemp
' Pour Voir l'anomalie et l'erreur dans le code :
Décoché la ligne en Rouge pour voir la ligne d'arret du code Bug erreur 9
ReDim Preserve Cls_TabBase(LBound(TabBase(i), 1) To UBound(TabBase(i), 1), LBound(TabBase(i), 2) To UBound(TabBase(i), 2) + 1)
ps : Elle est coché volontairement dans le code pour monter que cela fonctionne avec la solution de contournement.
' J'ai détailler tous le processe ci-dessous ! ainsi que le code que j'ai documenté.
' Ci-vous avez une idée avec un grand plaisir car je suis bloqué ici sur cette ligne qui devrait fonctionner !
		VB:
	
	
	Option Base 1
Sub test()
Dim TabBase() As Variant
Dim TabTemp() As Variant
' Base et resultat
    ' Tableau 1 dimension de 57 Case "FiXE" = Aux 57 --> Index
        ' Dimension 1 Case (Avec Option Base 1) pour commencer à 1
            ReDim TabBase(1)
' Suite a cela je fais une boucle pour le nombre de colonne à Remplire (Soit 57)
    For i = 1 To 57
    ' Ici je m'arrete a la colonne Numéro 3 pour test (Ensuite je sort de la procédure for)
    If i > 3 Then Exit For
        ' Le but :
        '   Chacune de ces 57 Colonnes contiennent des nombres :
        '       * Chacune de ces colonnes ne sont pas de longeur fixe :
        '           * Exemple la colonne 1 = B aura par exemple 488 Lignes / Donc ligne 15  à 503
        '           * Exemple la colonne 2 = C aura par exemple 466 Lignes / Donc Ligne 37  à 503
        '           * Exemple la colonne 3 = D aura par exemple 377 Lignes / Donc Ligne 126 à 503
' le soucis = Une deuxiéme plage à récupérer
'       ' Explication = il y a une date pour chacunes des valeurs :
'       '   * Soit l'exemple ci-dessus :
'       '       * Exemple la colonne 1 = B aura par exemple 488 Lignes / Donc ligne 15  à 503
'       '           * deux plages :
'       '               '   Colonne A qui contient les dates et donc :
'       '               '   Plage aura date   488 Lignes / Donc ligne 15  à
'       '               '   Plage aura Valeur 488 Lignes / Donc ligne 15  à 503
' *****************************************************************************************************
'       '       * Exemple la colonne 2 = C aura par exemple 466 Lignes / Donc Ligne 37  à 503
'       '           * Même procéder que ci-dessus.
'******************************************************************************************************
' Suite du code
        ' Du haut Colone 1 = B pour i (Ligne 2) descente vers le bas (Premiere non vide = Depart du tableau)
            pr = Cells(Cells(2, i + 1).End(xlDown).Row, i + 1).Row
        ' Je consigne la premiere colonne comme l'exemple ci-dessus (Pour les dates) / Tojours la colonne 1
            TabBase(i) = Range(Cells(pr, 1), Cells(503, 1)) ' pr premiere non vide ligne 15
        ' ça y est j'ai mon premier tableau 2 dimension dans ma variable tableau 1 dimension
        '   Variable tableau 1 Dimension soit : TabBase
        '   Variable tableau 2 Dimension soit : TabBase(i)(1)
        ' A présent je veux Créer une seconde colonne de mon tableau 2 dimension (Pour y ajouter les valeurs)
        ' Donc
        ' avec redim preserve je vais y ajouter une colonne suplémentaire (Pour en avoir 2) au lieux d'une seule
        ' Pour Info
        ' debug.print LBound(TabBase)       / La premiere ligne   de mon tableau 1 dimension
        ' debug.print UBound(TabBase)       / La derniere ligne   de mon tableau 2 dimension
        ' debug.print LBound(TabBase(i), 1) / La premiere ligne   de mon tableau 2 dimension
        ' debug.print UBound(TabBase(i), 1) / La derniere ligne   de mon tableau 2 dimension
        ' debug.print LBound(TabBase(i), 2) / La premiere colonne de mon tableau 2 dimension
        ' debug.print UBound(TabBase(i), 2) / La derniere colonne de mon tableau 2 dimension
      
        ' Indice hors plage (Erreur 9) --- Essayer de d'ajouter une colonne suplémentaire directement !
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
'                     CORRECTION : REDIM PRESERVE VARIABLE TABLEAU EMBOITE / Indice hors plage (Erreur 9)
'                     ReDim Preserve TabBase
'
'   ReDim Preserve TabBase(LBound(TabBase(i), 1) To UBound(TabBase(i), 1), LBound(TabBase(i), 2) To UBound(TabBase(i), 2) + 1)
'
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        ' Solution transitoire à évité avec la ligne de code ci-dessus à faire fonctionner
        ' En attente ! Astuce de transfert
          
            TabTemp = TabBase(i)
            ReDim Preserve TabTemp(LBound(TabTemp, 1) To UBound(TabTemp, 1), LBound(TabTemp, 2) To UBound(TabTemp, 2) + 1)
            TabBase(i) = TabTemp
        ' Fin du transfert et l'ajout de la colonne suplémentaire
        ' Suite du code ci-dessous
        '   Etape pour Remplire la variable tableau (de la colone ajouté)
                For j = LBound(TabBase(i), 1) To UBound(TabBase(i), 1)
                    TabBase(i)(j, 2) = Cells(j + (pr - 1), i + 1)
                Next j
        ' Fin de remplissage du tableau 2 dimenssion avec respectivement :
        '   ' Une colonne date
        '   ' La colonne créer (En Attente d'astuce) avec les valeurs ajouté
        ' Création d'une nouvelle case du Tableau 1 dimension pour :
        '   * repeter les opération ci-dessus pour les 56 colonnes restantes (Respectivement avec les dates)
        ' Utilisation de Redim Preseve pour ajouter une nouvelle case a cette variable tableau
                ReDim Preserve TabBase(UBound(TabBase) + 1)
    Next i
' Suppression de la derniere case du tableau 1 dimension inutile
    ReDim Preserve TabBase(UBound(TabBase) - 1)
' FIN DU CODE
' Resultat
'       * 1 tableau 1 dimension de 57 Cases
'               * Chacune des cases contients un tableau 2 Dimensions.
End SubMerci Laurent