Bonjour ,
Je suis en train de faire migrer une macro complémentaire en 2007 et je me suis aperçu que de nouveaux éléments ont fait leur apparition dans les pivots ,dans ma macro j'ai une fonction relativement lourde qui parcours les data en ne prenant pas ce qui est décoché dans la liste puis exporte le nom dans un csv avec une concaténation de la date et du champs , j ai souvent dans cette fonction un soucis avec une incompatiblité de type bref j aimerai entierement la refaire , quelqu'un peut il au moins m instruire sur les pivots 2007
ps j ai fait un effort pour passer le code mais je sujet sera supprimé si il est résolu
merci de votre compréhension
Je suis en train de faire migrer une macro complémentaire en 2007 et je me suis aperçu que de nouveaux éléments ont fait leur apparition dans les pivots ,dans ma macro j'ai une fonction relativement lourde qui parcours les data en ne prenant pas ce qui est décoché dans la liste puis exporte le nom dans un csv avec une concaténation de la date et du champs , j ai souvent dans cette fonction un soucis avec une incompatiblité de type bref j aimerai entierement la refaire , quelqu'un peut il au moins m instruire sur les pivots 2007
Code:
Sub ptrtIndicateurCSV(pvtMaTable As PivotTable, _
Optional blnUnFichierParDate As Boolean = True)
10 If g_blnMODEMOUCHARD Then Call ptecEcritDansMouchard("ptrtIndicateurCSV")
Dim pviMaDate As PivotItem
Dim pviMonIndicateur As PivotItem
Dim pvfMaData As PivotField
Dim pvfPFDate As PivotField
Dim pvfPFIndicateur As PivotField
Dim fsoFS As New FileSystemObject
Dim strNomIndicateur As String
Dim strIDENTIFIANT As String
Dim strRepertoireCible As String
Dim strNomFichierCible As String
Dim strTampon As String
Dim varIndex() As Variant
Dim strMaLigne As String
Dim DblngTampon As Double
Dim blnEstPasVide As Boolean
Dim strTypeIndicateur As String
Dim i As Integer
Dim j As Integer
'RSM;Exporte le contenu d'un tableau croisé dynamique sous forme d'un fichier csv
'MAJ;20101123;CTS;Possibilité d'exporter plusieurs tableaux croisés ayant le même identifiant dans un même fichier
20 strIDENTIFIANT = Right(pvtMaTable.Name, Len(pvtMaTable.Name) - 4)
30 strRepertoireCible = ActiveWorkbook.Path & "\" & strIDENTIFIANT & "\"
40 strNomFichierCible = ".csv"
'ETP;Crée le répertoire cible ou vide le répertoire s'il existe déjà
50 If Not (fsoFS.FolderExists(strRepertoireCible)) Then
60 fsoFS.CreateFolder (strRepertoireCible)
70 Else
80 Call pcomSupprimeAnciensFichiers(strRepertoireCible, g_datDEBUT)
90 End If
'ETP;Cree le fichier chapeau (00000000.csv) contenant les noms de colonne. Le contenu de ce fichier est différent _
celon qu'il s'agisse d'évenement ou d'indicateur. Un champ nommé date est obligatoire en ligne ou en colonne
100 On Error Resume Next
110 If (LCase(Trim(pvtMaTable.RowFields(1).Name)) = "date") Then
120 Set pvfPFDate = pvtMaTable.RowFields(1)
130 Set pvfPFIndicateur = pvtMaTable.ColumnFields(1)
140 Else
150 If (LCase(Trim(pvtMaTable.ColumnFields(1).Name)) = "date") Then
160 Set pvfPFIndicateur = pvtMaTable.RowFields(1)
170 Set pvfPFDate = pvtMaTable.ColumnFields(1)
180 Else
190 Call pcomAlerteLog(g_lngDEPART & "_IndicateurCSV", "ERREUR", "Fichier;" & ActiveWorkbook.Name & ";Date-Obligatoire;Champ date non trouvé dans le tableau " & pvtMaTable.Name)
200 Exit Sub
210 End If
220 End If
230 strMaLigne = pvfPFDate.Name & ";" & pvfPFIndicateur.Name
240 If (Err.Number <> 0) Then
250 Call pcomAlerteLog(g_lngDEPART & "_IndicateurCSV", "ERREUR", "Fichier;" & ActiveWorkbook.Name & ";Tableau-Erreur;Erreur critique dans le tableau " & pvtMaTable.Name)
260 Exit Sub
270 End If
280 On Error GoTo 0
'ETP;Détermine le type d'indicateur : simple, multiple ou evenement et prépare la ligne du fichier 00000000.csv
290 If (pvtMaTable.DataFields.Count = 1) Then
300 strTypeIndicateur = "Indicateur-simple"
310 strMaLigne = strMaLigne & ";Valeur"
320 Else
330 If (pvtMaTable.ColumnFields(1).Name = "Evenement") Then
340 strTypeIndicateur = "Evenement"
350 For Each pvfMaData In pvtMaTable.DataFields
360 strMaLigne = (strMaLigne & ";" & pvfMaData.Name)
370 Next pvfMaData
380 Else
390 strTypeIndicateur = "Indicateur-multiple"
400 strMaLigne = (strMaLigne & ";Valeur")
410 End If
420 End If
'ETP;Cree le fichier chapeau (00000000.csv) contenant les noms de colonne.
430 i = FreeFile
440 If fsoFS.FileExists(strRepertoireCible & "00000000" & strNomFichierCible) Then
450 Open (strRepertoireCible & "00000000" & strNomFichierCible) For Append As #i
460 Else
470 Open (strRepertoireCible & "00000000" & strNomFichierCible) For Output As #i
480 Print #i, strMaLigne
490 End If
500 If blnUnFichierParDate Then
510 Close #i
520 End If
530 j = 1
540 For Each pviMaDate In pvfPFDate.PivotItems
550 If (Not pviMaDate.value Like "[#]*") Then
560 If (pviMaDate.Visible And ftrtTestItemDate(pviMaDate) And _
ftrtTestItem(pviMaDate)) Then
570 If blnUnFichierParDate Then
580 Open (strRepertoireCible & FORMAT(pviMaDate.Name, "YYYYMMDD") & _
strNomFichierCible) For Append As #i
590 End If
600 For Each pviMonIndicateur In pvfPFIndicateur.PivotItems
610 If (pviMonIndicateur.value Like "*_*") Then
620 Call pcomAlerteLog(g_lngDEPART & "_IndicateurCSV", "WARN", "Fichier;" & ActiveWorkbook.Name & ";Indicateur-Underscore;Erreur non bloquante avec l'indicateur " & pviMonIndicateur.value & ". Les underscore dans les noms d'indicateurs posent des problèmes avec fonctions d'aide en ligne de l'interface Web")
630 End If
640 If Not (pviMonIndicateur.value Like "[#]*") Then
650 If (pviMonIndicateur.Visible And _
pviMonIndicateur.Name <> "(vide)" And _
pviMonIndicateur.Name <> "" And _
pviMonIndicateur.value <> pviMaDate.value And _
ftrtTestItem(pviMonIndicateur)) Then
660 strNomIndicateur = Replace(pviMonIndicateur.Name, "'", "''")
670 Select Case strTypeIndicateur
Case "Indicateur-simple"
680 strMaLigne = FORMAT(pviMaDate.Name, "DD/MM/YYYY")
690 blnEstPasVide = True
700 For Each pvfMaData In pvtMaTable.DataFields
710 DblngTampon = pvtMaTable.GetData("'" & _
pvfMaData.Name & "' '" & _
pviMaDate.Name & "' '" & _
strNomIndicateur & "'")
720 If (DblngTampon = -2) Then
730 blnEstPasVide = False
740 Else
750 blnEstPasVide = True
760 End If
770 If (blnEstPasVide) Then
780 Print #i, strMaLigne & ";" & pviMonIndicateur.Name & ";" & DblngTampon
790 ReDim Preserve varIndex(1 To 2, 1 To j)
800 varIndex(1, j) = pviMonIndicateur.Name
810 varIndex(2, j) = CDate(pviMaDate.Name)
820 j = (j + 1)
830 End If
840 Next pvfMaData
850 Case "Indicateur-multiple"
860 strMaLigne = FORMAT(pviMaDate.Name, "DD/MM/YYYY")
870 blnEstPasVide = True
880 For Each pvfMaData In pvtMaTable.DataFields
890 DblngTampon = pvtMaTable.GetData("'" & _
pvfMaData.Name & "' '" & _
pviMaDate.Name & "' '" & _
strNomIndicateur & "'")
900 If (DblngTampon = -2) Then
910 blnEstPasVide = False
920 Else
930 blnEstPasVide = True
940 End If
950 If blnEstPasVide Then
960 strTampon = ftrtIndicateurConcatenation(pviMonIndicateur.Name, pvfMaData.Name)
970 Print #i, strMaLigne & ";" & strTampon & ";" & DblngTampon
980 ReDim Preserve varIndex(1 To 2, 1 To j)
990 varIndex(1, j) = (strTampon)
1000 varIndex(2, j) = CDate(pviMaDate.Name)
1010 j = (j + 1)
1020 End If
1030 Next pvfMaData
1040 Case "Evenement"
1050 strMaLigne = (FORMAT(pviMaDate.Name, "DD/MM/YYYY") & _
";" & pviMonIndicateur.Name)
1060 blnEstPasVide = True
1070 For Each pvfMaData In pvtMaTable.DataFields
1080 DblngTampon = pvtMaTable.GetData("'" & _
pvfMaData.Name & "' '" & _
pviMaDate.Name & "' '" & _
strNomIndicateur & "'")
1090 If (DblngTampon = -2) Then
1100 blnEstPasVide = False
1110 Else
1120 blnEstPasVide = True
1130 End If
'------------------------------------------------------------'
' Sécurité pour empecher des dates de début ou de fin nulles '
' (devrait être géré dans le fichier source. '
'------------------------------------------------------------'
1140 If (DblngTampon = 0 And pvfMaData.Name = "Debut") Then
1150 DblngTampon = CLng(CDate(pviMaDate.Name))
1160 End If
1170 If (DblngTampon = 0 And pvfMaData.Name = "Fin") Then
1180 DblngTampon = CLng(CDate(pviMaDate.Name)) + 0.999
1190 End If
strMaLigne = (strMaLigne & ";" & DblngTampon)
1200 'Print #i, strMaLigne & ";" & pviMonIndicateur.Name & ";" & DblngTampon
1210 Next pvfMaData
1220 If blnEstPasVide Then
1230 Print #i, strMaLigne
1240 ReDim Preserve varIndex(1 To 2, 1 To j)
1250 varIndex(1, j) = pviMonIndicateur.Name
1260 varIndex(2, j) = CDate(pviMaDate.Name)
1270 j = (j + 1)
1280 End If
1290 End Select
1300 End If
1310 End If
1320 Next pviMonIndicateur
1330 If (blnUnFichierParDate) Then
1340 Close #i
1350 End If
1360 End If
1370 Else
1380 Call pcomAlerteLog(g_lngDEPART & "_IndicateurCSV", "ERREUR", "Fichier;" & ActiveWorkbook.Name & ";Date-Erreur;Valeurs d'erreurs dans le champ date du tableau " & pvtMaTable.Name)
1390 End If
1400 Next pviMaDate
1410 If Not blnUnFichierParDate Then
1420 Close #i
1430 End If
'ETP;Mise à jour de l'index
1440 If (j > 1) Then
1450 Call pcomMAJIndex(strIDENTIFIANT, varIndex)
1460 End If
End Sub
ps j ai fait un effort pour passer le code mais je sujet sera supprimé si il est résolu
merci de votre compréhension
Dernière édition: