Optimisation d'une macro de transposition
Fermé
chlovba
Messages postés
5
Date d'inscription
dimanche 8 avril 2018
Statut
Membre
Dernière intervention
10 avril 2018
-
8 avril 2018 à 23:27
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 10 avril 2018 à 08:07
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 10 avril 2018 à 08:07
A voir également:
- Optimisation d'une macro de transposition
- Optimisation pc - Accueil - Utilitaires
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Macro logiciel - Télécharger - Organisation
1 réponse
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
Modifié le 9 avril 2018 à 06:49
Modifié le 9 avril 2018 à 06:49
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
9 avril 2018 à 10:55
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.
9 avril 2018 à 13:24
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
9 avril 2018 à 13:46
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 :)
9 avril 2018 à 18:39
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:
9 avril 2018 à 23:26
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