Voici un code que j'ai modifié pour exporter une listview apres une recherche vers une feuille excel,
je sais que ca se fait pas d'utiliser une erreur pour arreter le transfert mais bon, je suis débutant...
mais j'ai un probleme, l'export se fait bien, ce sont des nombres qui sont exportés vers excel, grace à ceux-ci je fait un graphique, mais mon graphique ne prend pas en compte les valeurs rentrées grace à mon code, mais si je les retapes une à une le graphique fonctionne...
Donc je vous demande si vous pouvez jetter un oeil sur mon code pour l'ameliorer et me dire pourquoi excel ne prend pas en compte les valeurs exportés (elles sont bien ecrites mais il faut les réécrire à la main pour que le graphique les prennent en compte).
Ne criez pas si le code est fouilli, je suis débutant! ;c)
MERCI!
Source / Exemple :
'Option Explicit
' * Variables globales *
Dim Con As New Connection ' Connection au moteur ADO
Dim Cmd As New Command ' Commande pour le moteur ADO
Dim RS As Recordset ' Tableau resultat
Dim strQuery As String ' Chaine de requête
Dim bSelect As Boolean ' Flag de selection
Dim strKeySelect As String ' Chaine de la cle selectionner
Dim bTri As Boolean ' Tri par NOM
Private Sub Command2_Click()
End Sub
Private Sub ExportExcel_Click()
Dim i As Integer
Dim j As Integer
Dim Co As Integer
Dim It As Integer
'Chemin du fichier a modifier à chaque installation
repertoire = "C:\fichier.xls"
'Ouverture de l'application
Set appexcel = New Excel.Application
'Gestion du fichier et ouverture statique
appexcel.Workbooks.Open repertoire
'Visualisation en fond d'ecran la page excel
appexcel.Visible = True
'On remplit l'entete de la page excel
appexcel.Worksheets(1).Cells(1, 1).Value = "Date et Heure:"
appexcel.Worksheets(1).Cells(1, 2).Value = "Blanc:"
appexcel.Worksheets(1).Cells(1, 3).Value = "Ciment Blanc:"
appexcel.Worksheets(1).Cells(1, 4).Value = "Ciment Gris:"
appexcel.Worksheets(1).Cells(1, 5).Value = "Concasse:"
appexcel.Worksheets(1).Cells(1, 6).Value = "Filler:"
appexcel.Worksheets(1).Cells(1, 7).Value = "Mi Casse:"
appexcel.Worksheets(1).Cells(1, 8).Value = "Roule:"
appexcel.Worksheets(1).Cells(1, 9).Value = "Silice:"
appexcel.Worksheets(1).Cells(1, 10).Value = "Silice humide:"
appexcel.Worksheets(1).Cells(1, 11).Value = "Vasilogrit:"
On Local Error GoTo fin
Co = 0
It = 0
Do
appexcel.Worksheets(1).Cells(2 + Co, 1).Value = lsvResult.ListItems.Item(1 + It)
appexcel.Worksheets(1).Cells(2 + Co, 2).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(1)
appexcel.Worksheets(1).Cells(2 + Co, 3).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(2)
appexcel.Worksheets(1).Cells(2 + Co, 4).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(3)
appexcel.Worksheets(1).Cells(2 + Co, 5).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(4)
appexcel.Worksheets(1).Cells(2 + Co, 6).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(5)
appexcel.Worksheets(1).Cells(2 + Co, 7).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(6)
appexcel.Worksheets(1).Cells(2 + Co, 8).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(7)
appexcel.Worksheets(1).Cells(2 + Co, 9).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(8)
appexcel.Worksheets(1).Cells(2 + Co, 10).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(9)
appexcel.Worksheets(1).Cells(2 + Co, 11).Value = lsvResult.ListItems.Item(1 + It).ListSubItems(11)
Co = Co + 1
It = It + 1
Loop
Exit Sub
For i = 1 To 11
appexcel.Worksheets(1).Cells(1, i).Font.Bold = True
appexcel.Worksheets(1).Cells(1, i).Font.Size = 8
appexcel.Worksheets(1).Cells(1, i).HorizontalAlignment = xlCenter
appexcel.Worksheets(1).Cells(1, i).VerticalAlignment = xlCenter
Next i
For j = 1 To 11
appexcel.Worksheets(1).Cells(2, j).HorizontalAlignment = xlCenter
Next j
fin:
End Sub
' *******************************
' * Chargement de la feuille *
' *******************************
Private Sub Form_Load()
' Definition de la chaine de connection
' c'est ici qu'il faut modifier le chemin à la base de donnée : Data Source=
Con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=CAB.mdb;Persist Security Info=False"
' Connection à la base de donnée
Con.Open
' Affectation des commandes à la connection active
Cmd.ActiveConnection = Con
' Affectation des collones list view
lsvResult.ColumnHeaders.Add 1, , "Date", 110
lsvResult.ColumnHeaders.Add 2, , "Blanc", 50
lsvResult.ColumnHeaders.Add 3, , "Ciment Blanc", 80
lsvResult.ColumnHeaders.Add 4, , "Ciment Gris", 80
lsvResult.ColumnHeaders.Add 5, , "Concasse", 60
lsvResult.ColumnHeaders.Add 6, , "Filler", 50
lsvResult.ColumnHeaders.Add 7, , "Mi Casse", 60
lsvResult.ColumnHeaders.Add 8, , "Roule", 50
lsvResult.ColumnHeaders.Add 9, , "Silice", 50
lsvResult.ColumnHeaders.Add 10, , "Silice Humide", 80
lsvResult.ColumnHeaders.Add 11, , "Vasilogrit", 60
lsvResult.ColumnHeaders.Add 11, , "N°", 0
lsvResult.View = lvwReport
' Init du trie
bTri = False
stbInfo.Panels("info").Text = "Recherche par Date"
End Sub
' *******************************
' * Dechargement de la feuille *
' *******************************
Private Sub Form_Unload(Cancel As Integer)
' Fermeture de la connection
Con.Close
End Sub
' *******************************
' * Selection d'une item *
' *******************************
Private Sub lsvResult_ItemClick(ByVal Item As MSComctlLib.ListItem)
' * variables locales *
Dim strKey As String ' chaine de la cle
' Gestionnaire d'erreur
On Local Error GoTo Err
' Info selection
'stbInfo.Panels("info").Text = "Selection : " & UCase(Trim(txtNom.Text)) & " " & UCase(Trim(txtPrenom.Text))
' test si deja selectionner
If (strKeySelect = Item.Key) Then Exit Sub
' Mémorisation de la cle
strKeySelect = Item.Key
' Sortie de la routine
Exit Sub
MyErr:
' Desaffectation de la gestion erreur
On Local Error GoTo 0
' Libération des ressources
Set RS = Nothing
Exit Sub
Err:
' Desaffectation de la gestion erreur
On Local Error GoTo 0
' Libération des ressources
Set RS = Nothing
End Sub
' ***************************
' * Procédure de quitter *
' ***************************
Private Sub mnuQuitter_Click()
Unload Me
End Sub
' ***************************************************
' * Changement du contenu de la zone de recherche *
' ***************************************************
Private Sub txtSearch_Change()
' * Variable locales *
Dim strSearch As String ' Zone texte de recherche
Dim liItem As ListItem ' Variable pour l'affichage du résultat
Dim Cpt As Integer ' Compteur affichage
' Lecture de la valeur saisie
strSearch = Trim(txtSearch.Text)
strSearch = UCase(strSearch)
' Efface la zone résultat
ExportExcel.Enabled = False
lsvResult.ListItems.Clear
bSelect = False
' Test de la cohérence de la saisie
If (txtSearch.Text = "") Then Exit Sub
' Définition de la requête
If (Not bTri) Then
strQuery = "SELECT * from Ajout WHERE Date LIKE '$' ORDER BY Date ASC"
End If
' Remplace les etoiles par %
strSearch = Replace(strSearch, "*", "%", 1, , vbTextCompare)
' Test si existence d'un %
If (InStr(1, strSearch, "%", vbTextCompare) = 0) Then
strSearch = strSearch & "%"
End If
' Construction de la requête
strQuery = Replace(strQuery, "$", strSearch, 1, , vbTextCompare)
' Préparation de la commande
Cmd.CommandText = strQuery
' Execution de la commande
Set RS = Cmd.Execute
' Init compteur
Cpt = 0
' Test si résultat
If (Not RS.EOF) Then
' Il y a donc un résultat => Boucle d'affichage
While (Not RS.EOF)
ExportExcel.Enabled = True
' Affichage résultat
If (Not bTri) Then
Set liItem = lsvResult.ListItems.Add(, "K" & CStr(RS!N°), RS!Heure)
liItem.SubItems(1) = RS!Blanc
liItem.SubItems(2) = RS!Ciment_Blanc
liItem.SubItems(3) = RS!Ciment_Gris
liItem.SubItems(4) = RS!Concasse
liItem.SubItems(5) = RS!Filler
liItem.SubItems(6) = RS!MI_Casse
liItem.SubItems(7) = RS!Roule
liItem.SubItems(8) = RS!Silice
liItem.SubItems(9) = RS!silice_H
liItem.SubItems(11) = RS!Vasilogrit
End If
' Incrémente le compteur
Cpt = Cpt + 1
' Passe à l'élément suivant
RS.MoveNext
' Autorise les evenements
'DoEvents
Wend
End If
' Affichage du résultat
stbInfo.Panels("info").Text = Cpt & " Date(s) trouvée(s)"
' Libération des ressources
Set RS = Nothing
End Sub
' * Procédure recherchant si l'acteur existe
Public Function IsActeurExist(Name As String, Surname As String) As Boolean
' Retour par defaut
IsActeurExist = False
' Initialisation de la requête
strQuery = "SELECT * from Ajout WHERE Date='%' AND PRENOM='$'"
' Finition de la requête
strQuery = Replace(strQuery, "%", UCase(Trim(Name)), 1, , vbTextCompare)
strQuery = Replace(strQuery, "$", UCase(Trim(Surname)), 1, , vbTextCompare)
' Préparation de la requête
Cmd.CommandText = strQuery
' Execution de la requête
Set RS = Cmd.Execute
' Test si existance
If (RS.EOF) Then
' Libération des ressources
Set RS = Nothing
Exit Function
End If
' Retour OK
IsActeurExist = True
' Libération des ressources
Set RS = Nothing
End Function
Conclusion :
La form comporte les elements suivant:
-un textbox nommé txtSearch
-un timer nommé timer1
-un commandbutton nommé ExportExcel
-une listview nommé lsvResult
-un commandbutton nommé mnuQuitter
-une statusbar nommé stbInfo
MERCI ENCORE!!!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.