SuppotDeSaTante Aka dje69r | Désolé, ton mail etait dans mes spams je ne l'avais pas vu...
jkm0032 a écrit :
j'aimerais que ce tableau verticale soit reporter sur mon tableau horizontal en respectant ("b15:m16" ) pour les premieres années mais si tu sais comment le faire pour qu'il me fasse ca indéfinimement sans s'arreter a decembre 2010 ca serait super.
|
Voici le code, normalement j'ai tout bien expliqué en commentaire, mais si tu as besoin de plus d'info n'hesite pas.
J'ai fait un essai de tirer tes colonnes vers le bas, donc jusqu'en 2025, le traitement dure environ 2sc avec mon pc virtuel...
Code :
- Sub Jkm()
- '****************************************************************************************************
- 'Définition des parametres si jamais ton fichier change de formen de nom de feuille etc. *
- 'ICI TU PEUX MODIFIER LES VARIABLES POUR LES ADAPTER A TON TABLEAU
- NomFeuilPerf = "Suivi des performances" 'Nom de la feuille qui actuellement _
- se nomme "Suivi des performances"
- ColPerf = "M" 'Colonne ou se situe tes lignes d'evolution _
- de la feuille "Suivi des performances"
- ColDatePerf = "G" 'Colonne ou se situe les dates des lignes d'evolution _
- de la feuille "Suivi des performances"
- LignePerf = 9 'Numéro de la ligne où commence le tableau des evolutions _
- sur la feuille "Suivi des performances"
-
- NomFeuilReport = "Reporting 3" 'Nom de la feuille qui actuellement _
- se nomme "Reporting 3"
- LigneReport = 15 'Numéro de la ligne où tu veux coller les valeurs _
- sur la feuille "Reporting 3"
- ColReport = "A" '1ere Colonne de ton tableau de la feuille "Reporting 3"
- ' *
- '****************************************************************************************************
- 'On enleve le fait de voir Excel travailler, on gagne en ressource
- Application.ScreenUpdating = False
- 'Informations transformées de colonne "A" en numéro donc 1 avec la fonction de dessous xlColumnValue
- ColReportNb = CInt(xlColumnValue(CStr(ColReport)))
- 'On regarde la derniere ligne renseignée de la feuille "Suivi des performances", ici de la colonne M
- Sheets(NomFeuilPerf).Select
- Range(ColPerf & "65536" ).Select
- Selection.End(xlUp).Select
- DerLignePerf = ActiveCell.Row
-
- 'On se place sur la premiere ligne du tableau
- Range(ColPerf & LignePerf).Select
-
- 'On boucle sur le tableau pour aller coller les valeurs dans "Reporting 3"
- LigneReportInc = LigneReport
- For x = LignePerf To DerLignePerf
-
- Sheets(NomFeuilPerf).Select 'on selectionne la feuille "Suivi des performances"
- Annee = Year(Range(ColDatePerf & x).Value) 'on regarde l'année de la ligne
- Mois = Month(Range(ColDatePerf & x).Value) 'on regarde le mois. Le mois va nous permettre, en fonction _
- de la 1ere colonne du tableau de calculer dans quelle _
- colonne le mettre directement
-
- NbLigne = Selection.Rows.Count 'on compte le nb de ligne selectionné(es)
-
- If Annee = Year(Range(ColDatePerf & x + 1).Value) And Range(ColPerf & x + 1).Value <> "" Then 'Si l'année de la _
- ligne en cours _
- est differente de l'annee _
- de la ligne suivante alors :
-
- Selection.Resize(NbLigne + 1).Select 'On selectionne la cellule du dessous en plus
- Else 'sinon
- Sheets(NomFeuilReport).Select 'on selectionne la feuille "Reporting 3"
- Range(ColReport & LigneReportInc).Select 'On selectionne A15 (où en fait A est defini _
- par la variable ColReport et 15 est defini par _
- la variable LigneReport et s'increment a _
- chaque changement de date de "Suivi des performances"
-
- Selection.Value = Annee 'On met l'annee dans cette cellule
- Range(Cells(LigneReportInc, ColReportNb + 1), Cells(LigneReportInc, ColReportNb + 12)).Select 'On selectionne tous les mois _
- donc de B15:M15 _
- (en sachant que _
- le 15 s'incremente tout seul)
-
- Selection.ClearContents 'on efface le contenu
-
- Sheets(NomFeuilPerf).Select 'on selectionne la feuille "Suivi des performances"
- Selection.Copy 'on copy ce qui etait selectionné precedemment, c'est a dire notre plage de valeur pour une année donnée
-
- Sheets(NomFeuilReport).Select 'on revient sur "Reporting 3"
- Cells(LigneReportInc, (Mois - NbLigne) + (ColReportNb + 1)).Select 'on se positionne sur la cellule calculée en _
- fonction du 1er mois selectionné dans la plage
- Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True 'on colle avec transposition : _
- tableau vertical devient horizontal
- Sheets(NomFeuilPerf).Select 'On selection la feuille "Suivi des performances"
- Range(ColPerf & x + 1).Select 'on selectionne la cellule suivant pour repartir a selectionner pour la meme année
- LigneReportInc = LigneReportInc + 1 'on increment notre variable LigneReport pour passer aux lignes suivant la ligne 15
- End If
-
- Next x
-
- Application.CutCopyMode = False 'on enleve le fait que les cellules soient en mode "copier"
-
- 'On va mettre en forme la feuille "Reporting 3"
-
- 'On regarde la dernier ligne utilisée
- Sheets(NomFeuilReport).Select
- Range(ColReport & "65536" ).Select
- Selection.End(xlUp).Select
- DerLigneReport = ActiveCell.Row
- 'Mis en forme de la colonne A
- Range(ColReport & LigneReport).Select
- Selection.Copy
- Range(Cells(LigneReport + 1, ColReportNb), Cells(DerLigneReport, ColReportNb)).Select
- Selection.PasteSpecial Paste:=xlPasteFormats
-
- 'Mis een forme de la colonne N qui contient le total
- Cells(LigneReport, ColReportNb + 13).Select
- Selection.Copy
- Range(Cells(LigneReport + 1, ColReportNb + 13), Cells(DerLigneReport, ColReportNb + 13)).Select
- Selection.PasteSpecial Paste:=xlPasteFormulas
- Selection.PasteSpecial Paste:=xlPasteFormats
- Application.CutCopyMode = False 'on enleve le fait que les cellules soient en mode "copier"
-
- 'On remet le fait de voir Excel travailler
- Application.ScreenUpdating = True
- End Sub
- Function xlColumnValue(strColumnIndex As String) As String
- strColumnIndex = UCase(strColumnIndex)
-
- Select Case Asc(strColumnIndex)
- Case 36
- xlColumnValue = xlColumnValue(Mid(strColumnIndex, 2, _
- InStr(2, strColumnIndex, "$" ) - 2))
- Case 48
- MsgBox "The number 0 is invalid.", vbExclamation, "Null Denied"
- Case 49 To 57
- If strColumnIndex < 27 Then
- xlColumnValue = Chr(strColumnIndex + 65 - 1)
- Else
- If strColumnIndex Mod 26 <> 0 Then
- xlColumnValue = Chr(strColumnIndex \ 26 + 65 - 1) + _
- Chr(strColumnIndex Mod 26 + 65 - 1)
- Else
- xlColumnValue = Chr(strColumnIndex \ 26 + 65 - 2) + _
- Chr(90)
- End If
- End If
- Case 65 To 90
- xlColumnValue = Asc(strColumnIndex) - 65 + 1
- If Len(strColumnIndex) > 1 Then
- xlColumnValue = xlColumnValue * 26 + Asc(Right(strColumnIndex, 1)) - 65 + 1
- End If
- End Select
- End Function
|
En image :
Message édité par SuppotDeSaTante le 05-08-2010 à 13:12:56 ---------------
Soyez malin, louez entre voisins !
|