Transformation de tableau avec VBA
Résolu
elhombre
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
elhombre Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
elhombre Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je cherche de l'aide afin d'automatiser la tranformation d'un tableau (Tableau1) avec par exemple 5 colonnes et 10 lignes avec pour range ("A1:E1") en un tableau (Tableau2) avec une seule colonne. Pour ce faire, la 1ere ligne complète du tableau1 doit être copier/coller/transposée dans le tableau1, ensuite la deuxième ligne du tableau1 doit à son tour être copier/collé/transposée dans le tableau2 mais juste en dessous de la première et ainsi de suite.....en fin de compte le tableau2 sera bien un tableau mais avec une seule colonne qui sera la succession des lignes transposées du tableau1.
J'ai oublié de dire que mon tableau1 est compris dans la feuil1 et mon tableau2 dans la feuil2. Aussi le tableau1 contient des vides qui seront considérés comme des vides dans le tableau 2. Ci-après ce que j'ai bidouillé, je me dis qu'une boucle pourrait faire l'affaire, mais rien à faire j'ai fait des tests mais soit seulement la ligne1 du tableau1 est recopiée ;a l'indéfini dans le tableau 2, soit c'est l'unique cellule "A1" qui est copiée à l'indéfini dans le tableau2. Aussi y-a-t-il un moyen d'autoriser un nombre de lignes variable dans le tableau1 au lieu d'avoir un range fixe:
Dim I As Range
Set I = ThisWorkbook.Worksheets("feuil1").Range("A2:E2")
Dim J As Range
Set J = ThisWorkbook.Worksheets("feuil2").Range("A2:I100")
' boucle sur chaque cellule de "I"
For Each cI In I
' boucle sur chaque cellule de "J"
For Each cJ In J
Sheets("feuil1").Select
cI.Copy
Sheets(2).Select
Sheets("feuil2").Select
cJ.PasteSpecial
' sortie forcée boucle sur "J"
Exit For
Next
Next
Application.CutCopyMode = False
Transpose = True
End Sub
Je cherche de l'aide afin d'automatiser la tranformation d'un tableau (Tableau1) avec par exemple 5 colonnes et 10 lignes avec pour range ("A1:E1") en un tableau (Tableau2) avec une seule colonne. Pour ce faire, la 1ere ligne complète du tableau1 doit être copier/coller/transposée dans le tableau1, ensuite la deuxième ligne du tableau1 doit à son tour être copier/collé/transposée dans le tableau2 mais juste en dessous de la première et ainsi de suite.....en fin de compte le tableau2 sera bien un tableau mais avec une seule colonne qui sera la succession des lignes transposées du tableau1.
J'ai oublié de dire que mon tableau1 est compris dans la feuil1 et mon tableau2 dans la feuil2. Aussi le tableau1 contient des vides qui seront considérés comme des vides dans le tableau 2. Ci-après ce que j'ai bidouillé, je me dis qu'une boucle pourrait faire l'affaire, mais rien à faire j'ai fait des tests mais soit seulement la ligne1 du tableau1 est recopiée ;a l'indéfini dans le tableau 2, soit c'est l'unique cellule "A1" qui est copiée à l'indéfini dans le tableau2. Aussi y-a-t-il un moyen d'autoriser un nombre de lignes variable dans le tableau1 au lieu d'avoir un range fixe:
Dim I As Range
Set I = ThisWorkbook.Worksheets("feuil1").Range("A2:E2")
Dim J As Range
Set J = ThisWorkbook.Worksheets("feuil2").Range("A2:I100")
' boucle sur chaque cellule de "I"
For Each cI In I
' boucle sur chaque cellule de "J"
For Each cJ In J
Sheets("feuil1").Select
cI.Copy
Sheets(2).Select
Sheets("feuil2").Select
cJ.PasteSpecial
' sortie forcée boucle sur "J"
Exit For
Next
Next
Application.CutCopyMode = False
Transpose = True
End Sub
A voir également:
- Transformation de tableau avec VBA
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
3 réponses
bonsoir
une proposition commandée par un bouton
bonne suite
une proposition commandée par un bouton
Option Explicit Const nomFO As String = "Feuil1" ' nom feuille Origine Const lidebFO As Long = 1 Const codebFO As Long = 1 Const nomFB As String = "Feuil2" ' nom feuille But Const lidebFB As Long = 1 Const coFB As Long = 1 Private Sub CommandButton1_Click() Dim liFO As Long, lifinFO As Long, coFO As Long, cofinFO As Long Dim liFB As Long lifinFO = Sheets(nomFO).Cells(Rows.Count, codebFO).End(xlUp).Row cofinFO = Sheets(nomFO).Cells(lidebFO, Columns.Count).End(xlToLeft).Column liFB = lidebFB For liFO = lidebFO To lifinFO For coFO = codebFO To cofinFO Sheets(nomFB).Cells(liFB, coFB).Value = Sheets(nomFO).Cells(liFO, coFO).Value liFB = liFB + 1 Next coFO Next liFO End Sub
bonne suite
ccm81,
Mille merci pour l'aide apportée, c'est exactement ce que je voulais et ça marche nickel ton programme. Tu ne peux pas savoir combien tu me fais sauver du temps car j'ai presque une cinquantaine de tableaux qu'il me fallait transformer avec la méthode que tu m'as proposées. Merci encore pour tout. Je refais des tests et après je marque comme résolu. Bien à toi.
Mille merci pour l'aide apportée, c'est exactement ce que je voulais et ça marche nickel ton programme. Tu ne peux pas savoir combien tu me fais sauver du temps car j'ai presque une cinquantaine de tableaux qu'il me fallait transformer avec la méthode que tu m'as proposées. Merci encore pour tout. Je refais des tests et après je marque comme résolu. Bien à toi.