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 Sub
Merci Laurent