VBA 32 bits / 64 Bits
Bonjour , j'ai un soucis sur l’exécution d'une macro avec des postes équipé de 64 Bits.
j'ai récupéré une macro sur un fichier développé par un ancien collaborateur , elle m'ouvre l'explorateur de fichier afin de me connecter à des fichiers Access.
je l'ai simplement modifiée afin qu'elle récupére les infos dans le bon onglet .
Elle fonctionne parfaitement sur mon poste équipé d'office 365 en 32 bits , et sur le seul autre poste de notre flotte également en 32 bits .
Lors de l'exécution sur des postes en 64 Bits , j'ai un soucis sur : .Refresh BackgroundQuery:=False
je tiens à préciser que je " bidouille " mais ne suis en aucuns cas capable d'analyser ce genre de probleme .
Voila 2 jours que je fais des recherches sur ce " .Refresh BackgroundQuery:=False " mais ne trouve rien qui pourrais m'aiguiller vu mon peu de connaissance en VBA .
C'est pourquoi j'en appel à vous .
Merci d'avance à ceux qui voudront bien prendre un peu de temps pour m'orienter ou corriger ce problème .
Merci d'avance
CDLT
Ci dessous la macro :
Dim DOSSIER_MDB As String
Sub Import()
Sheets("IMPORT").Select
Cells.Select
Range("O1").Activate
Selection.Clear
Application.ScreenUpdating = False
Dim Confirmation As Boolean
'Ouverture Dialogue Dossier
Confirmation = Application.FileDialog(msoFileDialogFolderPicker).Show
If Confirmation <> False Then
DOSSIER_MDB = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
ThisWorkbook.Worksheets("IMPORT").Activate
ThisWorkbook.Worksheets("IMPORT").Range("A2:AA10000").ClearContents
'Scanner Fichiers
Call TestListFilesInFolder
Call Nettoyage
End If
End Sub
'__________________________________________________________________________________
Sub TestListFilesInFolder() 'LANCEMENT CHOIX DU REPERTOIRE
Dim RootFolder$
' dossier à scanner
RootFolder = DOSSIER_MDB
If RootFolder = "" Then Exit Sub
ListFilesInFolder RootFolder, True
End Sub
'__________________________________________________________________________________
Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As Boolean) 'RECHERCHE DES FICHIERS
Dim CHEMIN_THEME_MDB As String
Dim LIGNE_IMPORT As Integer
Dim fso 'As Scripting.FileSystemObject
Dim SourceFolder 'As Scripting.Folder
Dim SubFolder 'As Scripting.Folder
Dim FileItem 'As Scripting.File
Dim r As Long
Set fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = fso.GetFolder(SourceFolderName)
For Each FileItem In SourceFolder.Files
Dim NOM_FICHIER As String
NOM_FICHIER = FileItem.Name
If Right(NOM_FICHIER, 3) = "mdb" Or Right(NOM_FICHIER, 3) = "MDB" Then
'Vérifie si le fichier est ouvert
If VerifOuvertureClasseur(FileItem.ParentFolder & "\" & FileItem.Name) Then
Else
LIGNE_IMPORT = Cells(Rows.Count, 1).End(xlUp).Row + 1
CHEMIN_THEME_MDB = FileItem.ParentFolder & "\" & FileItem.Name
'Importation de ETEQUIP
ThisWorkbook.Worksheets("IMPORT").Select
With Sheets("IMPORT").QueryTables.Add(Connection:=Array("OLEDB;Provider=Microsoft.jet.OLEDB.4.0;" & "Data source=" & CHEMIN_THEME_MDB), Destination:=Sheets("IMPORT").Cells(LIGNE_IMPORT, 1))
.CommandType = xlCmdTable
.CommandText = Array("ObsGPS")
.Name = FileItem.Name
.FieldNames = False
.RowNumbers = False
.PreserveFormatting = True
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.AdjustColumnWidth = True
.PreserveColumnInfo = False
.Refresh BackgroundQuery:=False
End With
Worksheets("IMPORT").Cells.Select
Selection.QueryTable.Delete
End If
End If
Next FileItem
Set FileItem = Nothing
Set SourceFolder = Nothing
Set fso = Nothing
End Sub
'__________________________________________________________________________________
Function VerifOuvertureClasseur(Fichier As String) As Boolean 'FONCTION VERIFICATION SI CLASSEUR OUVERT
Dim X As Integer
On Error Resume Next
X = FreeFile()
Open Fichier For Input Lock Read As #X
Close X
If Err.Number = 0 Then VerifOuvertureClasseur = False
If Err.Number = 70 Then VerifOuvertureClasseur = True
On Error GoTo 0
End Function
Bonsoir,
avez-vous regardez du coté de la déclaration de fonction avec le PTRSAFE ?
Je dis ça car il n'y a aucune indication de votre message d'erreur...
@ bientôt
LouReeD
Bonjour tout le monde,
1- si vous changer le False en True
.Refresh BackgroundQuery:=True
quel est le résultat?
2- si vous n'utilisez que
.Refresh
à la place de
.Refresh BackgroundQuery:=False
quel est le résultat?
à vous relire
Bonjour , merci pour vos aiguillages ,
m3ellem1 :
J'ai essayé de remplacer "False" par "True" mais la ligne se met en erreur .
J'ai essayé ".refrech" tout court , mais même résultat .
LouReeD :
Désolé mais comme évoqué dans mon poste , je " bidouille " en vba ,
donc je suis navré de ne pas comprendre " déclaration de fonction avec le PTRSAFE "
Merci a vous
CDLT