Microsoft 365 Macro pour rafraîchir les liaisons

Dégé59

XLDnaute Nouveau
Bonjour à tous,

Je coince sur quelque chose qui à mon avis est très simple, mais je n'arrive pas à trouver la solution alors je viens vous solliciter pour voir si quelqu'un n'aurait pas une idée à tout hasard...

J'ai:

- Un tableau "A" qui contient des données (relevés d'état de stocks quotidien) qui sont mises à jour une fois par jour (saisie manuelle) par des collaborateurs.
- Un tableau "B" qui récupère ces données (simples références dans les cellules aux cellules du tableau A) pour divers usages.

Une des raisons d'être du tableau B est d'envoyer 2x par jour un récap en PDF de l'état des stocks à une mailing list.

Le tableau A est ouvert une fois par jour pour être rempli par mes collègues, puis sauvegardé, puis fermé jusqu'au lendemain.

Le tableau B reste ouvert 24/24 (j'ai une machine avec une session qui reste ouverte en permanence).

Les 2 tableaux sont situés dans le même dossier, en réseau, sur le serveur local, mais le tableau A est ouvert sur un PC situé à un endroit différent physiquement du PC sur lequel est ouvert le tableau B. Les 2 sessions Windows ouvertes sont bien sûr différentes également. Pour des raisons opérationnelles, je ne peux pas faire autrement.

Mon problème :

En réalité il y a 3 choses que je n'arrive pas à faire comme je veux avec le tableau B, principalement à cause de mon niveau Excel qui est assez faible pour le moment...

Pour le moment je cherche à résoudre seulement la plus bloquante : les liaisons ne se mettent pas à jour dans le tableau B quand le tableau A est modifié. Enfin si, mais il faut pour ça d'abord fermer le tableau B puis le rouvrir, ce que je voudrais éviter, notamment parce que ça demande que quelqu'un le fasse manuellement tous les jours...

Ce que je cherche à faire, si c'est possible, c'est simplement ajouter une ligne dans le VBA au début de ma procédure (qui fonctionne parfaitement en soi) pour forcer le rafraichissement des liaisons, avant de déclencher l'export en PDF puis l'envoi du mail. Comme si les 2 tableaux étaient ouvert simultanément sur le même PC, car quand c'est le cas les liaisons se mettent à jour immédiatement bien sûr.

Je précise que la procédure est maintenant activée en automatique toutes les 12h, mais est également activable manuellement via un bouton dispo sur le classeur au besoin.

Je vous mets ci-dessous mon code avec des notes pour que ce soit plus clair :

VB:
Sub envoi_stock()           

       Application.OnTime Now + TimeValue("12:00:00"), "envoi_stock"
      

        ' ==> AJOUTER ICI LE CODE POUR FORCER LE RAFRAICHISSEMENT DU CLASSEUR <==

            '   Export du relevé en .pdf dans le dossier serveur local :
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "R:\adresse\répertoire local\nom du fichier" _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
'
            'Préparation application Outlook:
Dim Outapp As Object
Dim Outmail As Object
 
  
   Set Outapp = CreateObject("Outlook.Application")
   Set Outmail = Outapp.CreateItem(0)
  
              'Début procédure création email
    With Outmail
    
           'Choix adresse mail expéditeur:
        .SentOnBehalfOfName = "mail@expéditeur"
        
        
           'Paramétrage de l'Email de diffusion:
          
        .To = "mailing list principale"
        .CC = "mailing list en copie"
        .Subject = "État des stock du " & Date & " à " & Time
            
        
        .HTMLBody = "message automatique"
                                  
           'Ajout de la pièce jointe:
        .Attachments.Add "R:\adresse\répertoire local\nom du fichier"
'
'OFF=> .Display '<=OFF
        .Send
        
            
    End With
    
          'Nettoyage
    Set Outmail = Nothing
    Set Outapp = Nothing
'


End Sub

Je suis étonné d'avoir trouvé si peux de résultat correspondant à mon besoin malgré mes recherches, mais je pense que ça ne doit pas être quelque chose de très avancé? Comment obtenir en VBA un résultat équivalent au fait de fermer / ouvrir le tableau?

Une solution acceptable éventuellement serait aussi une procédure en workbook open() qui ferait ce rafraichissement en boucle par exemple 1x toutes les x heures ou minutes, ça ferait le travail aussi, mais je me heurte au même problème : je ne trouve pas de fonctionnalité qui semble capable de faire ça.
 

Dégé59

XLDnaute Nouveau
Bonjour TooFatBoy et Shinozak, et merci pour votre retour!

Si j'ai bien compris, il faut mettre cette ligne seule là où j'ai mis le commentaire "ajouter le code..." ?

Si c'est bien le cas:

Shinozak : je n'ai pas l'impression que cela ait le moindre effet quand je lance la procédure. En tout cas rien de plus ne se passe, et pas de màj liaison.

TooFatBoy : avec ma feuille protégée (verrouillée), j'ai un message d'erreur qui me dit que je ne peux pas utiliser cette procédure sur une feuille verrouillée, et quand je retente une fois déverrouillée, j'ai un message d'erreur "erreur de compilation".

Il y a quelque chose que j'ai mal compris, ou bien ce n'est juste pas la bonne solution?

Pour info, si je clique sur "Actualiser tout" dans Liaisons de classeur, mes liaisons se mettent bien à jour, donc pas de soucis de ce côté.
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 087
Messages
2 116 083
Membres
112 655
dernier inscrit
fannycordi