VB6 et Application Excel - VB/VBA/VBS - Programmation
MarshPosté le 06-03-2008 à 11:15:05
Salut à tous
Je suis sur application VB6 qui récupère toute les actions effectuées dans un journal et je veux exporter mon journal sous Excel (jusque là ça va ) et faire des statistiques avec (là ça se complique).
donc j'arrive à créer le fichier et à la mettre en forme . j'ai créer une macro qui permet de faire un tableau dynamique et son graph associé
lorsque j'intègre ma macro dans mon appli VB il me fait une erreur sur la fonction PivotTables (Argument ou appel de procédure incorrect)
un peu de code :
Sub créerFichierExcel(fichier As Variant)
'remise en forme de la date du journal dateF = Mid(way_file, Len(way_file) - 11, 8) jj = Right(dateF, 2) mm = Mid(dateF, 5, 2) aa = Left(dateF, 4)
dateF = jj & "." & mm & "." & aa
'on dit que lobjet est de type feuille excel et ouvre Excel Set DocExcel = CreateObject("Excel.Application" )
' supprime laffichage des messages derreurs ou de confirmation de suppression, ... DocExcel.DisplayAlerts = False
DocExcel.Workbooks.Add ' selectionne la feuille du classeur DocExcel.Sheets("Feuil2" ).Select ' on supprime cette feuille DocExcel.ActiveWindow.SelectedSheets.Delete ' on fait pareil avec la feuille 3 DocExcel.Sheets("Feuil3" ).Select DocExcel.ActiveWindow.SelectedSheets.Delete ' on selectionne la feuille 1 (la seule qui reste) DocExcel.Sheets("Feuil1" ).Select ' on change le nom de celle ci DocExcel.Sheets("Feuil1" ).Name = "Stats Trafic du " & dateF
DocExcel.Columns("A:D" ).ColumnWidth = 25
' on met la date et lheure de création du fichier DocExcel.Range("A1" ).Select test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 0, False) DocExcel.ActiveCell.FormulaR1C1 = "Fait le : " & Date & " à " & Time
' mise en forme du tableau de recueil des données du journal DocExcel.Range("A3:D3" ).Select test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE14, True, False, 3, True) DocExcel.ActiveCell.FormulaR1C1 = "Trafic journalier du " & dateF
' remplissage des champs à partir du fichier journal et de la base de données FilePath = way_file Set filestream = fs.OpenTextFile(way_file, ForReading, False) ligne = 1 While Not filestream.AtEndOfStream lignelog = filestream.ReadLine tabligne = Split(lignelog, " " )
If UBound(tabligne) = 4 Then
DocExcel.Range("A" & ligne + 5).Select test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False) DocExcel.ActiveCell.FormulaR1C1 = tabligne(1)
DocExcel.Range("B" & ligne + 5).Select test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False) DocExcel.ActiveCell.FormulaR1C1 = tabligne(3)
i = 0
Do While Left(t_selectifs(i), 5) <> "FFFFF" If Mid$(t_selectifs(i), 7, 4) = "2" & tabligne(3) Then nomSel = Mid$(t_selectifs(i), 12, 20) nomSel = Replace(nomSel, ".", " " ) Exit Do End If i = i + 1 Loop
DocExcel.Range("C" & ligne + 5).Select test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False) DocExcel.ActiveCell.FormulaR1C1 = nomSel
DocExcel.Range("D" & ligne + 5).Select test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False) DocExcel.ActiveCell.FormulaR1C1 = tabligne(4)
ligne = ligne + 1 End If Wend filestream.Close Set filestream = Nothing
[#c60038] ' sélection de la source data et création du tableau croisé dynamique DocExcel.Range("A5:D16" ).Select
'table dans 'lignes' With DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _ "N° Sélectif" ) .Orientation = xlRowField .Position = 1 End With
'table dans 'colonnes' With DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Etats" ) .Orientation = xlColumnField .Position = 1 End With
'table dans 'données' With DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _ "Nom du Sélectif" ) .Orientation = xlDataField .Position = 1 End With
'mise en forme du tableau croisé dynamique DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotSelect "", _ xlDataAndLabel DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).Format xlTable10
'création du graphique DocExcel.Charts.Add DocExcel.ActiveChart.SetSourceData Source:=DocExcel.Sheets("Stats Trafic du 14.02.2008" ).Range( _ "H5" ) DocExcel.ActiveChart.Location Where:=xlLocationAsNewSheet DocExcel.ActiveChart.ChartType = xl3DBarClustered DocExcel.ActiveChart.PivotLayout.PivotFields("NB Nom du Sélectif" ).Caption = _ "NOMBRE D'OCCURENCES DES ETATS PAR SELECTIFS" DocExcel.Sheets("Graph1" ).Select DocExcel.Sheets("Graph1" ).Move After:=DocExcel.Sheets(2) DocExcel.Sheets("Graph1" ).Name = "Graph Etats_sélectifs"
' on sauvegarde la feuille sous le nom contenu dans NomFichier DocExcel.ActiveWorkbook.SaveAs FileName:=fichier, _ FileFormat:=17, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False
DocExcel.DisplayAlerts = True DocExcel.Visible = True End Sub[/#0000ff]
Marsh Posté le 06-03-2008 à 11:15:05
Salut à tous
Je suis sur application VB6 qui récupère toute les actions effectuées dans un journal et je veux exporter mon journal sous Excel (jusque là ça va ) et faire des statistiques avec (là ça se complique).
donc j'arrive à créer le fichier et à la mettre en forme . j'ai créer une macro qui permet de faire un tableau dynamique et son graph associé
lorsque j'intègre ma macro dans mon appli VB il me fait une erreur sur la fonction PivotTables (Argument ou appel de procédure incorrect)
un peu de code :
Sub créerFichierExcel(fichier As Variant)
'remise en forme de la date du journal
dateF = Mid(way_file, Len(way_file) - 11, 8)
jj = Right(dateF, 2)
mm = Mid(dateF, 5, 2)
aa = Left(dateF, 4)
dateF = jj & "." & mm & "." & aa
'on dit que lobjet est de type feuille excel et ouvre Excel
Set DocExcel = CreateObject("Excel.Application" )
' supprime laffichage des messages derreurs ou de confirmation de suppression, ...
DocExcel.DisplayAlerts = False
DocExcel.Workbooks.Add
' selectionne la feuille du classeur
DocExcel.Sheets("Feuil2" ).Select
' on supprime cette feuille
DocExcel.ActiveWindow.SelectedSheets.Delete
' on fait pareil avec la feuille 3
DocExcel.Sheets("Feuil3" ).Select
DocExcel.ActiveWindow.SelectedSheets.Delete
' on selectionne la feuille 1 (la seule qui reste)
DocExcel.Sheets("Feuil1" ).Select
' on change le nom de celle ci
DocExcel.Sheets("Feuil1" ).Name = "Stats Trafic du " & dateF
DocExcel.Columns("A:D" ).ColumnWidth = 25
' on met la date et lheure de création du fichier
DocExcel.Range("A1" ).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 0, False)
DocExcel.ActiveCell.FormulaR1C1 = "Fait le : " & Date & " à " & Time
' mise en forme du tableau de recueil des données du journal
DocExcel.Range("A3:D3" ).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE14, True, False, 3, True)
DocExcel.ActiveCell.FormulaR1C1 = "Trafic journalier du " & dateF
'Mise en forme des champs du tableau
DocExcel.Range("A5" ).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE10, True, False, 3, False)
DocExcel.ActiveCell.FormulaR1C1 = "Heure"
DocExcel.Range("B5" ).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE10, True, False, 3, False)
DocExcel.ActiveCell.FormulaR1C1 = "N° Sélectif"
DocExcel.Range("C5" ).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE10, True, False, 3, False)
DocExcel.ActiveCell.FormulaR1C1 = "Nom du Sélectif"
DocExcel.Range("D5" ).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE10, True, False, 3, False)
DocExcel.ActiveCell.FormulaR1C1 = "Etats"
' remplissage des champs à partir du fichier journal et de la base de données
FilePath = way_file
Set filestream = fs.OpenTextFile(way_file, ForReading, False)
ligne = 1
While Not filestream.AtEndOfStream
lignelog = filestream.ReadLine
tabligne = Split(lignelog, " " )
If UBound(tabligne) = 4 Then
DocExcel.Range("A" & ligne + 5).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False)
DocExcel.ActiveCell.FormulaR1C1 = tabligne(1)
DocExcel.Range("B" & ligne + 5).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False)
DocExcel.ActiveCell.FormulaR1C1 = tabligne(3)
i = 0
Do While Left(t_selectifs(i), 5) <> "FFFFF"
If Mid$(t_selectifs(i), 7, 4) = "2" & tabligne(3) Then
nomSel = Mid$(t_selectifs(i), 12, 20)
nomSel = Replace(nomSel, ".", " " )
Exit Do
End If
i = i + 1
Loop
DocExcel.Range("C" & ligne + 5).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False)
DocExcel.ActiveCell.FormulaR1C1 = nomSel
DocExcel.Range("D" & ligne + 5).Select
test = ParametreExcel(DocExcel, "MS Sérif", TAILLEPOLICE09, False, False, 2, False)
DocExcel.ActiveCell.FormulaR1C1 = tabligne(4)
ligne = ligne + 1
End If
Wend
filestream.Close
Set filestream = Nothing
[#c60038] ' sélection de la source data et création du tableau croisé dynamique
DocExcel.Range("A5:D16" ).Select
DocExcel.ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Stats Trafic du 14.02.2008!R5C1:R16C4" ).CreatePivotTable TableDestination _
:=DocExcel.Range("F5" ), TableName:="Tableau croisé dynamique1"
DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).SmallGrid = False
'table dans 'lignes'
With DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
"N° Sélectif" )
.Orientation = xlRowField
.Position = 1
End With
'table dans 'colonnes'
With DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields("Etats" )
.Orientation = xlColumnField
.Position = 1
End With
'table dans 'données'
With DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotFields( _
"Nom du Sélectif" )
.Orientation = xlDataField
.Position = 1
End With
'mise en forme du tableau croisé dynamique
DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotSelect "", _
xlDataAndLabel
DocExcel.ActiveSheet.PivotTables("Tableau croisé dynamique1" ).Format xlTable10
'création du graphique
DocExcel.Charts.Add
DocExcel.ActiveChart.SetSourceData Source:=DocExcel.Sheets("Stats Trafic du 14.02.2008" ).Range( _
"H5" )
DocExcel.ActiveChart.Location Where:=xlLocationAsNewSheet
DocExcel.ActiveChart.ChartType = xl3DBarClustered
DocExcel.ActiveChart.PivotLayout.PivotFields("NB Nom du Sélectif" ).Caption = _
"NOMBRE D'OCCURENCES DES ETATS PAR SELECTIFS"
DocExcel.Sheets("Graph1" ).Select
DocExcel.Sheets("Graph1" ).Move After:=DocExcel.Sheets(2)
DocExcel.Sheets("Graph1" ).Name = "Graph Etats_sélectifs"
' on sauvegarde la feuille sous le nom contenu dans NomFichier
DocExcel.ActiveWorkbook.SaveAs FileName:=fichier, _
FileFormat:=17, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
DocExcel.DisplayAlerts = True
DocExcel.Visible = True
End Sub[/#0000ff]
merci d'avance