Macro ne fonctionne pas sur d'autres postes
Bonjour,
J'ai crée un outil pour la logistique exécutant en fin d'utilisation une sauvegarde et une copie du fichier. Sur mon poste tout est ok. Par contre sur les autres postes avec Excel 2007 et 2016, pas d'exécution en fermeture par le bouton quitter. Voici le bout de code:
Option Explicit
Dim wb As Workbook
Private Sub CommandButton1_Click()
Dim mPlage As Range
ThisWorkbook.Application.Visible = True
Set mPlage = ThisWorkbook.Sheets("ETIQUETTE").Range("A1:Z100")
Call EffacePlage(mPlage)
Set mPlage = Nothing
Worksheets("Entree").Select
userform2.Show
End Sub
Private Sub CommandButton2_Click()
ThisWorkbook.Application.Visible = True
Worksheets("Sortie").Select
UserForm3.Show
End Sub
Private Sub CommandButton3_Click()
ThisWorkbook.Application.Visible = True
Worksheets("Entree").Select
UserForm5.Show
End Sub
Private Sub CommandButton4_Click()
ThisWorkbook.Application.Visible = True
Worksheets("Clients").Select
UserForm1.Show
End Sub
Private Sub CommandButton5_Click()
Dim Chemin As String, Fichier As String
Dim reponse As Integer
Application.DisplayAlerts = False
On Error Resume Next
reponse = MsgBox("Avez-vous imprimé vos étiquettes?", vbYesNo + vbQuestion, "Confirmation")
If reponse = vbYes Then
ActiveWorkbook.Save
Chemin = "S:\BE\PRODUCTION\SAMARA\CODEBARRE\SAUVEGARDE\"
'Ajoute la date du jour et l'heure dans le nom du fichier
Fichier = "Copie_Gestion_In_Out_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss")
With ActiveWorkbook
.SaveCopyAs Filename:=Chemin & Fichier & ".xlsm" 'FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.Save
End With
Shell ("taskkill /F /IM Excel.exe")
'Application.Quit
Else
Exit Sub
End If
Application.DisplayAlerts = True
End Sub
Public Sub EffacePlage(ByRef plage As Range)
plage.ClearContents
End Sub
Private Sub CommandButton6_Click()
Dim Chemin As String, Fichier As String, lettre As String
Dim FSO As Object
Dim Drv As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
With ThisWorkbook.Worksheets("ETIQUETTE")
.Columns(1).Copy
.Columns(6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Columns(2).Copy
.Columns(8).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Columns(1).Clear
.Columns(2).Clear
.Columns(3).Clear
.Columns(4).Clear
.Columns(5).Clear
End With
For Each Drv In FSO.Drives
With Drv
If .IsReady And .DriveType = 1 Then
'MsgBox "Lecteur USB sur : " & .DriveLetter
lettre = Drv.DriveLetter
Chemin = lettre & ":\"
Fichier = "ETIQUETTE"
Sheets("ETIQUETTE").Copy
ActiveWorkbook.SaveCopyAs Filename:=Chemin & Fichier
Set wb = Workbooks.Open(Filename:=Chemin & Fichier & ".xlsm")
With wb
.SaveAs Filename:=Chemin & Fichier & ".xls", FileFormat:=-4143
.Close
End With
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=True
Application.DisplayAlerts = True
Exit Sub
End If
End With
Next Drv
MsgBox "Pas de clé USB détectée. Merci d'en insérer une !"
End Sub
Si quelqu'un a une idée du blocage, je suis preneur.
Merci à vous
Bonjour,
Tu as le bouton </> pour baliser (à coller entre les deux balises "code") ton code plutôt que de le coller tel quel dans le message (plus facile à récupérer pour nous !).
Quand je vois dans ton code la ligne :
Chemin = "S:\BE\PRODUCTION\SAMARA\CODEBARRE\SAUVEGARDE\"J'en déduis que vous avez tous le même chemin donc la même racine (lettre du lecteur S:) !
Si ce n'est pas le cas, il faudrait peut être utiliser "FileDialog()" afin que l'utilisateur puisse sélectionner le dossier dans lequel il veut sauvegarder le fichier.
Et ça :
Shell ("taskkill /F /IM Excel.exe")C'est pas un peu radical comme fermeture (perso, jamais utilisé) ?
Merci de votre réponse. Désolé pour le copier/coller.
J'ai effectivement le même chemin pour la sauvegarde et la copie de sauvegarde (pour info: demande de notre service qualité), à l'exception de la dernière racine.
Chemin = "S:\BE\PRODUCTION\SAMARA\CODEBARRE\SAUVEGARDE\" pour la copie
Chemin = "S:\BE\PRODUCTION\SAMARA\CODEBARRE\" pour la sauvegarde.
La taskill est la solution la plus sûr pour vraiment fermer excel car avec la fonction application.quit ne ferme pas excel.
Si vous avez une autre proposition, ce serait un plus.
Concernant le non fonctionnement sur les différents postes? vous avez une idée?
Bonjour,
Non, je n'ai pas vraiment d'idées, si ça marche pour certains et que vous avez tous le même chemin, je ne vois pas. Vous êtes tous sur PC ou il y en a qui ont des Mac ?
Bonjour,
Non, nous sommes tous sur PC, environnement identique ou bien XP pour certains. Mais l'affaire reste pareil sur l'ensemble des PC.
Re,
Comme j'avais juste survolé ton code, je n'avais pas fait attention au gestionnaire d'erreur, en mode débogage il est impératif de ne pas utiliser On Error Resume Next car sinon les erreurs sont évitées et on ne sais pas ou ça coince. On ne l'utilise que si on est sûr qu'une erreur peut être générée par une action et qu'il va falloir la gérer mais ensuite, on supprime le gestionnaire par On Error GoTo 0 !
Donc, supprime pour l'instant le gestionnaire (On Error Resume Next) et lance le code, tu auras alors ton erreur et tu sauras d'où ça vient !
Merci These.
Je tiens informé dès Lundi.
Bon weekend
Bonjour These,
Le deboggage m'informe de l'erreur suivante :
Private Sub CommandButton5_Click()
Dim Chemin As String, Fichier As String
Dim reponse As Integer
Application.DisplayAlerts = False
'On Error Resume Next
reponse = MsgBox("Avez-vous imprimé vos étiquettes?", vbYesNo + vbQuestion, "Confirmation")
If reponse = vbYes Then
ActiveWorkbook.Save
Chemin = "S:\BE\PRODUCTION\SAMARA\CODEBARRE\SAUVEGARDE\"
'Ajoute la date du jour et l'heure dans le nom du fichier
Fichier = "Copie_Gestion_In_Out_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss")
With ActiveWorkbook
.SaveCopyAs Filename:=Chemin & Fichier & ".xlsm" 'FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.Save
End With
Shell ("taskkill /F /IM Excel.exe")
'Application.Quit
Else
Exit Sub
End If
Application.DisplayAlerts = True
End SubLa ligne .SaveCopyAs Filename:= .... est en jaune
Là je bloque.
Peut-être pourriez-vous m'aider?
Slts
Bonjour ...
un petit essai... remplacer :
.SaveCopyAs Filename:=Chemin & Fichier & ".xlsm" 'FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.Savepar
.Save
.SaveAs Chemin & Fichier & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=FalseFred
Sinon autre piste a explorer... si c'est un dossier partager sur un réseau... vérifier avec ton administrateur réseau que les droits NTFS sur le dossier en question sont correctes.... tu peux avoir les droits d’écrire et pas tes collègues.... (ou ton ordi et pas les autres.... on peut faire beaucoup de choses....)
Fred
Bonjour Fred,
Non toujours la même erreur 1004 sur la ligne
.SaveAs Chemin & Fichier & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=FalseLà je cale
Merci Fred,
Je creuse, je vais déplacer le fichier de base vers le serveur commun dont les droits sont open pour tous.
Je profite également de ce mesage pour vous remercier tous. Je vous tiens informé.
Slts
alors pour faire un autre essai
remplace :
Chemin = "S:\BE\PRODUCTION\SAMARA\CODEBARRE\SAUVEGARDE\"par
Chemin = Environ("USERPROFILE") & "\Desktop\"ce qui permet de faire un enregistrement sur le bureau local de l'utilisateur...
si cela fonctionne c'est que c'est un problème réseau... et que le chemin d'accès au dossier S:\BE\PRODUCTION\SAMARA\CODEBARRE\SAUVEGARDE\ n'est pas accessible dans ce cas difficile d'aider en n’étant pas devant l'ordi.....
Fred
A tous,
Problème résolu avec droit d'écriture administratif.
Super
Merci beaucoup de votre aide encore une fois.
Re
Tant mieux....
Fred
Bonjour à tous,
Après avoir résolu le PB d'écriture de fichier sur le serveur et ce grâce à votre aide, je vous sollicite de nouveau car j'ai une incompréhension de le message visant la ligne " Set wb = Workbooks.Open(Filename:=Chemin & "ETIQUETTE.xlsm")"
Private Sub CommandButton6_Click()
Dim Chemin As String, Fichier As String, lettre As String
Dim wb As Workbook
Dim FSO As Object
Dim Drv As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
With ThisWorkbook.Worksheets("ETIQUETTE")
.Columns(1).Copy
.Columns(6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Columns(2).Copy
.Columns(8).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Columns(1).Clear
.Columns(2).Clear
.Columns(3).Clear
.Columns(4).Clear
.Columns(5).Clear
End With
For Each Drv In FSO.Drives
With Drv
If .IsReady And .DriveType = 1 Then
'MsgBox "Lecteur USB sur : " & .DriveLetter
lettre = Drv.DriveLetter
Chemin = lettre & ":\"
Fichier = "ETIQUETTE"
ThisWorkbook.Worksheets("ETIQUETTE").Copy 'Sheets("ETIQUETTE").Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs Filename:=Chemin & Fichier & ".xls", FileFormat:=-4143, CreateBackup:=False ' Filename:=Chemin & Fichier & ".xlsm"
ActiveWorkbook.Close
Set wb = Workbooks.Open(Filename:=Chemin & "ETIQUETTE.xlsm")
With wb
.SaveAs Filename:=Chemin & Fichier & ".xls", FileFormat:=-4143, CreateBackup:=False
.Close
End With
ActiveWorkbook.Close savechanges:=True
Application.DisplayAlerts = True
Exit Sub
End If
End With
Next Drv
MsgBox "Pas de clé USB détectée. Merci d'en insérer une !"
End SubQuelqu'un aurait-il une idée du blocage.
Merci de votre aide