Transpose ligne en colonne
a
Bonjour,
j'ai 4 cases (Base/Emergency/Essential/Off-loading) par tag, et dans chaque case j'ai un operating mode qui peut varier (Continuous/Intermittent/Standby/Spare).
Je souhaite avoir mes cases sous forme de colonne avec 1 seul tag par ligne. (voir le tableau "APRES" du fichier ci-joint)
Je souhaite reussir à faire en VBA ou formule, au choix. (au plus simple
Merci de votre aide !!
Bonne journée
Bonjour Allardinho, bonjour le forum,
Essaie comme ça :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TOM() As Variant 'déclare la variable TOM (Tableau des Operating Modes)
Set O = Worksheets("Sheet3") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec la valeur en colonne 1 de TV (le Tag)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
K = 1 'initialise la variable K
For J = 0 To UBound(TMP, 1) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
L = 2 'initialise la variable L
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) = TMP(J) Then 'condition : si la valeur en colonne 1 du tableau des valeurs TV est égale à la valeur J du tableau temporaire TMP
ReDim Preserve TOM(1 To 5, 1 To K) 'redimensionne le tableau de operating modes TOM
TOM(1, K) = TMP(J) 'récupère en ligne 1 de TOM la valeur J de TEMP
TOM(L, K) = TV(I, 3) 'récupère en ligne L de TOM la valeur en colonne 3 de TV
L = L + 1 'incrémente L
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
K = K + 1 'incrémente K (rajoute une colonne au tableau des operating modes TOM)
Next J 'prochain élément de la boucle 1
'si K est supérieure à un, renvoie dans la cellule H2 redimensionnée de l'onglet O le tableau TOM transposé
If K > 1 Then O.Range("H2").Resize(UBound(TOM, 2), UBound(TOM, 1)).Value = Application.Transpose(TOM)
End Suba
Trop fort ThauThème.
Merci beaucoup c'est parfait !