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 :
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.
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.