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 d'automation sur excel 2010


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut Problème d'automation sur excel 2010
    Bonjour à tous,

    Dans un module général j'ai cette procédure que j'appelle par Call depuis le code dans des userform en renseignant le nom de la feuille concernée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Sub affiche(nom)
        Application.ScreenUpdating = False
        With ThisWorkbook.Sheets(nom)
            If .Visible <> xlSheetVisible Then .Visible = xlSheetVisible
            .Activate
            .Range("A1").Select
        End With
        Application.ScreenUpdating = True
    End Sub
    Cette procédure fonctionne parfaitement sur excel 2013 sur tous les PC mais sur 2010 elle produit très souvent une erreur d'automation qui plante excel irrémédiablement.
    "Un objet s'est déconnecté" est parfois affiché : je ne vois pas ce qui cloche.
    Microsoft signale sur 2003 qu'il faut libérer les objets mais je ne vois pas ce que je peux libérer.

    Merci d'avance à ceux qui sauront m'expliquer le souci.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Ton erreur d'automation est ailleurs (aucune automation dans le code que tu montres).
    Au passage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Visible <> xlSheetVisible Then .Visible = xlSheetVisible
    n'est jamais rien d'autre que :

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    sur quelle ligne exactement se produit l'erreur ?
    il est opportun de typer ton paramètre "nom" (nom As String) et d'être sûr que c'est bien un string que tu envoies (et non un objet feuille)
    si tu ne travailles que sur des feuilles de calcul avec cette procédure (pas de feuille graphique), privilégie l'objet Worksheets plutôt que l'objet Sheets

    est-ce que les modules des feuilles concernées par cette procédure possèdent du code ? Si oui, il faut les montrer

    peut-on voir l'un de tes modules Userform, histoire de comprendre comment tu appelles ta procédure, et les traitement pré/post appel de cette procédure publique ?

  4. #4
    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,

    Tu ne fermerais pas ton UF tout de suite après cet appel des fois ?
    Peut-être qu'excel 2010 (ou son PC) plus rapide arrive à le fermer avant d'avoir fini cette proc.
    Si c'est le cas essayer d'ajouter une petite tempo avant cette fermeture.
    eric

  5. #5
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir à tous et merci de vous être penché sur mon problème.

    Citation Envoyé par unparia Voir le message
    Au passage : If .Visible <> xlSheetVisible Then .Visible = xlSheetVisible n'est jamais rien d'autre que : .visible = True
    Ok c'est d'accord mais j'ai utilisé ce test car à l'open je masque les 40 feuilles et avec le test si les feuilles ont été sauvées masquées c'est nettement plus rapide.
    Ce n'est pas une faute d'utiliser la bonne variable VBA ?

    Citation Envoyé par unparia Voir le message
    Ton erreur d'automation est ailleurs (aucune automation dans le code que tu montres).
    Citation Envoyé par joe.levrai Voir le message
    sur quelle ligne exactement se produit l'erreur ?
    Et pourtant l'erreur se produit bien là. En principe le debug n'affiche aucune ligne car excel est planté mais en déroulant en pas à pas c'est .activate qui plante.

    Citation Envoyé par joe.levrai Voir le message
    il est opportun de typer ton paramètre "nom" (nom As String) et d'être sûr que c'est bien un string que tu envoies (et non un objet feuille)
    si tu ne travailles que sur des feuilles de calcul avec cette procédure (pas de feuille graphique), privilégie l'objet Worksheets plutôt que l'objet Sheets
    C'est parfaitement vrai effectivement et j'ai corrigé mais sans résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub affiche(nom As String)
        Application.ScreenUpdating = False
        With ThisWorkbook.Worksheets(nom)
            If .Visible <> xlSheetVisible Then .Visible = xlSheetVisible
            Application.Wait Now + TimeValue("0:00:02")
            .Activate
            .Range("A1").Select
        End With
        Application.ScreenUpdating = True
    End Sub
    Citation Envoyé par joe.levrai Voir le message
    est-ce que les modules des feuilles concernées par cette procédure possèdent du code ?
    peut-on voir l'un de tes modules Userform, histoire de comprendre comment tu appelles ta procédure,
    et les traitementde cette procédure publique ?
    Il y a dans l'open le masquage sus-mentionné, puis un seul module pour lancer les formulaires, et masquer ou afficher les onglets feuilles, aucun code dans les feuilles et les formulaires sont assez simples en permettant la saisie des données.
    L'appel est basique et aucun traitement "pré/post appel" : le seul but est d'avoir la feuille concernée sous les yeux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub btndonées_Click()
        Call affiche("Ma base de données")
    End Sub
    Citation Envoyé par eriiic Voir le message
    Tu ne fermerais pas ton UF tout de suite après cet appel des fois ?
    Peut-être qu'excel 2010 (ou son PC) plus rapide arrive à le fermer avant d'avoir fini cette proc.
    Si c'est le cas essayer d'ajouter une petite tempo avant cette fermeture.
    Bien vu mais pas de fermeture comme dit ci-dessus. Les PC testés ont 2010 et 2013 et tout fonctionne sur 2013 et plante sur 2010.
    J'ai testé ta tempo comme tu peux le voir avant l'instruction de plantage mais c'est de même.

    J'ai aussi essayé de mettre directement la procédure dans le clic du bouton mais le résultat est identique.

    La feuille est bien visible lorsque l'activate plante : c'est un mystère pour moi et j'espère que vous serez plus inspirés.

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Prise au pied de la lettre, ton message d'erreur dit que la connection OLE s'est rompue à quelque part en chemin.

    Ceci dit, ce n'est pas le "bon" message pour ce qui va suivre, mais cela arrive des fois que le "mauvais" message d'erreur sorte au mauvais moment. De toutes façons le pire qui peut arriver c'est que ce ne soit pas cela:

    as-tu jeté un œil dans outils-références sur le "malade" pour vérifier s'il n'y a pas des références manquantes ou en conflit ?

    Ou bien, y a-t-il un Excel à 32 bits qui essaie de mâter un Excel à 64 bits, ou l'inverse ?

  7. #7
    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
    La tempo je la voyais dans l'autre procédure, celle qui ferme l'UF pour la retarder. Mais si tu dis qu'il ne se ferme pas dans la foulée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub affiche(nom)
    Pourquoi Public ?
    Si c'est parce qu'elle est dans un module de classe (Feuil ou autre) tu peux tester en la mettant dans un module Standard ?

    Lors de l'erreur examine Err dans la fenêtre espion des fois que tu aies plus de précisions, il y a beaucoup de codes erreur Automation (+ de 300)

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour à tous,

    Citation Envoyé par clementmarcotte Voir le message
    as-tu jeté un œil dans outils-références sur le "malade" pour vérifier s'il n'y a pas des références manquantes ou en conflit ?

    Ou bien, y a-t-il un Excel à 32 bits qui essaie de mâter un Excel à 64 bits, ou l'inverse ?
    Les références sont identiques sur les versions 2010 et les 2013 qui, je le rappelle fonctionnent parfaitement.
    Nom : refs.jpg
