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 :

Problème sur liaisons : est-ce lié au multi-thread ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut Problème sur liaisons : est-ce lié au multi-thread ?
    Bonjour,

    J'ai un classeur qui me sert à faire des recherches et des statistiques à partir d'une base sur un autre classeur excel.
    Pour cela, je fonctionne avec les 2 classeurs ouverts et à l'ouverture de mon classeur, je vérifies que la base est ouverte, sinon je l'ouvres, comme vous pouvez le voir dans le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_Open()
        On Error Resume Next
        Workbooks("Base.xlsm").Activate
        If Err.Number <> 0 Then
            Err.Clear
            Application.EnableEvents = False
            Workbooks.Open ("D:\fichiers\Base.xlsm")
            Application.EnableEvents = True
        End If
        On Error GoTo 0
        ThisWorkbook.Activate
        ThisWorkbook.UpdateLinks = xlUpdateLinksAlways
    End Sub
    Tout ce passait bien jusque là mais le transfert des fonctionnalités sur un nouveau PC quad core plus rapide, fait que maintenant j'ai un message, si la macro ouvre la base, sur l'impossibilité de mettre à jour les liaisons qui concernent les statistiques effectuées sur la base.
    En faisant "Continuer" sur le message, l'application fonctionne correctement, mais y-a-t-il un moyen de supprimer ce message ?
    Merci d'avance à ceux qui connaissent la solution.

  2. #2
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Une petite recherche sur le net t'aurais permis de trouver ceci :
    https://support.microsoft.com/fr-fr/kb/826921

    Sur le forum dans la FAQ :
    http://excel.developpez.com/faq/?pag...#AskUpdateLink

    Voir même en cherchant dans l'aide VBA
    C'est en creusant qu'on fait des trous

  3. #3
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour et merci pour ta réponse,

    J'ai dû mal m'exprimer car je ne cherche pas à empêcher la mise à jour des liens, comme tes pages le préconisent, car j'en ai besoin pour mes statistiques.

  4. #4
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Je t'ai donné toute les options envisageables

    Citation Envoyé par Al__22 Voir le message
    Nom : Capture.JPG
Affichages : 266
Taille : 64,5 Ko
    C'est en creusant qu'on fait des trous

  5. #5
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,

    Citation Envoyé par Al__22 Voir le message
    Je t'ai donné toute les options envisageables
    Merci d'insister, mais tu n'as pas lu entièrement ma demande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.UpdateLinks = xlUpdateLinksAlways
    Dans mon code je demande la mise à jour des liaisons et cela fonctionne parfaitement,
    sauf avec une machine plus puissante qui n'ouvre pas la boîte de dialogue,
    mais signale une erreur sur les mises à jour qui d'ailleurs n'existe pas si l'on clique sur "Continuer".

    Sur mon ancien PC je n'ai aucune boite de dialogue et tout continue de fonctionner parfaitement,
    ce n'est donc pas un problème d'options mais probablement lié au multi-threads du nouveau processeur.
    Là je n'ai rien trouvé sur ce sujet malgré mes recherches.

  6. #6
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Si j'ai lu ta demande mais n'ayant pas l'erreur sous les yeux je peux pas deviner de quoi tu me parle grâce au saint esprit. Donc si ton erreur continue malgré ce que je t'ai donné (j'espère au moins que tu as essayé) :
    Peux-tu mettre une image de ton erreur exacte merci

    D'ailleurs essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
    C'est en creusant qu'on fait des trous

  7. #7
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,
    Citation Envoyé par Al__22 Voir le message
    D'ailleurs essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
    Je ne vois pas ce que tu veux tester car les liaisons fonctionnent parfaitement avec le code que j'ai listé, mais l'instruction plante avec erreur 1004.

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Rien à voir avec un multitrhreading

    Commence déjà ainsi (je ne me fie personnellement pas à VBA pour décider qui est thisworkbook) , d'une part, et ai d'autre part l'habititude de gérer autrement les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim wb1 As Workbook, wb2 As Workbook
        Set wb1 = ThisWorkbook
        On Error Resume Next
        Set wb2 = Workbooks("Base.xlsm")
        If Err = 9 Then ' --->> si n'est pas dans la collection workbooks
           Set wb2 = Workbooks.Open("D:\fichiers\Base.xlsm")
        End If
        If wb2 Is Nothing Then MsgBox Err.Description: Exit Sub ' --- continue a être absent ? je veux savoir pourquoi et quitte
        On Error GoTo 0
        wb1.Activate ' --- je suis ainsi certain de revenir au premier
    Tu me trouveras peut-être trop précautionneux, mais je suis ainsi fait.

    Edit : et si cela ne suffit pas, alors que wb2 existe bien, c'est que son chargement est peut-être long et qu'il met du temps à figurer dans la collection workbooks. J'ajouterais alors un Doevents pour laisser "respirer" (avant le activate et la suite de ton code).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour unparia,

    Citation Envoyé par unparia Voir le message
    Tu me trouveras peut-être trop précautionneux, mais je suis ainsi fait.
    Pas de souci pour cela il vaut toujours mieux être explicite !
    J'ai essayé en rajoutant cette ligne pour mettre à jour les liaisons car le paramètre général n'est pas positionné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb1.UpdateLinks = xlUpdateLinksAlways
    et le message "nous ne parvenons pas à mettre à jour des liaisons de votre classeur" et toujours présent,
    alors qu'elles sont pourtant effectives.
    Citation Envoyé par unparia Voir le message
    c'est que son chargement est peut-être long et qu'il met du temps à figurer dans la collection workbooks. J'ajouterais alors un Doevents pour laisser "respirer" .
    Le problème est au contraire que tout est trop rapide et j'avais effectivement essayé DoEvents mais sans résultat.
    Sur un PC plus "lent" a priori, cela fonctionne sans souci, ta version comme la mienne.

    Merci en tout cas de te pencher sur mon problème.

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je ne vois toujours pas d'explication multithreading
    Que se passe-t-il (juste pour voir), avec ce seul code, et sans l'autre classeur encore ouvert, ni aucun autre classeur ouvert (avec ton seul classeur de départ, donc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim wb1 As Workbook
        Set wb1 = ThisWorkbook
        MsgBox wb1.UpdateLinks
        wb1.UpdateLinks = xlUpdateLinksAlways
    ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #11
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par unparia Voir le message
    Que se passe-t-il (juste pour voir)
    Il ne se passe rien à part le message à 3

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Voilà donc un premier test:
    Un second, maintenant :
    - tu t'assures de ce qu'aucun autre classeur n'est ouvert et tu lances maintenant le code que j'ai montré plus haut
    que se passe-t-il ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  13. #13
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir unparia

    Citation Envoyé par unparia Voir le message
    tu lances maintenant le code que j'ai montré plus haut que se passe-t-il ?
    Avec ce test, j'ai le même résultat qu'avec mon code.

    Citation Envoyé par unparia Voir le message
    Rien à voir avec un multitrhreading
    Cependant, tu m'interpelles avec ta phrase et tu as sans doute raison car l'autre micro même moins puissant est multi-thread.

    J'ai donc vérifié plus en détail et je me suis aperçu que mon classeur stat prenait certes la majorité des informations sur la base ouverte,
    mais aussi sur un autre classeur situé sur un serveur.
    La plus grande rapidité du PC, ne serait-elle pas gênée par la latence d'accès au serveur ?

    En tout cas merci de ton implication pour résoudre ce petit souci.

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    VBA n'est pas multi-thread, et je ne pense pas que ça ait évolué avec les dernières versions.
    Mais ça ne change rien à ta piste (au contraire), un core récent plus rapide déphase peut-être les opérations.
    eric

  15. #15
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    troisième test :
    tu exécutes la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    activeworkbook.UpdateLinks = xlUpdateLinksAlways
    comme première instruction dans le workbook_open et la supprimes là où elle était
    Que se passe-t-il ainsi ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #16
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour à tous,

    Citation Envoyé par eriiic Voir le message
    VBA n'est pas multi-thread, et je ne pense pas que ça ait évolué avec les dernières versions.
    Mais les mises à jour de liens sont faites par excel.
    Citation Envoyé par unparia Voir le message
    troisième test : ...Que se passe-t-il ainsi ?
    Cela n'empêche pas le message d'erreur intempestif car les mises à jour se font tout de même.

  17. #17
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    On Error Resume Next
    ThisWorkbook.UpdateLink Name:=ThisWorkbook.LinkSources
    ActiveWorkbook.RefreshAll
    On Error GoTo 0
    Cordialement

    Docmarti.

  18. #18
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir à tous,

    Citation Envoyé par Docmarti Voir le message
    Essaie ceci :
    Merci de la suggestion mais cela a déjà été proposé au message 6 et cela donne erreur 1004 (message 7)

  19. #19
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Je veux dire de mettre
    avant ThisWorkbook.UpdateLink.


    On Error Resume Next supprime la plupart des messages d'erreurs.
    Cordialement

    Docmarti.

  20. #20
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,

    Citation Envoyé par Docmarti Voir le message
    On Error Resume Next supprime la plupart des messages d'erreurs.
    Tout à fait d'accord mais comme le code ne s'exécute pas (erreur 1004), quel est l'intérêt ?

Discussions similaires

  1. Problème de liaison de donnée sur un datasource
    Par dubidon dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/06/2007, 16h05
  2. [Tableaux] Problème sur ouverture fichier txt
    Par yaum4444 dans le forum Langage
    Réponses: 7
    Dernier message: 15/12/2006, 15h10
  3. Problème d'ouverture d'un classeur Excel
    Par BM42 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 21/11/2006, 09h43
  4. [cr 9] Problème sur un état, groupement et liaisons entre les tables
    Par Maltus dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 15/09/2006, 09h45
  5. Réponses: 15
    Dernier message: 23/06/2006, 13h09

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