Filtrer et transposer certaines col classeur vers 1 autre
Bonjour à tous,
Je travaille sur 2 serveurs contenant l'un classeur où sont saisies de données (archives), commun à plusieurs services et l'autre où sont réalisés des calculs divers et variés, spécifique à chaque service (chaque service à le sien). Le classeur des archives contient un tableau de 20 colonnes, les lignes sont alimentées au fil du temps ; à ce jour, il y a environ 300 lignes (il vient d'être créé).
Dans un classeur de calcul, par exemple dans un onglet, je n'ai besoin que de la transposition de 3 colonnes non contigües (les valeurs doivent être reporter dans l'onglet : la colonne A contient l'année, la colonne B contient une identification et la colonne C contient le coût du produit).
Ces classeurs sont partagés.
J'ai utilisé la macro de Jacques BOISGONTIER mais elle transpose toutes les colonnes et je ne sais pas comment ne transposer que les colonnes B,C et T du fichier des archives.
Voici le code adapté depuis celui de Jacques BOISGONTIER (et avec les commentaires de PIJAKU) :
Sub Indicateurs_ServW()
Dim Tab_depart As Worksheet, Tab_arrivee As Worksheet
Dim DonneesInitiales(), DonneesFiltrees(), AnneesColB(), temp()
Dim MesAnnees As Object, Annee
Dim lig As Integer, Indice As Integer, i As Integer, col As Byte
Set Tab_depart = ThisWorkbook.Worksheets("BL")
With Tab_depart
Set MesAnnees = CreateObject("Scripting.Dictionary")
AnneesColB = .Range("B10", .Range("B" & Rows.Count).End(xlUp))
For i = LBound(AnneesColB) To UBound(AnneesColB)
MesAnnees(AnneesColB(i, 1)) = ""
'Debug.Print AnneesColB(i, 1) '---- Pour vérification pas à pas
Next i
temp = MesAnnees.keys
Call tri(temp, LBound(temp), UBound(temp))
DonneesInitiales = .Range("A10:T" & .Range("A" & Rows.Count).End(xlUp).Row)
End With
Indice = 1
Set Tab_arrivee = ThisWorkbook.Worksheets("Indicateurs")
For lig = LBound(DonneesInitiales) To UBound(DonneesInitiales)
If DonneesInitiales(lig, 2) = 2009 Then 'Annee Then
ReDim Preserve DonneesFiltrees(19, 1 To Indice)
For col = 1 To 19
DonneesFiltrees(col, Indice) = DonneesInitiales(lig, col + 1)
'Debug.Print col & " " & DonneesFiltrees(col, Indice)
Next col
Indice = Indice + 1
End If
Next lig
With Tab_arrivee
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(DonneesFiltrees, 2), UBound(DonneesFiltrees, 1) + 1) = Application.Transpose(DonneesFiltrees)
End With
End SubCe qui me pose poblème, a priori, c'est cette instruction
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(DonneesFiltrees, 2), UBound(DonneesFiltrees, 1) + 1) = Application.Transpose(DonneesFiltrees), je ne voudrais transposer que les colonnes B,C et T du classeur de départ dans les colonnes ABC du classeur d'arrivée (que je traite actuellement).
Je serais soulagée si quelqu'un pouvait m'apporter son aide et cela serait formateur pour moi (j'attends avec impatience le déclic Arrays, le concept m'échappe)
Merci par avance.
Bonjour,
Bon... personne pour m'aider ???
Je reviendrai plus tard, je continue mes recherches.