compatibilité excel vba2000 2007 vba les tableaux croisés dynamiques

kromei

XLDnaute Nouveau
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

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:

Discussions similaires

Réponses
11
Affichages
296
Réponses
5
Affichages
190

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote