Compatibilité Office 2016/2021

Bonjour à tous,

Dernièrement j’ai acheté Office Pro 2021 en 64 bits.Hier j’ai réouvert une base Access créé, l’année dernière avec Office 2016. Dès l’ouverture je suis en défaut sur les lignes de code suivante :


'Déclaration de l'API
Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                   "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Je suppose qu’il s’agit d’un problème de compatibilité 32/64 bits entre les deux versions.

Comment faire pour régler le problème.

Merci d’avance pour votre aide.

Mistral


Windows / Edge 130.0.0.0

4 réponses

  1. Bonjour,

    Vous avez bien identifié la cause, il manque le mot-clé PtrSafe une fois en VBA7.

    Private Declare PtrSafe Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
    Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As LongPtr

    Notez que j'ai utilisé un LongPtr.

    Si ça pète plus loin dans votre code, la compatibilité doit aussi être adaptée sur les handle (marqueurs) et descripteurs en remplaçant le type par LongPtr, un exemple :

    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As LongPtr
        hInstance As LongPtr
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        Flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As LongPtr
        lpfnHook As LongPtr
        lpTemplateName As String
    End Type
    

    Tenez au jus !


    0
    1. Bonjour,

      Pourquoi utiliser du VBA, alors que Power Query peut très bien le faire, tout seul.

      Et en plus, on peut transformer, modifier, travailler avant l'import dans Excel...

      Surtout avec 2021.

      Bonne journée


      0
      1. Bonjour,

        Question de courbe d'apprentissage, tout réapprendre demande du temps. 

        Tant que le VBA reste bien exploité par la suite Office, d'autant que ce langage évolue, je ne vois moi-même pas de raison de réapprendre pour tout réécrire certainement moins bien dans l'immédiat

        Et si c'est effectivement un sujet, pour garantir une bonne transition il convient de garder exécutables les précédents scripts !

        0
      2. @luckydu43

        Bonjour,

        A plus de 60 ans, je n'ai pas hésité, et j'ai tout appris, le code M n'ayant rien à voir avec le VBA (que j'utilisais depuis près de 30 ans).

        Je trouve (mais cela n'est qu'un avis personnel) que PQ offre plus de souplesse et surtout de robustesse, notamment pour ce type de besoin.

        Mais surtout, l'utilisateur est vraiment libre de ses choix. S'il désire opter pour cette option, il trouvera toute l'aide qu'il souhaite.

        Bonne soirée

        0
    2. Merci à tous pour vos réponses.

      Je regarde ça et je reviens vers vous si besoin.

      Cordialement.

      Mistral

      0