Pb enregistrer fichier.xlsm sur d'autres postes que le mien

Fermé
LeFils2Elohim Messages postés 31 Date d'inscription mardi 7 juin 2016 Statut Membre Dernière intervention 10 mars 2020 - 3 août 2016 à 19:58
LeFils2Elohim Messages postés 31 Date d'inscription mardi 7 juin 2016 Statut Membre Dernière intervention 10 mars 2020 - 4 août 2016 à 19:58
Bonjour,

J'ai un fichier Excel de suivi de personnel.
Il y a des formules, des MFC et quelques code VBA, dont celui pris sur ce site: https://forums.commentcamarche.net/forum/affich-30129000-date-sous-excel-lie-avec-outlook

Private [/contents/446-fichier-sub Sub] Worksheet_Change(ByVal Target As Range)
Dim MaPlage As Range
'ici on détermine la plage dont les modifications déclencheront la procédure :
Set MaPlage = Range("C5:C261") '***** A ADAPTER ******
'si la cellule modifiée n'est pas dans notre plage on quitte la procédure sans rien faire
If Intersect(MaPlage, Target) Is Nothing Then Exit Sub
'sort également de la procédure si tu effaces le contenu d'une cellule date
If Target.Value = "" Then Exit Sub
'déclaration des variables
Dim strSujet As String, strDescription As String, strLocation As String, datDate As Date, IntDuree As Integer, strCategorie As String
'Attribution des valeurs aux variables
'il est possible de remplacer les valeurs "en dur" par des valeurs contenues dans les cellules
'pour cela, se baser sur Target (= la cellule date modifiée) et faire varier l'Offset pour cibler la bonne cellule
'dans cet exemple, Target est en colonne E.
'Pour cibler la cellule située en colonne A de la même ligne, il convient d'utiliser : Target.Offset(0, -4).Value
'Pour cibler la cellule située en colonne G de la même ligne, il convient d'utiliser : Target.Offset(0, 2).Value
strSujet = "Alerte3"
strDescription = "....Description...."
strLocation = "Ici même"
datDate = CDate(Target.Offset(0, 1).Value - 7) 'date contenue dans la colonne D moins 7 jours
Do While Not JoursOuvres(madate) 'on boucle tant que la date trouvée n'est pas un jour ouvré
   datDate = CDate(datDate - 1) 'on enlève un jour
Loop
'petit test. Si ta cellule date ne contient pas l'heure, l'heure par défaut sera 08:00:00
'inutile de changer le format de la date, la saisir au format jj/mm/aaaa
If InStr(datDate, ":") = 0 Then datDate = CDate(datDate & " 08:00:00")
IntDuree = 30
strCategorie = "Travail"
'Appel de la procédure
Call NouveauRDV_Calendrier(strSujet, strDescription, strLocation, datDate, IntDuree, strCategorie)
End Sub

Sub NouveauRDV_Calendrier(Sujet As String, Description As String, Locat As String, madate As Date, duree As Integer, Cat As String)
'Nécessite d'activer la référence "Microsoft Outlook xx.x Object Library"
Dim OkApp As New Outlook.Application
Dim Rdv As Outlook.AppointmentItem
 
Set Rdv = OkApp.CreateItem(olAppointmentItem)
 
With Rdv
    .MeetingStatus = olMeeting
    .Subject = Sujet
    .Body = Description
    .Location = Locat
    .Start = madate
    .Duration = duree
    .Categories = Cat
    .Save
End With
 
Set OkApp = Nothing
End Sub

