Transformation de tableau avec VBA

Résolu/Fermé
elhombre Messages postés 3 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 2 décembre 2011 - Modifié par elhombre le 1/12/2011 à 19:31
elhombre Messages postés 3 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 2 décembre 2011 - 2 déc. 2011 à 14:27
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



A voir également:

3 réponses

ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié par ccm81 le 1/12/2011 à 20:03
bonsoir

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
0
elhombre Messages postés 3 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 2 décembre 2011
1 déc. 2011 à 21:12
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.
0
elhombre Messages postés 3 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 2 décembre 2011
2 déc. 2011 à 14:27
ccm81,
Tous les tests sont concluants. Merci encore. Je marque le problème étant résolu. Bonne journée.
0