Compiler un code VBA de transposition
Bonjour à toutes et à tous,
Je suis nouveau sur le forum et néophyte en matière de VBA. Je vous prie de m'excuser d'avance si mon post a déjà été abordé par le passé mais après une recherche, je ne parviens pas à trouver de solution à mon problème (peut-être par manque de vocabulaire au niveau de ma requête).
Je cherche à partir de données présentes sur une feuille données (ici "Raw") à restructurer celles-ci sur une nouvelle feuille ("Results"). J'imagine qu'il doit y avoir une fonction permettant de faire ceci mais je ne parviens pas à la trouver. Voici un extrait du code que je souhaiterais compiler :
Sheets.Add After:=ActiveSheet
ActiveCell.FormulaR1C1 = "=Raw!RC[3]"
Range("A2").Select
ActiveCell.FormulaR1C1 = "=Raw!RC[3]"
Range("A3").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-1]C[3]"
Range("A4").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-2]C[3]"
Range("A5").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-3]C[3]"
Range("A6").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-3]C[3]"
Range("A7").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-4]C[3]"
Range("A8").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-5]C[3]"
Range("A9").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-6]C[3]"
Range("A10").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-6]C[3]"
Range("A11").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-7]C[3]"
Range("A12").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-8]C[3]"
Range("A13").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-9]C[3]"
Range("A14").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-9]C[3]"
Range("A15").Select
ActiveCell.FormulaR1C1 = "=Raw!R[-10]C[3]"Sachant que ce code se déroule jusqu'en cellule "A1000", et qui plus est se répète jusqu'à la lettre Y vous comprendrez mon besoin de le compiler sinon je risque d'y passer une vie. Comme vous pourrez le constater, j'aimerais en fait transposer le résultat d'un participant (initialement sur une seule ligne en feuille "Raw") sur 4 lignes en feuille "Results".
J'ai ensuite le même problème pour poursuivre la transformation. À partir d'une autre feuille ("Fusion"), je souhaite procéder à la transposition suivante sachant que la formule pourrait potentiellement aller jusqu'en "AB1000:CL1000" :
Range("AA1").Select
ActiveCell.FormulaR1C1 = "type"
Range("AB2:CL2").Select
Selection.FormulaArray = "=Fusion!RC[7]:RC[69]"
Range("AB3:CL3").Select
Selection.FormulaArray = "=Fusion!R[-1]C[70]:R[-1]C[132]"
Range("AB4:CL4").Select
Selection.FormulaArray = "=Fusion!R[-2]C[133]:R[-2]C[195]"
Range("AB5:CL5").Select
Selection.FormulaArray = "=Fusion!R[-3]C[196]:R[-3]C[258]"
Range("AB6:CL6").Select
Selection.FormulaArray = "=Fusion!R[-3]C[7]:R[-3]C[69]"
Range("AB7:CL7").Select
Selection.FormulaArray = "=Fusion!R[-4]C[70]:R[-4]C[132]"
Range("AB8:CL8").Select
Selection.FormulaArray = "=Fusion!R[-5]C[133]:R[-5]C[195]"
Range("AB9:CL9").Select
Selection.FormulaArray = "=Fusion!R[-6]C[196]:R[-6]C[258]"
Range("AB10:CL10").Select
Selection.FormulaArray = "=Fusion!R[-6]C[7]:R[-6]C[69]"
Range("AB11:CL11").Select
Selection.FormulaArray = "=Fusion!R[-7]C[70]:R[-7]C[132]"
Range("AB12:CL12").Select
Selection.FormulaArray = "=Fusion!R[-8]C[133]:R[-8]C[195]"
Range("AB13:CL13").Select
Selection.FormulaArray = "=Fusion!R[-9]C[196]:R[-9]C[258]"
Range("AB14:CL14").Select
Selection.FormulaArray = "=Fusion!R[-9]C[7]:R[-9]C[69]"
Range("AB15:CL15").Select
Selection.FormulaArray = "=Fusion!R[-10]C[70]:R[-10]C[132]"
Range("AB16:CL16").Select
Selection.FormulaArray = "=Fusion!R[-11]C[133]:R[-11]C[195]"
Range("AB17:CL17").Select
Selection.FormulaArray = "=Fusion!R[-12]C[196]:R[-12]C[258]"
Range("AB18:CL18").Select
Selection.FormulaArray = "=Fusion!R[-12]C[7]:R[-12]C[69]"
Range("AB19:CL19").Select
Selection.FormulaArray = "=Fusion!R[-13]C[70]:R[-13]C[132]"
Range("AB20:CL20").Select
Selection.FormulaArray = "=Fusion!R[-14]C[133]:R[-14]C[195]"
Range("AB21:CL21").Select
Selection.FormulaArray = "=Fusion!R[-15]C[196]:R[-15]C[258]"
Range("AB22:CL22").Select
Selection.FormulaArray = "=Fusion!R[-15]C[7]:R[-15]C[69]"
Range("AB23:CL23").Select
Selection.FormulaArray = "=Fusion!R[-16]C[70]:R[-16]C[132]"
Range("AB24:CL24").Select
Selection.FormulaArray = "=Fusion!R[-17]C[133]:R[-17]C[195]"
Range("AB25:CL25").Select
Selection.FormulaArray = "=Fusion!R[-18]C[196]:R[-18]C[258]"Je vous ai volontairement mis plusieurs lignes afin que vous puissiez identifier le pattern qui se répète.
J'espère que ma requête est suffisamment clair et je vous remercie d'avance pour votre coup de main.
Très bonne journée à toutes et à tous !
Bonjour,
plutôt que de mettre un code issu de l'enregistreur explique ce que tu veux, avec un fichier exemple en plus.
eric
Bonjour eriiic,
Merci pour votre réponse. Vous trouverez ci-joint un fichier pour illustrer ce que j'aimerais réaliser.
La feuille "Raw" contient mes données brutes. À partir de celle-ci j'aimerais arriver au deux feuilles suivantes ("Fusion" et "Results").
Dans la feuille "Fusion", il s'agit de fusionner toutes les lignes en fonction du pseudo de sorte à ce qu'il n'y ait plus qu'une ligne par pseudo.
Dans la feuille "Results", il s'agit de transposer les observations sur 4 lignes par participant. Le pseudo, sexe, age, factor1, factor2 et factor3 se répètent pour un participant donné. En revanche, les évaluation (x_eval1, x_eval2 et x_note) sont à décliner selon la lettre qui précède (nouvelle variable "stimulus"). De plus je souhaiterais récupérer le chiffre de la variable "alea" de la feuille "Raw" pour l'indiquer dans la feuille "Results".
En espérant que ma requête soit compréhensible...
Merci d'avance pour votre aide.
J'ai jeté un oeil, ça ne devrait pas poser de difficulté. Je vois ça demain.
a_eval1 a_eval2 a_note b_eval1 b_eval2 b_note c_eval1 c_eval2 c_note d_eval1 d_eval2 d_note
C'est complet ou ça peut s'étendre plus ?
eric
C'est plus ou moins complet... En fait j'ai fais un raccourci car normalement il y a 63 variables par lettres (donc 4x63 colonnes). Disons que je préfère rester simple pour l'exemple afin de pouvoir comprendre le code et le dérouler si nécessaire.
Merci encore pour ton aide Eric.
Très bonne soirée.
Bonjour,
plus ou moins complet ça ne va pas car ça sera fait en vba, et il n'aime pas l'approximation.
Est-ce qu'elles commencent réellement par a_, b_, etc, et est-ce vraiment toujours 63 par groupe ?
eric
Oui c'est toujours le cas. Merci.
J'ai supposé que s'il y avait qq chose en B c'est que c'était les données 'personne', sinon qu'il y avait un seul 'bloc de variables' à lire sur la ligne, plus un éventuel alea.
Au début du code tu as une constante Const nbGroupVar As Long = 4. C'est tes a, b, c, d, si jamais ça évolue. Je me sers du _ pour séparer nom du groupe et nom de la variable, à conserver.
Je calcule le nombre de variables par bloc avec 'nb colonnes'-7 qui doit être un multiple de nbGroupVar. Le titre Alea doit donc toujours présent même s'il n'y en a aucun.
Pas de colonne vide.
A tester
eric
Ca marche nickel. Merci beaucoup Eric !
Très bonne journée !
Merci, de même.
eric