Bonjour le forum,
J'utilise sur un fichier une macro me permettant de copier une feuille vers le bureau en la renommant et avec la date. Mais voilà, cette macro fonctionne sur un classeur mais mets un temps fou à s'exécuter sur un autre classeur (jusqu'à 10 minutes montre en main...). J'imagine que cela est du au différentes formules, userfoms et autres actions parallèles lors de l'exécution de la commande de copie (mais ça ne reste que mon avis...).
J'ai fait le test, c'est bien la commande Worksheets("Feuil1").Copy qui fait ramer Excel puisqu'en la supprimant ou en la modifiant ça passe.
Malheureusement je souhaite ne copier que la feuille et pas le classeur entier.
Pour info et si cela peut aider, j'ai intégré cette macro dans une autre macro qui envoi un mail avec la copie d'une plage de cellule.
La déroulement de la macro d'envoi de mail dans laquelle est inclue la macro 'Enregistrer' :
1. J'envoie le mail avec la plage de cellule pré-remplie par USF1
2. Je créer la copie de la feuille sur le bureau, j'ouvre l'URL et je déclenche USF3 ('Sub Enregistrer')
3. Je ferme le classeur
Le code en question :
Sachant que cette macro fonctionne très bien sur un autre classeur, qu'est-ce qui pourrait bloquer dans l'autre ?
Auriez-vous une solution plus "efficace" ou plus "light (si tant est que cela soit le problème) ?
Merci par avance pour votre aide
J'utilise sur un fichier une macro me permettant de copier une feuille vers le bureau en la renommant et avec la date. Mais voilà, cette macro fonctionne sur un classeur mais mets un temps fou à s'exécuter sur un autre classeur (jusqu'à 10 minutes montre en main...). J'imagine que cela est du au différentes formules, userfoms et autres actions parallèles lors de l'exécution de la commande de copie (mais ça ne reste que mon avis...).
J'ai fait le test, c'est bien la commande Worksheets("Feuil1").Copy qui fait ramer Excel puisqu'en la supprimant ou en la modifiant ça passe.
Malheureusement je souhaite ne copier que la feuille et pas le classeur entier.
Pour info et si cela peut aider, j'ai intégré cette macro dans une autre macro qui envoi un mail avec la copie d'une plage de cellule.
La déroulement de la macro d'envoi de mail dans laquelle est inclue la macro 'Enregistrer' :
1. J'envoie le mail avec la plage de cellule pré-remplie par USF1
2. Je créer la copie de la feuille sur le bureau, j'ouvre l'URL et je déclenche USF3 ('Sub Enregistrer')
3. Je ferme le classeur
Le code en question :
VB:
Option Explicit
Dim dossier As String
Dim bureau As String
Sub Enregistrer()
Application.DisplayAlerts = False
cheminbureau
dossier = bureau & "\"
Worksheets("Feuil1").Copy
With ActiveWorkbook
.SaveAs Filename:=dossier & Format(Date, "dd.mm.yy - ") & "xxx.xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close
MsgBox "xxxxx" & Chr(10) & Chr(10) & "xxxxx" & Chr(10) & "xxxxxx" & Chr(10) & xxxxxx", vbInformation
Unload UserForm2
Dim URL As String
URL = "xxxxxxx”
Shell ("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe -url " & URL)
End With
If MsgBox("xxxxxxx" & Chr(10) & Chr(10) & "xxxx", vbYesNo + vbQuestion) = vbYes Then
UserForm3.Show
Else: ActiveWorkbook.Close
End If
End Sub
Private Sub cheminbureau()
On Error GoTo TestErreur
Dim cheminbureau As String
cheminbureau = ObtenirCheminBureau()
bureau = cheminbureau
Exit Sub
TestErreur:
MsgBox "Une erreur s'est produite..."
End Sub
Public Function ObtenirCheminBureau() As String
On Error GoTo ObtenirCheminBureauError
Dim cheminbureau As String
cheminbureau = ""
Dim oWSHShell As Object
Set oWSHShell = CreateObject("WScript.Shell")
cheminbureau = oWSHShell.SpecialFolders("Desktop")
If (Not (oWSHShell Is Nothing)) Then Set oWSHShell = Nothing
ObtenirCheminBureau = cheminbureau
Exit Function
ObtenirCheminBureauError:
If (Not (oWSHShell Is Nothing)) Then Set oWSHShell = Nothing
ObtenirCheminBureau = ""
End Function
Sachant que cette macro fonctionne très bien sur un autre classeur, qu'est-ce qui pourrait bloquer dans l'autre ?
Auriez-vous une solution plus "efficace" ou plus "light (si tant est que cela soit le problème) ?
Merci par avance pour votre aide
Dernière édition: