Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2011, 12h14   #1
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 5
Points : 5
Par défaut Exportation excel + graphique

Bonjour étant débutant en vba je viens vous demander de l'aide
je souhaite faire un code qui me permette d'exporter une requête et qui réalise un graphique de type camembert 3 d mais je me retrouve confronté à des soucis :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Private Sub Commande585_Click()
 
DoCmd.TransferSpreadsheet acExport, _
                    acSpreadsheetTypeExcel3, _
                    "Indicateur sur Expertise /Complexite", _
                    "Indicateurs", _
                    True
 
    Dim mySheet As Object
    Dim xlApp As Object
 
    Set xlApp = CreateObject("Excel.Application")
    Set mySheet = xlApp.Workbooks.Open("C:\Documents and Settings\XXXXX\Mes documents\Indicateurs.xls") ' Définit le fichier EXCEL à ouvrir
 
    ' endroit où mettre le code de pilotage
 
 
    ActiveCell.Range("A1:B4").Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range( _
        "'Indicateur_sur_Expertise__Compl'!$A$1:$B$4")
    ActiveChart.ChartType = xl3DPie
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).ApplyDataLabels
    ActiveChart.SeriesCollection(1).DataLabels.Select
    Selection.ShowCategoryName = True
    Selection.Position = xlLabelPositionOutsideEnd
    ActiveChart.Legend.Select
    Selection.delete
    ActiveCell.Offset(5, 4).Range("A1:B1").Select
    ActiveCell.Offset(5, 5).Range("A1").Activate
 
    ' Code de fermeture
    mySheet.Save
    mySheet.Close
    xlApp.Quit
    Set xlApp = Nothing
    Set mySheet = Nothing
 
End sub
Tout d'abord lorsque je réalise l'exportation seule je peux appuyer sur le bouton plusieurs fois cela me permet d'écraser les données mais lorsque je tente d'inclure le graphique si le fichier excel existe il refuse de modifier les données
Ensuite il me dit que le with n'est pas définie mais malgré le fait que le with n'est pas définie il arrive qu'il fasse quand même le graphique de temps en temps.
Je pense que c'est un problème de logique dans le code ou de compréhension du VBA mais je n'arrive pas à mettre le doigt dessus.

Cordialement
claude21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 14h37   #2
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 5
Points : 5
bon j'ai réalisé quelques changements dans le code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Sub Commande585_Click()
DoCmd.TransferSpreadsheet acExport, _
                    acSpreadsheetTypeExcel3, _
                    "Indicateur sur Expertise /Complexite", _
                    "Indicateurs1", _
                    True
 
    Dim mySheet As Object
    Dim xlApp As Object
 
    Set xlApp = CreateObject("Excel.Application")
    Set mySheet = xlApp.Workbooks.Open("C:\Documents and Settings\W556403\Mes documents\Indicateurs1.xls") ' Définit le fichier EXCEL à ouvrir
 
    ' endroit où mettre le code de pilotage
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("'Indicateurs1'!$A$1:$B$4")
    ActiveChart.ChartType = xl3DPie
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).ApplyDataLabels
    ActiveChart.SeriesCollection(1).DataLabels.Select
    Selection.ShowCategoryName = True
    ActiveChart.SeriesCollection(1).HasLeaderLines = False
    Selection.Position = xlLabelPositionOutsideEnd
    Selection.Separator = "" & Chr(10) & ""
 
    ActiveChart.Legend.Select
    Selection.delete
 
 
 
    ' Code de fermeture
    mySheet.Save
    mySheet.Close
    xlApp.Quit
    Set xlApp = Nothing
    Set mySheet = Nothing
 
End Sub
Cela fonctionne un peu mieux mais il y a blocage lorsque cela arrive à mySheet.Save il me sort que la méthode Save de la classe workbook a échoué (erreur 1034).

Autre chose est ce qu'il est possible via la méthode TransferSpreadsheet de permettre à l'utilisateur de choisir son répertoire de destination et donc à ce moment la de faire pointer la création du graphique sur le fichier précedemment crée je ne sais pas si je suis très clair.

Ma question est peut être un peu bête surtout que je trouve juste après avoir posté alors que j'ai cherché un bon moment avant
claude21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 11h56   #3
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 5
Points : 5
Après avoir réalisé quelques modifications j'ai pu résoudre le problème mais j'ai un souci que je ne sais pas résoudre

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Private Sub Commande589_Click()
DoCmd.TransferSpreadsheet acExport, _
                    acSpreadsheetTypeExcel3, _
                    "Indicateur sur Expertise/Garantie", _
                    "Expertise_Garantie", _
                    True
 
    Dim mySheet As Object
    Dim xlApp As Object
    Dim FS As Object
    Dim F As Object
 
 
    Set xlApp = CreateObject("Excel.Application")
    Set mySheet = xlApp.Workbooks.Open("C:\Documents and Settings\W556403\Mes documents\Expertise_Garantie.xls") ' Définit le fichier EXCEL à ouvrir
 
    ' endroit où mettre le code de pilotage
    Columns("A:B").Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("'Expertise_Garantie'!$A:$B")
    ActiveChart.ChartType = xl3DPie
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).ApplyDataLabels
    ActiveChart.SeriesCollection(1).DataLabels.Select
    Selection.ShowCategoryName = True
    ActiveChart.SeriesCollection(1).HasLeaderLines = False
    Selection.Position = xlLabelPositionOutsideEnd
    Selection.Separator = "" & Chr(10) & ""
 
    ActiveChart.Legend.Select
    Selection.delete
 
 
 
    ' Code de fermeture
 
    mySheet.Close
    xlApp.Quit
    Set xlApp = Nothing
    Set mySheet = Nothing
    'comme le fichier est réenregistrer en point xlsx on supprime le fichier xls
    Set FS = CreateObject("Scripting.FileSystemObject")
    Set F = FS.GetFile("Expertise_Garantie.xls")
    F.delete
End Sub
J'ai rajouté un code me permettant de supprimer le fichier.xls étant donné qu'à la fin excel propose automatiquement à l'utilisateur de réenregistrer le fichier en .xlsx

Par contre en voulant sélectionner les colonnes A et B (les requêtes peuvent être à taille variable ) il marche très bien une fois mais la deuxième fois une erreur 1004 se produit qui me dit la méthode columns de l'objet global a échoué.

Après si je ferme le tout et que je refais la manipulation ca marche nickel mais seulement une fois. Est ce que ca ne viendrai pas du fait que je sélectionne les colonnes A et B en totalité même si des cellules ne sont pas renseignées mais alors pourquoi cela fonctionnerai la première fois?


Merci d'avance
Cordialement
claude21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 09h36   #4
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 5
Points : 5
Bonjour

Je me permet de remonter le topic pour demander de l'aide.
J'ai testé le programme avec une boucle qui me donne le nombre exact de ligne dans ma requete mais rien n'y fait je ne peux toujours pas réaliser la requete plus de deux fois à la suite si je ferme ma base access et que je recommence c'est nickel mais toujours une fois.

Quelqu'un n'aurait pas une idée je deviens fou

Cordialement
claude21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 11h35   #5
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 13
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juin 2011
Messages : 13
Points : 5
Points : 5
Je ne sais pas si c'est ca mais j'ai l'impression qu'il faudrait couper la communication entre la base access et excel.N'y aurait il pas une commande permettant de réaliser cela.Mais si c'est pas ca je vois pas

Cordialement
claude21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h48.


 
 
 
 
Partenaires

Hébergement Web