Automation avec Excel : lancer une macro qui trie les données
Bonjour,
j'ai fait une ListBox de tri sous Access que je souhaite importer sous cellules Excel.
A partir de là, j'aimerai faire un tri alphabétique sous excel de ce que je viens d'importer, j'ai donc créer la macro sous excel et j'ai voulu la lancer sous excel à partir d'access, mais j'ai l'erreur suivante:
Erreur d'execution 1004:
Impossible de trouver la Macro
en utilisant: xlApp.Run ("Feuil2.CommandButton1_Click")
La macro se lançait au début, mais depuis que j'ouvre 2 classeur et 3 feuilles Excel à partir d'Access, ça ne marche plus.
Comment choisir sur quelle feuille et dans quel classeur lancer la Macro?
Voici mon code actuel
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| Public Sub Copie()
Dim xlApp As Excel.Application
Dim xlSheet11 As Excel.Worksheet
Dim xlSheet12 As Excel.Worksheet
Dim xlSheet21 As Excel.Worksheet
Dim xlBook1 As Excel.Workbook
Dim xlBook2 As Excel.Workbook
Dim i As Long, j As Long
Dim t0 As Long, t1 As Long
t0 = Timer
Dim rec As Recordset
Set rec = CurrentDb.OpenRecordset("Ouverture", dbOpenSnapshot)
'Initialisations
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
'Classeur 1
Set xlBook1 = xlApp.Workbooks.Open(CurrentProject.Path & "\Bin Packing multiplier (version 1).xls")
'Classeur 2
Set xlBook2 = xlApp.Workbooks.Add
'Feuil 2 Classeur1
Set xlSheet12 = xlBook1.Sheets(2)
'Copie de la ListBox sous Excel
For i = 0 To Form_FormulairePrincipal.ListBox0.ListCount - 1
For j = 0 To 4
xlSheet12.Cells(4, 4).Offset(i, j) = Form_FormulairePrincipal.ListBox0.Column(j, i)
Next
Next
'Macro de tri alphabétique
xlApp.Run ("Feuil2.CommandButton1_Click")
'Feuil 1 Classeur 1
Set xlSheet11 = xlBook1.Sheets(1)
xlSheet11.Cells(4, 1) = 1198
xlApp.Run ("Feuil1.CommandButton1_Click")
'Ajouter une feuille de calcul
Set xlSheet21 = xlBook2.Worksheets.Add
xlSheet21.Name = "Essai"
xlSheet11.Copy
xlSheet21.Paste
'code de fermeture et libération des objets
xlBook1.Close (False)
xlBook2.Close (True)
xlApp.Quit
rec.Close
Set rec = Nothing
Set xlSheet11 = Nothing
Set xlSheet12 = Nothing
Set xlSheet21 = Nothing
Set xlBook1 = Nothing
Set xlBook2 = Nothing
Set xlApp = Nothing
t1 = Timer
Debug.Print i & " enregistrements", Format(t1 - t0, "0") & " secondes"
End Sub |
Pouvez vous m'aider?
Merci
J'ai également essayé de mettre la macro en automation sous access au lieu d'excel,mais ça n'a pas marché non plus.
Code sous Access:
Code:
1 2 3 4 5 6
| 'Sélection de la plage à trier
xlSheet12.Range("A1:C7").Select
'Lancement du tri, basé sur les données de la colonne A en ordre croissant
Selection.Sort Key1:=xlSheet12.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal |
Mais je n'arrive pas à utiliser Range en automation.
Pouvez vous m'aider?
merci