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

VBA Access Discussion :

Erreur sur GetOpenFileName [AC-97]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 133
    Points : 57
    Points
    57
    Par défaut Erreur sur GetOpenFileName
    Bonjour à tous

    Suite à pb Office sur le PC serveur, j'ai du recharger une image système antérieure datant de "seulement" 2 mois.

    Windows 10 a ensuite effectué quelques mises à jour.

    Du coup, au lancement de mon application ACC97 (Gestion commerciale), une erreur de compilation apparaît sur cette ligne du module "Get_fichier"qui est surlignée sur le debug:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                       "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    Tout marchait parfaitement bien il y a 2 jours, avant le chargement de cette image ...

    Peut-être que la mise à jour windows a affectée une bibliothèque ou référence VisualBasic ... mais je ne sais pas dans quelle direction chercher

    je précise que mes connaissances en VBA sont basiques

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 664
    Points : 34 371
    Points
    34 371
    Par défaut
    Bonjour,

    en quelle version de windows as-tu évolué ? 32/64 bits ?

    De ce que je lis, je crois voir une histoire de 64bits qui s'immisce dans ton code.

    Tu peux lire ceci qui donne l'exemple exact de ton cas de figure :

    https://arkham46.developpez.com/arti...a64bits/#LIV-A

  3. #3
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 133
    Points : 57
    Points
    57
    Par défaut
    Bonjour et merci pour ton aide.

    Je n'ai évolué vers rien de spécial.

    > Je suis en Windows 10Pro x64. J'avais ACC97 pour ma gestion et Word + Excel 2007. Tout fonctionne bien depuis des années
    > J'ai un image système de référence datant de Novembre 2019
    > J'ai voulu changer Word+Excel 2007 pour Word+Excel 2016 sans changer mon Acces 97 : Catastrophe ... des erreurs dans tout le code
    > Du coup, j'ai rechargé l'image de Nov 2019 avec mon office 2007 32bits + Access 97 32bits, ça fonctionne, sauf cette erreur sur ce module

    Merci pour le lien, mais il parle en effet de version d'office 64bits : je ne suis pas concerné

    Et je ne vois pas d'API spéciale à vérifier/activer pour cette fonction GetOpenFileName ....

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 664
    Points : 34 371
    Points
    34 371
    Par défaut
    Je pense avoir vu juste, car tu nous dis
    Citation Envoyé par Fildelyon Voir le message

    > Je suis en Windows 10Pro x64.

    > Du coup, j'ai rechargé l'image de Nov 2019 avec mon office 2007 32bits + Access 97 32bits, ça fonctionne, sauf cette erreur sur ce module
    Peux tu ajouter le PtrSafe dans la ligne de déclaration, car ca semblerait suffire à résoudre ton cas

  5. #5
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 133
    Points : 57
    Points
    57
    Par défaut
    Merci ! je croise les doigts.

    je l'ai placé ci, mais erreur de compil (attendu: Sb ou Function) ... quelle erreur commets-je ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Compare Database
    Option Explicit
    
    ' Déclaration de l'API
    Private Declare 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 Long
    
     ' Structure du fichier
    Private Type OPENFILENAME

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 664
    Points : 34 371
    Points
    34 371
    Par défaut
    Essaie avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Déclaration de l'API
    #If VBA7 Then
    Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _
       Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    #Else
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
       Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    #End If
    Que des lignes soient rouges ce n'Est pas nécessairement bloquant pour rouler le code ensuite

  7. #7
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 133
    Points : 57
    Points
    57
    Par défaut
    Et bien il semblerait que tu m'aies enlevé une belle épine du pied ...

    1000 mercis et bravo pour ta disponibilité, ton aide et tes compétences

    Amicales salutations

  8. #8
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 133
    Points : 57
    Points
    57
    Par défaut
    Re bonjour

    En passant par une autre fonction publique (difficile de tout tester en même temps), j'ai à nouveau une erreur de compil (Sub ou Function non définie) ...

    Ce doit être la même cause que mes messages ci-dessus .... Merci de votre aide à nouveau.

    @Jean-Philippe : j'aurais du te demander des éclaircissements sur tes réponses d'hier : ça m'aurait permis de gratter seul avant de poster cette demande ... désolé :

    la partie rouge est surligné en jaune sur mon code, et la partie bleue est surligné en bleu. Du coup, je joins tout mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Public Function OuvrirUnFichier(Handle As Long, _
                                    titre As String, _
                                    TypeRetour As Byte, _
                                    Optional TitreFiltre As String, _
                                    Optional TypeFichier As String, _
                                    Optional RepParDefaut As String) As String
     ' OuvrirUnFichier est la fonction à utiliser dans votre formulaire pour ouvrir _
     ' la boîte de dialogue de sélection d'un fichier.
     ' Explication des paramètres
        ' Handle = le handle de la fenêtre
        ' Titre = titre de la boîte de dialogue
        ' TypeRetour (définit la valeur, de type String, renvoyée par la fonction)
            ' 1 = chemin complet + nom du fichier
            ' 2 = nom fichier seulement
        ' TitreFiltre = titre du filtre
            ' Exemple: fichier Access
            ' N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        ' TypeFichier = extention du fichier (sans le .)
            ' Exemple: MDB
            ' N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
        ' RepParDefaut = répertoire d'ouverture par défaut
            ' Exemple: C:\windows\system32
            ' Si vous laissez l'argument vide, par défaut il se place dans le répertoire de votre application
    
    Dim StructFile As OPENFILENAME
    Dim sFiltre As String
    
     ' Construction du filtre en fonction des arguments spécifiés
    If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
      sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
    End If
    sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)
    
    
     ' Configuration de la boîte de dialogue
      With StructFile
        .lStructSize = Len(StructFile) ' Initialisation de la grosseur de la structure
        .hwndOwner = Handle ' Identification du handle de la fenêtre
        .lpstrFilter = sFiltre ' Application du filtre
        .lpstrFile = String$(254, vbNullChar) ' Initialisation du fichier '0' x 254
        .nMaxFile = 254 ' Taille maximale du fichier
        .lpstrFileTitle = String$(254, vbNullChar) ' Initialisation du nom du fichier '0' x 254
        .nMaxFileTitle = 254  ' Taille maximale du nom du fichier
        .lpstrTitle = titre ' Titre de la boîte de dialogue
        .flags = OFN_HIDEREADONLY  ' Option de la boite de dialogue
        If ((IsNull(RepParDefaut)) Or (RepParDefaut = "")) Then
            RepParDefaut = CurrentDb.Name
            PathStripPath (RepParDefaut)
            .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid$(RepParDefaut, 1, _
    InStr(1, RepParDefaut, vbNullChar) - 1)))
            Else: .lpstrInitialDir = RepParDefaut
        End If
      End With
       
    If (GetOpenFileName(StructFile)) Then ' Si un fichier est sélectionné
        Select Case TypeRetour
          Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1))
          Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1))
        End Select
      End If
    
    End Function
    Merci d'avance

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 664
    Points : 34 371
    Points
    34 371
    Par défaut
    Salut,

    ca va se jouer dans la 2e partie du tuto je pense, avec les PtrLong
    https://arkham46.developpez.com/arti...a64bits/#LIV-B

  10. #10
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 133
    Points : 57
    Points
    57
    Par défaut
    Merci : je teste

    L'hypothèse est bien que du code 64bits est à présent nécessaire, alors que je n'ai rien changé à la version d'il y a 2 mois ?

    Punaise ... je risque d'être embêté à tous les coins de rue (ou de code plutôt)

    Merci

  11. #11
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2015
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2015
    Messages : 133
    Points : 57
    Points
    57
    Par défaut
    Bonjour Jean-Philippe

    Clairement, mes problèmes apparaissent à la dernière mise à jour de Windows .... J'ai fait le test
    Je note qu'avant cette dernière mise à jour, seul 'Microsoft Visual C++ redistribuable 2008 x64' est présent, et qu'après, apparaissent 'Microsoft Visual C++ redistribuable 2015-19 x64' et 'Microsoft Visual C++ redistribuable 2015-19 x86'.
    Je les ai désinstallé mais ça ne change rien .... Bref :

    Citation Envoyé par Jean-Philippe André Voir le message
    Salut,

    ca va se jouer dans la 2e partie du tuto je pense, avec les PtrLong
    https://arkham46.developpez.com/arti...a64bits/#LIV-B
    Je ne suis pas expert et comme j'ai du mal à comprendre le code qui me pose problème, je n'arrive pas à adapter ce que je voir sur le tuto.

    J'ai bien compris qu'il fallait tester la présence de VB7 pour déclarer du Long ou PtrLong, mais je ne vois pas du tout où placer tout ça ...

    Pourrais-je bénéficier d'une aide supplémentaire ?

    Merci d'avance.

    MaJ :
    =====================
    Ca semble réglé en recopiant le code du tuto
    =====================

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur sur GetOpenFileName en API win32 sous codeblocks
    Par anezvox1 dans le forum Windows
    Réponses: 8
    Dernier message: 15/09/2014, 23h02
  2. [VBS] Erreur sur "AddWindowsPrinterConnection"
    Par Admin dans le forum VBScript
    Réponses: 5
    Dernier message: 27/03/2004, 17h15
  3. Erreur sur serveur lié
    Par k-lendos dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/03/2004, 16h21
  4. []Erreur sur second emploi collection binding
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/03/2004, 19h02
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 12h16

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