Compatibilité Office 2016/2021

Mistral_13200 Messages postés 649 Statut Membre -  
cousinhub29 Messages postés 1113 Date d'inscription   Statut Membre Dernière intervention   -

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. luckydu43 Messages postés 4497 Date d'inscription   Statut Membre Dernière intervention   1 177
     

    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
  2. cousinhub29 Messages postés 1113 Date d'inscription   Statut Membre Dernière intervention   383
     

    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. luckydu43 Messages postés 4497 Date d'inscription   Statut Membre Dernière intervention   1 177
       

      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
      1. cousinhub29 Messages postés 1113 Date d'inscription   Statut Membre Dernière intervention   383 > luckydu43 Messages postés 4497 Date d'inscription   Statut Membre Dernière intervention  
         

        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
  3. Mistral_13200 Messages postés 649 Statut Membre 4
     

    Merci à tous pour vos réponses.

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

    Cordialement.

    Mistral

    0