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 :

Ouvrir avec VBA un classeur qui a des déclarations d'API sans PtrSafe.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut Ouvrir avec VBA un classeur qui a des déclarations d'API sans PtrSafe.
    Bonjour à toutes et tous et merci de votre temps et de votre aide.

    Je travaille actuellement sur un classeur pour analyser des classeurs. J'y recherche des chemins d'accès. J'ai environ 200 classeurs à analyser.
    Noter que je peux juste lire les classeurs et pas les modifier.
    Mon code fonctionne bien mais dans un de mes classeurs j'ai des références à des API avec des signatures qui ne comportent pas de PtrSafe dans leurs instructions.
    J'ai le message
    Erreur de compilation

    Le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits ...
    Résultat des courses, quand j'arrive à ce classeur ma macro s'arrête net et je n'ai même pas l'option d'attraper l'erreur.

    À part éliminer (ou modifier) le classeur fautif de ma liste de traitement, quelqu'un connait-il un moyen d'ouvrir le classeur ET de continuer à exécuter ma macro d'analyse ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 573
    Par défaut
    Bonjour,
    Pour ce qui concerne les API voire les directives de compilation #If; mais ce n'est pas l'objet de ton poste !

    Si tu cherches à évaluer des données dans différents onglets d'un classeur fermé tu peux te rabattre sur power query ou ado

    Pour ce qui concerne ado ça ne fonctionne que sous Windows, pour power query je n'y ai pas accès de ma version Excel.

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    Hello,
    il faut mettre à jour les déclarations des API, si tu nous mets les déclarations du classeur qui te pose problème, on pourra certainement te les mettre à jour pour qu'elles soient compatibles 64 bits.
    Ami calmant, J.P

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 573
    Par défaut
    environ 200 classeurs à analyser.
    Il y a possiblement plusieurs fichiers implique et si j'ai bien compris notre ami voudrait s'affranchir de devoir les corriger un par un.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    Moi j'ai vu ça
    Citation Envoyé par marot_r Voir le message
    Mon code fonctionne bien mais dans un de mes classeurs j'ai des références à des API avec des signatures qui ne comportent pas de PtrSafe dans leurs instructions.

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 573
    Par défaut
    Citation Envoyé par marot_r Voir le message
    À part éliminer (ou modifier) le classeur fautif de ma liste de traitement, quelqu'un connait-il un moyen d'ouvrir le classeur ET de continuer à exécuter ma macro d'analyse ?
    A+
    Marot_r nous donnera des précisions mais je pense qu'il voulait s'affranchir du retraites des API ????

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    J'ai continué mon traitement et oui finalement il n'y a qu'un seul fichier concerné ... pour le moment. Mon inventaire est imparfait et certains fichiers n'ont simplement pas été traités.
    Et je ne peux pas modifier les fichiers, du moins ce n'est pas le mandat du projet.
    L'idée est de trouver les répertoires utilisés dans les formules, les PowerQuery, le code VBA, etc.
    Nous allons procéder à une changement d'arborescence de nos serveur et il y a BEAUCOUP de macros avec des chemins en dur un peu partout.

    Donc merci de ces pistes et idées mais vraiment il me faudrait un moyen pour qu'Excel ignore les déclarations des API.

    Et pour pimenter le tout j'ai des xls, xlsx, xlsm et xlsb dans mes fichiers.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    Hello,
    Citation Envoyé par marot_r Voir le message
    Donc merci de ces pistes et idées mais vraiment il me faudrait un moyen pour qu'Excel ignore les déclarations des API.
    Tu peux essayer d'utiliser la propriété Application.AutomationSecurity :
    Renvoie ou définit une constante MsoAutomationSecurity qui représente le mode de sécurité utilisé Microsoft Excel lors de l’ouverture de fichiers par programme. Lecture-écriture.
    Syntaxe
    expression. AutomationSecurity
    expression Une variable qui représente un objet Application.
    Remarques
    Cette propriété reçoit automatiquement la valeur msoAutomationSecurityLow au démarrage de l’application. Par conséquent, pour éviter le piratage de solutions s'appuyant uniquement sur le paramètre par défaut, il est conseillé d'attribuer à cette propriété la valeur msoAutomationSecurityLow après avoir ouvert un fichier par programme. De même, cette propriété doit être définie immédiatement avant et suivant l'ouverture d'un fichier par programme pour éviter toute action malveillante.

    MsoAutomationSecurity peut être une de ces constantes MsoAutomationSecurity:

    msoAutomationSecurityByUI. Utilise le paramètre de sécurité spécifié dans la boîte de dialogue Sécurité.
    msoAutomationSecurityForceDisable. Désactive toutes les macros de tous les fichiers ouverts par programme sans afficher d’alerte de sécurité.
    msoAutomationSecurityLow. Active toutes les macros. Correspond à la valeur par défaut au démarrage de l’application.
    exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub OuvrirClasseur()
        Dim secAutomation As MsoAutomationSecurity
        secAutomation = Application.AutomationSecurity
        Application.AutomationSecurity = msoAutomationSecurityForceDisable
        Workbooks.Open "D:\temp\ClasseurTest.xlsm"
        ActiveWorkbook.Close
        Application.AutomationSecurity = secAutomation
    End Sub
    Cet exemple montre comment capturer le paramétrage de la sécurité automation actuel, changer ce paramétrage pour désactiver des macros, ouvrir un classeur puis le fermer, réaffecter le paramétrage d'origine à la sécurité automation. Quand on exécute ce code en pas à pas quand on ouvre le classeur ClasseurTest on ne voit pas la partie VBA de ce classeur dans l'éditeur VBA.

    Ami calmant, J.P

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour jurassic pork.

    Merci de cette piste mais le problème est que j'ai besoin de voir le code VBA.
    Comme je l'ai dit j'ai pas mal de classeur avec des chemins en dur dans le code VBA.

    Donc en gros il faudrait dire à Excel : Ouvre le classeur et le code associé mais n'essaye pas de le compiler.
    Pas certain que ce soit possible.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 227
    Par défaut
    hello,
    tu trouveras ici : Tools to extract VBA Macro source code from MS Office Documents quelques outils pour extraire le code des macros des documents Office.
    Ami calmant, J.P

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/02/2021, 18h42
  2. [AC-2019] Requête avec somme et calcul qui dinne un message d'erreur sans conséquence.
    Par charlieda dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/01/2021, 18h01
  3. Réponses: 9
    Dernier message: 17/06/2015, 15h06
  4. Partager un classeur qui contient des macros
    Par rihab92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2015, 14h12
  5. [XL-2003] Pouvoir ouvrir des fichiers excel avec vba sans le faire planter
    Par perpitou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/12/2011, 15h52

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