Affichages : 430
Taille : 41,3 Ko
    Citation Envoyé par eriiic Voir le message
    Pourquoi Public ?
    Si c'est parce qu'elle est dans un module de classe (Feuil ou autre) tu peux tester en la mettant dans un module Standard ?
    Cela ne change rien et c'est normal car cela plante aussi quand je mets le code, comme signalé au-dessus dans le clic du bouton.

    Citation Envoyé par eriiic Voir le message
    Lors de l'erreur examine Err dans la fenêtre espion des fois que tu aies plus de précisions, il y a beaucoup de codes erreur Automation (+ de 300)
    Là, je voudrais bien mais c'est totalement impossible car excel n'est plus là il est parti pour se récupérer.

Discussions similaires

  1. [XL-2010] Problème avec 2 courbes (indicateurs) sur Excel 2010
    Par toms25 dans le forum Excel
    Réponses: 0
    Dernier message: 15/07/2015, 16h38
  2. [Débutant] Problème de représentation graphique sur Excel 2010
    Par Tuanou dans le forum VB.NET
    Réponses: 0
    Dernier message: 21/07/2011, 10h14
  3. Problème export requête sur excel
    Par mbar dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/02/2009, 12h18
  4. automation sur Excel
    Par NATOU2 dans le forum Runtime
    Réponses: 10
    Dernier message: 29/01/2009, 12h09
  5. Problème de filtre sur excel
    Par Kankrela dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/09/2008, 15h31

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