Transposition VBA
MomoAbou
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
MomoAbou -
MomoAbou -
Bonjour,
J'ai besoin votre aide pour transposer des réponses Ligne vers colonne. Je reçois des données d'enquêtes avec en Ligne les indicateurs et en colonne les codes sites. Il y a trois types de réponse : Text; Yes/no ou number. Ainsi pour chaque site je voudrais avoir en colonne1 le site répété autant de fois qu'il y a d'indicateurs, Colonne 2 les codes des indicateurs, colonne trois uniquement les réponses de type Yes / No, colonne 4 Number et colonne 5 uniquement les réponses de type Text. Les fichiers à traiter se trouvent tous dans le même répertoire (54 fichiers) tous au même format. On passe au site suivant à chaque fois qu'on a traité toutes réponses d'un site.
Je joins un fichier exemple de ce que je souhaite obtenir en de ce que j'ai en entrée.
https://www.cjoint.com/c/FHrmxLVgk8w
Merci beaucoup d'avance.
Momo
J'ai besoin votre aide pour transposer des réponses Ligne vers colonne. Je reçois des données d'enquêtes avec en Ligne les indicateurs et en colonne les codes sites. Il y a trois types de réponse : Text; Yes/no ou number. Ainsi pour chaque site je voudrais avoir en colonne1 le site répété autant de fois qu'il y a d'indicateurs, Colonne 2 les codes des indicateurs, colonne trois uniquement les réponses de type Yes / No, colonne 4 Number et colonne 5 uniquement les réponses de type Text. Les fichiers à traiter se trouvent tous dans le même répertoire (54 fichiers) tous au même format. On passe au site suivant à chaque fois qu'on a traité toutes réponses d'un site.
Je joins un fichier exemple de ce que je souhaite obtenir en de ce que j'ai en entrée.
https://www.cjoint.com/c/FHrmxLVgk8w
Merci beaucoup d'avance.
Momo
A voir également:
- Transposition VBA
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
5 réponses
Bonjour MomoAbou, bonjour le forum,
Difficile de comprendre puisque le résultat attendu ne correspond pas à ce que tu as entré :
• F2 devrait être : Type Yes/No
• G2 devrait être : Type Yes/No
• I2 devrait être : Type Yes/No
• J2 devrait être : Type Number
• C26 devrait se trouver en D26
Je ne vais donc pas te proposer une macro sans être sûr du résultat escompté...
Difficile de comprendre puisque le résultat attendu ne correspond pas à ce que tu as entré :
• F2 devrait être : Type Yes/No
• G2 devrait être : Type Yes/No
• I2 devrait être : Type Yes/No
• J2 devrait être : Type Number
• C26 devrait se trouver en D26
Je ne vais donc pas te proposer une macro sans être sûr du résultat escompté...
Bonjour Thautheme,
vous avez tout à fait raison. J'avais fait les modifications mais je n'avais pas enregistré semble t-il.
Votre description est celle que je souhaite faire. Sachant que l'ordre des type d'indicateurs importent peu, seul leur intitulé importe.
Merci par avance.
Je peux envoyer le fichier avec les corrections ci dessus si besoin/
vous avez tout à fait raison. J'avais fait les modifications mais je n'avais pas enregistré semble t-il.
Votre description est celle que je souhaite faire. Sachant que l'ordre des type d'indicateurs importent peu, seul leur intitulé importe.
Merci par avance.
Je peux envoyer le fichier avec les corrections ci dessus si besoin/
Bonjour MomoAbou, bonjour le forum,
Je préfèrerais travailler avec le fichier corrigé...
Je préfèrerais travailler avec le fichier corrigé...
Bonjour ThauTheme,
voici le lien avec les corrections. J'ai un peu réadapté
https://www.cjoint.com/c/FHrrsPofrrl
Merci beaucoup.
Momo
voici le lien avec les corrections. J'ai un peu réadapté
https://www.cjoint.com/c/FHrrsPofrrl
Merci beaucoup.
Momo
Re,
Si l'onglet où se trouvent les données initiales est le premier, la transposition se fait dans dans le second onglet. Sinon il faudra adapter le code ci-dessous :
Tu peux rajouter/supprimer des indicateurs, la macro s'adapte. En revanche, Il faut que le tableau du premier onglet commence toujours avec les deux premières lignes d'étiquettes...
Si l'onglet où se trouvent les données initiales est le premier, la transposition se fait dans dans le second onglet. Sinon il faudra adapter le code ci-dessous :
Sub Macro1() Dim OS As Worksheet 'définit la variable OS (Onglet Source) Dim OD As Worksheet 'définit la variable OD (Onglet Destination) Dim TV As Variant 'définit la variable TV (Tableau des Valeurs) Dim I As Integer 'définit la variable I (Incrément) Dim J As Integer 'définit la variable J (incrément) Dim LI As Integer 'définit la variable LI (LIgne) Dim COL As Byte 'définit la variable COL (COLonne) Set OS = Worksheets(1) 'définit l'onglet source OS (à adapter) Set OD = Worksheets(2) 'définit l'onglet destination OD (à adapter) OD.Cells.ClearContents 'efface d'enventuelles anciennes données dans l'onglet destination OD.Range("A1").Value = "Site" 'étiquette en A1 OD.Range("B1").Value = "Indicateur" 'étiquette en B1 OD.Range("C1").Value = "Type Yes/No" 'étiquette en C1 OD.Range("D1").Value = "Type Number" 'étiquette en D1 OD.Range("E1").Value = "Type Text" 'étiquette en E1 TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV For I = 3 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la troisième) For J = 1 To UBound(TV, 2) - 1 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV LI = OD.Range("A" & Application.Rows.Count).End(xlUp).Row + 1 'définit la ligne LI OD.Cells(LI, 1).Value = TV(I, 1) 'renvoie le nom du site dans la cellule ligne I, colonne 1 (=A) de OD OD.Cells(LI, 2).Value = TV(1, J + 1) 'renvoie le nom de l'indicateur dans la cellule ligne LI colonne 2 de OD Select Case TV(2, J + 1) 'agit en fonction de la valeur de la donnée ligne 2 colonne J+1 de TV Case "Type Yes/No" 'cas COL = 3 'définit la colonne COL Case "Type Number" 'cas COL = 4 'définit la colonne COL Case "Type Text" 'cas COL = 5 'définit la colonne COL End Select 'fin de l'action en fonction de donnée ligne 2 colonne J+1 de TV 'renvoie dans la cellule ligne LI colonne COL de OD, la donnée ligne I colonne J+1 de TV OD.Cells(LI, COL).Value = TV(I, J + 1) Next J 'prochaine colonne de la boucle 2 Next I 'prochaine ligne de la boucle 1 End Sub
Tu peux rajouter/supprimer des indicateurs, la macro s'adapte. En revanche, Il faut que le tableau du premier onglet commence toujours avec les deux premières lignes d'étiquettes...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour MomoAbou, bonjour le forum,
Arf ! La flemme de tout refaire. Essaie ce compromis en rajoutant les deux lignes ci-dessous à la fin du premier code que je t'avais proposé :
Le fichier s'appellera "Destination.csv et sera enregistré dans le même dossier que le fichier d'origine. Modifie le nom dans le code si nécessaire. Non testé...
Arf ! La flemme de tout refaire. Essaie ce compromis en rajoutant les deux lignes ci-dessous à la fin du premier code que je t'avais proposé :
OD.Copy ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Destination.csv", FileFormat:=xlCSV, CreateBackup:=False
Le fichier s'appellera "Destination.csv et sera enregistré dans le même dossier que le fichier d'origine. Modifie le nom dans le code si nécessaire. Non testé...
Hello Thautheme,
je reviens encore avec une question!! j'ai rencontré aujourd'hui un problème en exécutant le code, apparemment ça ne prend pas en compte un grand nombre de sites : je souhaite que la macro puisse tourner pour pour 4000 Sites et 261 indicateurs!! je sais que les fichiers xls ou csv s’arrêtent à près de 65000 lignes, et me demandais du coup s'il y aurait une manipulation pour tout avoir sur un seul fichier avec plus de 65000 lignes, quitte à avoir un autre format similaire à xls ou csv (txt) par exemple.
Est ce que changer le format du fichier de sorti en un fichier qui accepte plus de 65000 peut être fait en vba?
Merci par avance.
je reviens encore avec une question!! j'ai rencontré aujourd'hui un problème en exécutant le code, apparemment ça ne prend pas en compte un grand nombre de sites : je souhaite que la macro puisse tourner pour pour 4000 Sites et 261 indicateurs!! je sais que les fichiers xls ou csv s’arrêtent à près de 65000 lignes, et me demandais du coup s'il y aurait une manipulation pour tout avoir sur un seul fichier avec plus de 65000 lignes, quitte à avoir un autre format similaire à xls ou csv (txt) par exemple.
Est ce que changer le format du fichier de sorti en un fichier qui accepte plus de 65000 peut être fait en vba?
Merci par avance.