Re : Passer d'un tableau en colonne en ligne
Bonjour à tous,
quelques explications pour laurent950 🙂
Quelque soit le résultat attendu, le report de valeur d’un tableau source vers un tableau cible, peut être envisagé de plusieurs manières :
A)- Soit par des formules :
Cette technique, la plus employée, est dépendante de la complexité du report de valeurs à effectuer et du nombre de valeurs à reporter (Pour ma part, je ne dépasse guère 5000 lignes et 100 colonnes avec des formules simples).
B)- Soit par des macros VBA avec plusieurs possibilités :
1- Soit en direct par macro évènementielle qui reporte, selon un processus établi, les valeurs chaque fois qu’elles sont modifiées du tableau source vers le tableau cible.
2- Soit par commande manuelle qui reporte les valeurs d’un tableau à l’autre, à la volonté de l’utilisateur (C’est notamment utile, par exemple, pour réaliser le report des valeurs d’un inventaire de fin d’année vers le tableau de stock de l’année suivante).
Sur le plan technique VBA, plusieurs possibilités sont offertes, elles dépendent aussi de la complexité et de la quantité de valeurs à reporter.
a)- Si le report est plus compliqué que quantitatif, un report par macro directe d’une feuille à l’autre est possible. Cela nécessite cependant que le tableau soit propre pour déterminer les contours de la zone de travail. (Voir macro ReportDirect)
b)- La méthode VBA utilisée dans le post de dessus est à employer, comme la précédente, quand le report est plus compliqué que quantitatif. Cette méthode fait appel à une variable tableau pour les retransmettre directement dans la feuille cible.
Ces deux méthodes peuvent être grandement accélérée si le report est plus quantitatif que compliqué en désactivant l’affichage à placer en début de macro :
Application.ScreenUpdating = False
c)- La méthode que tu décris est la mise en variable du tableau de la feuille source, puis, de définir les résultats attendus dans une autre variable tableau temporaire, lesquels, enfin, seront reportés dans la feuille cible. C’est la bonne méthode VBA quand le report est plus quantitatif que compliqué.
La difficulté est qu’un tableau dynamique ne peut être redimensionné que sur sa dernière dimension. Dans l’exemple, la seconde.
Deux solutions, soit on définit les dimensions du tableau résultat, soit on ajoute 1 à la seconde dimension du tableau à chaque nouvelle valeur.
c1- Avec calcul de dimensions (Voir la seconde macro ReportResultat_Tableau_Dimensionné)
Dans l’exemple du post d'origine, il est possible de calculer le nombre de résultats attendus de façon brute, en prenant le nombre maximum de résultats possibles, nombre qui correspond au nombre total de cellule de la plage définie :
X = Plage.Count
c2-En calculant le nombre de valeurs non nulles dans le tableau source.
X = Application.Count(Plage)
Lors de la restitution, dans le premier cas, une partie du tableau restitué sera vide, ce qui n’aura aucune incidence sur l’affichage des résultats, dans le second cas, le tableau sera exactement aux dimensions souhaitées.
c3- Par la méthode de redimensionnement de la seconde dimension du tableau résultat (Voir la macro ReportResultat_Tableau_Fur_A_Mesure)
ReDim Preserve TabResult(1 To 2, 1 To UBound(TabResult, 2) + 1)
Cette méthode contraint, lors de la restitution des résultats, de transposer les valeurs contenues dans le tableau :
.Range("A2").Resize(UBound(TabResult, 2), UBound(TabResult, 1)) = Application.Transpose(TabResult)
Voila un petit aperçu des possibilités de report de valeur d’un tableau vers un autre.