IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Repérer les modifications appliquées lors d'un ThisWorkbook.UpdateLink


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut Repérer les modifications appliquées lors d'un ThisWorkbook.UpdateLink
    Bonjour à tous,

    Je souhaiterais repérer les changements des valeurs des cellules d'une feuille lors de l'utilisation de ThisWorkbook.UpdateLink.
    L'événement Worksheet_Change n'est pas déclenché lorsque UpdateLink modifie une cellule.
    Et la propriété ThisWorkbook.Saved passe toujours à False, même lorsque aucune cellule n'est modifiée.

    Quelqu'un aurait-il une piste à me proposer ?

    Un grand merci à ceux qui me liront

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Quelqu'un aurait-il une piste à me proposer ?
    Oui, ça va va pas te plaire :
    - Dupliquer le classeur (ou seulement la partie concernée)
    - Mettre à jour les liaisons
    - Comparer avec le duplicata.

  3. #3
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Merci pour votre réponse.
    Il s'agit en effet d'une solution qui fonctionnera forcément.

    Mais sa gourmandise en termes de ressources me rebute quelque peu, comme vous l'aviez anticipé

    Le classeur étant amené à évoluer au cours du temps, sauriez-vous s'il est possible d'identifier dynamiquement les zones comportant des liaisons (cela permettrait au moins de ne copier que les parties susceptibles d'être affectées par UpdateLink) ?
    Une précision : j'aimerais faire cela sans passer par une recherche sur les formules contenues dans les celulles...

    Cordialement

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Une précision : j'aimerais faire cela sans passer par une recherche sur les formules contenues dans les celulles...
    C'est la solution que j'utilise pour trouver les liaisons Excel, mais elle ne permet pas d'identifier les cibles DDE ou OLE !

    Si le classeur n'évolue pas en permanence, tu peux les mémoriser dans une feuille,il n'est pas nécessaire de les chercher à chaque fois.

  5. #5
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    C'est noté.
    Je vais chercher une autre voie, quitte à me passer totalement de la fonctionnalité que je voulais initialement implémenter.

    Encore merci pour le temps que vous m'avez accordé.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    si ton but est juste de savoir si des maj ont pu avoir lieu et que le détail t'importe peu, tu pourrais te faire une table des date-heure de modification des fichiers externes.
    eric

  7. #7
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour eriiic,

    J'utilise déjà partiellement cette solution, pour la mise à jour de cellules qui utilisent la fonction INDIRECT (qui ne sont donc pas mises à jour automatiquement sur utilisation de UpdateLink).
    Comme il est nécessaire, pour assurer la cohérence de ces cellules particulières de mon classeur principal, d'ouvrir les fichiers sources un par un et que cette opération est lourde, je stocke la date et l'heure à laquelle elle est réalisée puis force une sauvegarde.
    J'ai ensuite la possibilité de comparer la date/heure stockée avec les dates de dernière modification des fichiers sources pour savoir si je suis à jour.

    Mais dans le cas des cellules qui n'utilisent pas INDIRECT, j'ai jugé cette méthode peu adaptée.
    En effet, mon but est uniquement de gérer correctement la propriété Saved de mon classeur principal, pour éviter que l'utilisateur ne soit sollicité pour une sauvegarde lorsque cela n'est pas nécessaire.
    Comme l'utilisation de UpdateLink est peu gourmande en temps de calcul, j'estime préférable de faire cette mise à jour à chaque ouverture du classeur principal et de faire croire à Excel que rien n'y a été modifié. A chaque nouvelle ouverture, UpdateLink se déclenchera et le fichier sera de toute façon à jour.

    Je précise que le nombre de mes fichiers sources peut varier dans le temps, ce qui rendrait finalement plus compliquée la tenue à jour d'une table en comparaison avec la solution, certes peu élégante mais somme toute efficace, d'une mise à jour des liens à chaque ouverture.
    (hmmm, j'ai un sérieux doute sur la limpidité de mes explications, mais je ne vois pas comment présenter ça plus clairement ).

    Quoi qu'il en soit, merci pour ton idée qui, sur la base des informations parcellaires que j'avais fournies initialement, est excellente !

    Bons développements à tous les utilisateurs de ce forum qui m'aura décidément beaucoup aidé et reste une source intarissable de connaissances et d'inspirations.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Peut-être qu'avec un peu de chance un Private Sub Workbook_SheetCalculate(ByVal Sh As Object) ne sera pas déclenché si mise à jour nulle (?)

  9. #9
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    J'avoue que je n'avais pas essayé cela.
    Malheureusement rien n'y fait

    Je viens de tester cet événement, ainsi que quelques autres (Worksheet_Calculate, Workbook_SheetChange, Workbook_Sync), mais aucun ne me permets de discriminer les cas où une modification intervient de ceux où rien ne change.

    Merci encore.

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    En effet, mon but est uniquement de gérer correctement la propriété Saved de mon classeur principal, pour éviter que l'utilisateur ne soit sollicité pour une sauvegarde lorsque cela n'est pas nécessaire.
    Comme l'utilisation de UpdateLink est peu gourmande en temps de calcul, j'estime préférable de faire cette mise à jour à chaque ouverture du classeur principal et de faire croire à Excel que rien n'y a été modifié. A chaque nouvelle ouverture, UpdateLink se déclenchera et le fichier sera de toute façon à jour.
    Pourquoi ne pas simplement l'enregistrer à ce moment là (avant de donner la main à l'utilisateur) ?

Discussions similaires

  1. Appliquer les modifications sur serveur
    Par me-to-you93 dans le forum Ruby on Rails
    Réponses: 8
    Dernier message: 29/07/2009, 04h37
  2. les modifications ne sont pas appliquées sur la table
    Par tomy_libre dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/06/2009, 11h07
  3. Réponses: 4
    Dernier message: 17/09/2008, 15h12
  4. repérer les modifications aprés une action
    Par yazid308 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/09/2007, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo