Passer d'un tableau en colonne en ligne

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bast0504

XLDnaute Occasionnel
Bonsoir

je voudrais savoir comment je pourrais transformer les informations se trouvant dans un tableau en colonne en ligne, avec une retranscription des étiquettes de colonnes
Voici un exemple pour plus d'infos
 

Pièces jointes

Dernière édition:
Re : Passer d'un tableau en colonne en ligne

Bonsoir CBernarT,

J'ai regardé votre code en variable tableau, et j'ai constaté que vous ne garder pas en mémoire les donner récupéré dans un tableau, mais que vous les ajouter dans la feuille cible au fur et a mesure du déroulement de la boucle.

J'ai essayé de mettre en mémoire dans un tableau = tablo2 pour les restitué en une seul fois, le souci c'est les dimensions des tableaux qui ne sont pas identique.

C'est à dire que le nombre de ligne est figé dans la dimension et que seules les colonnes peuvent être variables, mais ici je n’ai pas trouvé la solution ?

Je n’avais pas pensé a décharger les valeurs au fur et a mesure de la boucle avec une variable de type tableau, j'aurais pensé plus a une boucle de type for each, mais je suis loin d'être un expert.

Vous avez une explication ou ces variables les méthodes a adopter en fonction des différent cas

Au plaisir de vous lire

Laurent
 
Re : Passer d'un tableau en colonne en ligne

Bonjour
ci-joint un modèle de conversion de lignes en colonnes
Cordialement
Flyonets
 

Pièces jointes

Re : Passer d'un tableau en colonne en ligne

Bonjour,


Code:
Sub TransformeLigneColonne()
  Set f1 = Sheets("feuil1")
  a = Sheets("feuil2").[B1].CurrentRegion
  ligBD = 2
  For ligne = 2 To UBound(a, 1)
    For col = 2 To UBound(a, 2)
     If a(ligne, col) > 0 Then
       f1.Cells(ligBD, 1) = a(ligne, 1)
       f1.Cells(ligBD, 2) = a(1, col)
       ligBD = ligBD + 1
     End If
    Next col
  Next ligne
End Sub

Solution + rapide avec Dictionary

Il est plus simple d'utiliser Dictionary que des tableaux (pas de Redim Preserve à gérer)

Code:
Sub TransformeLigneColonne()
  Set f1 = Sheets("BD")
  Set d1 = CreateObject("scripting.dictionary")
  Set d2 = CreateObject("scripting.dictionary")
  a = Sheets("Source").[B1].CurrentRegion
  ligBD = 2
  For ligne = 2 To UBound(a, 1)
    For col = 2 To UBound(a, 2)
     If a(ligne, col) > 0 Then
       d1(ligBD) = a(ligne, 1)
       d2(ligBD) = a(1, col)
       ligBD = ligBD + 1
     End If
    Next col
  Next ligne
  f1.[A2].Resize(d1.Count) = Application.Transpose(d1.items)
  f1.[B2].Resize(d1.Count) = Application.Transpose(d2.items)
End Sub

Choix des colonnes à transposer


Code:
Sub TransformeLigneColonne()
  Set f1 = Sheets("BD")
  choixcol = Array(2, 3, 5)
  a = Sheets("Source").[B1].CurrentRegion
  ligBD = 2
  For ligne = 2 To UBound(a, 1)
    For Each col In choixcol
     If a(ligne, col) > 0 Then
       f1.Cells(ligBD, 1) = a(ligne, 1)
       f1.Cells(ligBD, 2) = a(1, col)
       f1.Cells(ligBD, 3) = a(ligne, col)
       ligBD = ligBD + 1
     End If
    Next col
  Next ligne
End Sub

JB
 

Pièces jointes

Dernière édition:
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.
 

Pièces jointes

Dernière édition:
Re : Passer d'un tableau en colonne en ligne

Bonsoir tout le monde,
une solution "formules" testé sur le fichier de Jacques.
A+

INCROYABLE

j'aurais jamais penser que l'on puisse résoudre ma problématique avec une formule. Comment appelle t on ce genre de formule, pouvez vous me l'expliquer en détail si possible (sinon auriez-vous un site ou je pourrais apprendre à construire ce genre de formule)

je cherche à comprendre cette partie
COLONNE(zone)+LIGNE(zone)*10^2);LIGNES($1:2));10^2)

Merci beaucoup pour cette découverte
 
Dernière édition:
Re : Passer d'un tableau en colonne en ligne

Re
cf. fichier
A+

Merci beaucoup pour vos explications, même si j'ai encore du mal pour tout comprendre. j'aurais une autre question, si je peux me permettre.

Est il possible d'adapter la formule dans le cas ou la zone de données n'est pas continu, mais séparer par des colonnes qui nous importent pas.

Voici un exemple en PJ
 

Pièces jointes

Re : Passer d'un tableau en colonne en ligne

Re
pas de problème :
- nommer la zone comportant les notes (D2:F4 dans ton exemple) "zone"
- appliquer les mêmes formules (validation en matriciel) en spécifiant bien l'argument "feuille_texte" de la fonction ADRESSE (donc le nom de la feuille où se trouvent les notes, "Source" dans ton exemple).
A+
 
Re : Passer d'un tableau en colonne en ligne

Bonsoir à tous

...(sinon auriez-vous un site ou je pourrais apprendre à construire ce genre de formule)
Tu ne crois pas que tu es sur le bon site ici ?

Sauf si XLD est subitement devenu un site dévolu au point de Croix ou au mille et une façons d’accommoder le tofu, XLD devrait être un des sites où tu pourras apprendre moults choses sur Excel, ses formules, ses macros etc...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Fonction si
Réponses
7
Affichages
223
R
  • Question Question
Réponses
3
Affichages
114
regis6460
R
Retour