Optimisation d'une macro de transposition
chlovba
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Mon but est de transposer toutes les cellules d'une feuille pour la transposer sur une ligne dan sun tableau final "resultat"
J'ai crée la macro suivante:
Sub test()
Dim Ws As Worksheet
Dim i As Integer
Dim j As Integer
Dim k As Integer
For Each Ws In ThisWorkbook.Worksheets
For j = 1 To ThisWorkbook.Worksheets.Count - 1
For i = 1 To Ws.Cells(Rows.Count, 1).End(xlUp).Row
For k = 1 To Ws.Cells(i, Columns.Count).End(xlToLeft).Column
If Ws.Name = "Resultat" Then
Else
Ws.Cells(i, k).Copy Sheets("Resultat").Cells(j, Columns.Count).End(xlToLeft).Offset(0, 1)
End If
Next k
Next i
Next j
Next Ws
End Sub
A mon avis il y a mieux car la macro ne supporte pas plus de qqfeuilles avant de planter ...
Si vous avez des conseils pour optimiser ce code et permettre le traitement de centaines de feuilles...
Merci d'avance
Chlo
Mon but est de transposer toutes les cellules d'une feuille pour la transposer sur une ligne dan sun tableau final "resultat"
J'ai crée la macro suivante:
Sub test()
Dim Ws As Worksheet
Dim i As Integer
Dim j As Integer
Dim k As Integer
For Each Ws In ThisWorkbook.Worksheets
For j = 1 To ThisWorkbook.Worksheets.Count - 1
For i = 1 To Ws.Cells(Rows.Count, 1).End(xlUp).Row
For k = 1 To Ws.Cells(i, Columns.Count).End(xlToLeft).Column
If Ws.Name = "Resultat" Then
Else
Ws.Cells(i, k).Copy Sheets("Resultat").Cells(j, Columns.Count).End(xlToLeft).Offset(0, 1)
End If
Next k
Next i
Next j
Next Ws
End Sub
A mon avis il y a mieux car la macro ne supporte pas plus de qqfeuilles avant de planter ...
Si vous avez des conseils pour optimiser ce code et permettre le traitement de centaines de feuilles...
Merci d'avance
Chlo
A voir également:
- Optimisation d'une macro de transposition
- Optimisation pc - Accueil - Utilitaires
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
1 réponse
Bonjour,
Regardez ceci: application.transpose
https://forums.commentcamarche.net/forum/affich-23668394-vba-ecriture-variable-tableau
Regardez ceci: application.transpose
https://forums.commentcamarche.net/forum/affich-23668394-vba-ecriture-variable-tableau
Merci pour votre réponse.
Je n'ai pas réussi à monter un code autour de cette fonction .. meme en utilisant le lien vers le site complet (je débute et cela me dépasse un peu)
De plus mos données sont disposées alétoirement dans plusieurs feuilles et je souhaite parcourir une ligne jusqu'a une cellule vide et chacuqe ligne jsuqu'a une ligne vide.
Et transposer toutes les données dans une seule ligne sur une feuille "Resultat".
Ils serait interessant d'avoir les cellules dans l'ordre gauche vers droite puis ligne du dessous gauche vers droite etc....
Ce que fait mon code, mais de manière tres grossiere ... et absolument pas optimisée.
Merci pour votre aide.
Tout a fait Thierry, mais l'instruction Application.transpose est tout a fait utilisable pour la copie par ligne vu que vous connaissez la derniere colonne de chaque ligne ce qui eviterait la boucle sur les colonnes
Nomalement je tatone en changant des choses par ci par la en en voyent le resultat mais la je n'arrive meme pas a faire fonctionner le code.
Je débute vraiment et la je tourne en rond :)
Si j'ai bien compris votre besoin:
vous faites x fois le travail avec cette ligne de code!!!!!!!!!!!!!!!!!!!!!!!!!!!!
For j = 1 To ThisWorkbook.Worksheets.Count - 1
code simplifie:
Je viens d'essayer de votre code, et d'essayer de le comprendre ...
J'ai essayé de le modifier moi meme pour aboutir au resultat voulu (les valeurs d'une feuille par ligne)
J'ai pour l'instant réussi à mettre toutes mes valeurs sur une colonne (au lieu d'une ligne ...) et je n'arrive pas séparer chaque feuille en lignes ..
Exemple:
Feuille1 remplie de plusieurs lignes et colonnes de a
Feuille 2 ..... b
Resultat = 1 ligne de a et 1 ligne de b
Voila votre code annoté d'apres ma compréhension et un peu modifié comme dit plus haut:
Sub test()
'-------------------------------
'Declaration des variables
'Feuilles du classeur "Ws"
Dim Ws As Worksheet
'i = Nb de lignes non vides de la feuille
Dim i As Long
'j = Nb de colonnes non vides de i
Dim j As Long
'ligne = Nb ligne de "Resultat" = 1 ligne par feuille ??
Dim ligne As Long
'--------------------------------
ligne = 0
'Pour chaque feuille de ce classeur "Ws"
For Each Ws In ThisWorkbook.Worksheets
'Tous les .fonction seront definis avec Ws
With Ws
'Si la feuille est différente de "Resultat"
If Ws.Name <> "Resultat" Then
'Pour chaque Nb de lignes non vides de la feuille
For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
'Nb de colonnes non vides sur la ligne i
For j = 1 To .Cells(i, Columns.Count).End(xlToLeft).Column
'Definir la plage comme toutes le valeurs de la ligne i
'(de 1ere cellule de i a valeur de la derniere colonne vide)
Set Plage = .Range(.Cells(i, 1), .Cells(i, j))
' on incrémente d'une ligne pour avoir la plage de valeur sur la ligne du dessous
'(Démarre à zéro, 1ere ligne = 1)
'??
ligne = ligne + 1
'Ajouter sur la feuille Resultat
Sheets("Resultat").Cells(ligne, Columns.Count).End(xlToLeft) = Application.Transpose(Plage)
'.Cells(i, j).Copy Sheets("Resultat").Cells(ligne, Columns.Count).End(xlToLeft)
'Reset la definitionde la Plage de valeurs
Set Plage = Nothing
Next j
Next i
End If
End With
Next Ws
End Sub
Merci d'avance pour votre aide
Chloe