Function JoursOuvres(UneDate As Date) As Boolean
Select Case Weekday(UneDate)
    Case vbSunday, vbSaturday
      JoursOuvres = False
    Case Else
      'calcul du dimanche de paques :
      'cf : http://www.developpez.net/forums/d198031/logiciels/microsoft-office/access/access-2000-calcul-jours-ouvr-s-champ-formulaire/#post1279591
      Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer
      Dim f As Integer, g As Integer, h As Integer, i As Integer, j As Integer, k As Integer
      Dim l As Integer, m As Integer, n As Integer, p As Integer, iAn As Integer
      Dim Paques As Date, LundiDePaques As Date, feries(12)
      iAn = Year(UneDate)
      a = Int(iAn Mod 19)
      b = Int(iAn \ 100)
      c = Int(iAn Mod 100)
      d = b \ 4
      e = b Mod 4
      f = (b + 8) \ 25
      g = (b - f + 1) \ 3
      h = (19 * a + b - d - g + 15) Mod 30
      i = c \ 4
      k = c Mod 4
      l = (32 + 2 * e + 2 * i - h - k) Mod 7
      m = (a + 11 * h + 22 * l) \ 451
      n = (h + l - 7 * m + 114) \ 31
      p = (h + l - 7 * m + 114) Mod 31
      Paques = DateSerial(iAn, n, p + 1) 'dimanche de pâques
      LundiDePaques = DateAdd("d", 1, Paques) 'lundi de pâques
      feries(0) = DateSerial(iAn, 1, 1) '1er janvier
      feries(1) = Paques '==> inutile car dimanche mais...
      feries(2) = LundiDePaques
      feries(3) = DateSerial(iAn, 5, 1) '1er mai
      feries(4) = DateSerial(iAn, 5, 8) 'armistice 39-45
      feries(5) = DateAdd("d", 39, Paques) 'ascension
      feries(6) = DateAdd("d", 49, Paques) 'dimanche de pentecôte ==> inutile car dimanche mais...
      feries(7) = DateAdd("d", 50, Paques) 'lundi de pentecôte
      feries(8) = DateSerial(iAn, 7, 14) ' 14 juillet
      feries(9) = DateSerial(iAn, 8, 15) '15 aout
      feries(10) = DateSerial(iAn, 11, 1) 'toussaint
      feries(11) = DateSerial(iAn, 11, 11) 'armistice 14-18
      feries(12) = DateSerial(iAn, 12, 25) 'Noël
      For j = 0 To 12
         If feries(j) = UneDate Then JoursOuvres = False: Exit Function
      Next j
      JoursOuvres = True
End Select
End Function


Je partage ce fichier par copier/coller d'une cle usb au pc de mon client pour lui permettre de le remplir tout au long du mois et me le renvoyer ensuite pour le traitement des salaires.

Le souci, c'est que lui et moi pouvons l'ouvrir, le lire et y ajouter et supprimer des données, mais seul moi sur mon PC peut enregistrer les modifications apportées.

Quand mon client ou ses collègues (sur leurs PCs) essaient d'enregistrer, ils ont un message d'erreur de ce genre:


>> Nous utilisons tous excel 2010 sous win7 pro

J'ai trouvé un problème similaire au mien sur ce site: https://www.developpez.net/forums/d1462305/logiciels/microsoft-office/excel/macros-vba-excel/impossible-d-enregistrer-fichier-xlsm-d-autres-postes-mien/

Mais je n'arrive pas à adapter sa solution à mon problème. Pouvez vous m'aider svp?

D'avance merci pour votre précieuse aide!
Le Fils

A voir également:

1 réponse

Mabelle60 Messages postés 469 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 21 juin 2017 130
Modifié par Mabelle60 le 4/08/2016 à 18:18
Bonjour Elohim Jr.
Bien que manipulant de temps à autres VBA, c'est la première fois que je vois une instruction entre [ ] après le 'Private'.... (Oui je suis encore débutant...ou alors j'ai un bug à l'affichage... mais je suis quand même un débutant...)
1°/ Peux tu m'expliquer à quoi ça sert afin que je progresse?
2°/ J'ai vu que c'est un élément que tu as rajouté vs le code source... Ton pb ne pourrait-il pas venir e là?

Corialement
0
LeFils2Elohim Messages postés 31 Date d'inscription mardi 7 juin 2016 Statut Membre Dernière intervention 10 mars 2020
Modifié par LeFils2Elohim le 4/08/2016 à 19:58
Bonsoir Mabelle60,

Merci de t'être penché sur mon problème.
Le code que tu vois est tiré de cette page CCM: https://forums.commentcamarche.net/forum/affich-30129000-date-sous-excel-lie-avec-outlook

J'ai repris et l'ai adapté à mon fichier pour me permettre de créer les dates de fin de contrat de mes agents dans l'agenda Outlook (ce qui fonctionne très bien, soit dit en passant).
Je peux t'envoyer mon code, si tu veux, tel qu'il est dans mon fichier, dès que je serai de retour chez moi.

Il est effectivement possible que le problème vienne de là.
Comme je l'ai précisé ci-dessus, j'ai trouvé un problème similaire sur cette page https://www.developpez.net/forums/d1462305/logiciels/microsoft-office/excel/macros-vba-excel/impossible-d-enregistrer-fichier-xlsm-d-autres-postes-mien/

Mais je n'arrive pas à adapter sa solution à mon problème.

Merci encore.
Le Fils
0