Probleme sur un code vba sur access

Résolu/Fermé
Cailloux50 Messages postés 79 Date d'inscription jeudi 13 septembre 2018 Statut Membre Dernière intervention 10 août 2020 - 17 juil. 2019 à 13:01
yg_be Messages postés 23268 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 octobre 2024 - 17 juil. 2019 à 19:37
Bonjour à tous,

J'ai un souci sur acces. on vient de passez de 32 à 64 bits et j'ai se code qui fonctionne plus.
Si quelqu'un connait une solution sachant que je ne peut pas revenir à la version 32 bits.

J'ai mis en gras la ou ca bug.

<code>Private Sub Commande0_Click()
Dim le_champ As Control
Set le_champ = Forms!Menu!liste_imports
DoCmd.SetWarnings False
fichier_importe = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Excel", "xls")
' le_champ.SourceObject = ""
DoCmd.TransferSpreadsheet acImport, , "info", fichier_importe, True
requete = "UPDATE info SET fichier = '" & Dir(fichier_importe) & "' " & _

"WHERE fichier is null"
DoCmd.RunSQL requete
' le_champ.SourceObject = "les imports"
le_champ.Requery
temp = PurgeErreurs()
DoCmd.SetWarnings True
End Sub<code>

Merci d'avance :)
A voir également:

3 réponses

yg_be Messages postés 23268 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 octobre 2024 Ambassadeur 1 544
17 juil. 2019 à 13:30
bonjour, merci d'utiliser les balises de code quand tu postes du code dans le forum.
je suppose que l'erreur se produit sur la première ligne en gras.
quel message d'erreur obtiens-tu?
0
Cailloux50 Messages postés 79 Date d'inscription jeudi 13 septembre 2018 Statut Membre Dernière intervention 10 août 2020
17 juil. 2019 à 14:10


J'ai ce message.
0
Cailloux50 Messages postés 79 Date d'inscription jeudi 13 septembre 2018 Statut Membre Dernière intervention 10 août 2020
17 juil. 2019 à 14:11


Et c'est ça qui va pas.
0
yg_be Messages postés 23268 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 octobre 2024 1 544
17 juil. 2019 à 14:51
que contient la variable
fichier_importe
?
0
Cailloux50 Messages postés 79 Date d'inscription jeudi 13 septembre 2018 Statut Membre Dernière intervention 10 août 2020
17 juil. 2019 à 15:13
Je peux vous envoyé tous les code si vous voulez regarder.
Moi je connais bien vba sur Excel mais sur access je suis nul. Je passe après quelqu'un et j'y pompe rien...

C'est quoi le plus simple pour vous?


En faite ce problème arrive lorsque que l'on clique sur un bouton nommé "importer".
Le principe ce se bouton et d'ouvrir notre poste de travail de l'ordinateur, uis nous on fait manuellement le chemain jusqu'au fichier que l'on veut importer. Un fois ce fichier choisi on reclique sur importer et on est bon.
Mais la première partie de cette fonction ne fonctionne pas.

Voilà vous savez tous
0
yg_be Messages postés 23268 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 octobre 2024 1 544 > Cailloux50 Messages postés 79 Date d'inscription jeudi 13 septembre 2018 Statut Membre Dernière intervention 10 août 2020
17 juil. 2019 à 15:57
ne peux-tu pas exécuter le code en pas à pas, et déterminer la valeur de fichier_importe? sinon, faire un msgbox avec cette valeur.
0
Cailloux50 Messages postés 79 Date d'inscription jeudi 13 septembre 2018 Statut Membre Dernière intervention 10 août 2020
17 juil. 2019 à 16:42
Quand je fais pas a pas la valeur de fichier_importe est =""


Voici les code

Dans From_Menu

Private Sub Commande0_Click()
Dim le_champ As Control
Set le_champ = Forms!Menu!liste_imports
DoCmd.SetWarnings False
fichier_importe = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Excel", "xls")
' le_champ.SourceObject = ""
DoCmd.TransferSpreadsheet acImport, , "info", fichier_importe, True
requete = "UPDATE info SET fichier = '" & Dir(fichier_importe) & "' " & _
"WHERE fichier is null"
DoCmd.RunSQL requete
' le_champ.SourceObject = "les imports"
le_champ.Requery
temp = PurgeErreurs()
DoCmd.SetWarnings True
End Sub

Private Sub Commande24_Click()
fichier_importe = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier texte", "txt")
DoCmd.TransferText acImportFixed, "specification", "ST1", fichier_importe
requete = "UPDATE ST1 SET fichier_import = '" & Dir(fichier_importe) & "' " & _
"WHERE fichier_import is null"
DoCmd.RunSQL requete
fichier_importe = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier texte", "txt")
DoCmd.TransferText acImportFixed, "specification", "ST1", fichier_importe
requete = "UPDATE ST1 SET fichier_import = '" & Dir(fichier_importe) & "' " & _
"WHERE fichier_import is null"
DoCmd.RunSQL requete
import2.Requery
End Sub

Private Sub Commande27_Click()
Set fichier = Application.FileDialog(msoFileDialogSaveAs)
With fichier
.InitialFileName = TR![Chassis No#].Value & "_" & Year(Date) & Month(Date) & Day(Date) & ".xls"
If .Show Then
nom_fichier = .SelectedItems(1)
End If
End With
If Not (IsEmpty(nom_fichier)) Then
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "tracteur recherché 2bis", nom_fichier, True
End If
End Sub

Private Sub Commande32_Click()

End Sub

Private Sub Commande39_Click()
DoCmd.SetWarnings False
If MsgBox("Etes-vous sûr de vouloir supprimer les données du fichier " & liste_imports & "?", vbOKCancel) = vbOK Then
requete = "DELETE * FROM info where fichier = '" & liste_imports & "'"
DoCmd.RunSQL requete
liste_imports.Requery
End If
DoCmd.SetWarnings True
End Sub

Private Sub Commande40_Click()
DoCmd.SetWarnings False
If MsgBox("Etes-vous sûr de vouloir supprimer les données du fichier " & import2 & "?", vbOKCancel) = vbOK Then
requete = "DELETE * FROM ST1 where fichier_import = '" & import2 & "'"
DoCmd.RunSQL requete
import2.Requery
End If
DoCmd.SetWarnings True

End Sub

Private Sub Commande50_Click()
DoCmd.SetWarnings False
requete = "delete * from letableau"
DoCmd.RunSQL requete
requete = "INSERT INTO letableau ( Critère, statut, Nbre_tracteurs )SELECT tableau.Critère, tableau.statut, tableau.Nbre_tracteurs FROM tableau"
DoCmd.RunSQL requete
DoCmd.OpenTable "letableau", acViewPivotTable
DoCmd.SetWarnings True

End Sub

Private Sub Commande53_Click()
DoCmd.SetWarnings False
requete = "delete * from letableau"
DoCmd.RunSQL requete
requete = "INSERT INTO letableau ( Critère, statut, Nbre_tracteurs )SELECT tableau.Critère, tableau.statut, tableau.Nbre_tracteurs FROM tableau"
DoCmd.RunSQL requete
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "letableau", "c:/toto.xls"
DoCmd.SetWarnings True

End Sub

Private Sub Commande58_Click()
If etat = "" Then
DoCmd.OpenQuery "BAS2bis"
Else
DoCmd.OpenQuery "BAS2"
End If
End Sub

Private Sub Commande6_Click()
On Error GoTo Err_Commande6_Click


DoCmd.Quit

Exit_Commande6_Click:
Exit Sub

Err_Commande6_Click:
MsgBox Err.Description
Resume Exit_Commande6_Click

End Sub

Private Sub Commande60_Click()
Set fichier = Application.FileDialog(msoFileDialogSaveAs)
With fichier
.InitialFileName = "Liste_tracteur.xls"
If .Show Then
nom_fichier = .SelectedItems(1)
End If
End With
If Not (IsEmpty(nom_fichier)) Then
If etat = "" Then
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "BAS2bis", nom_fichier, True
Else
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "BAS2", nom_fichier, True
End If
End If

End Sub

Private Sub Commande65_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from ORDXLS"
fichier_importe = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier texte", "txt")
DoCmd.TransferText acImportDelim, "ORDXLS", "ORDXLS", fichier_importe, True
requete = "UPDATE param SET info = '" & Date & "," & Time & "' WHERE id_param ='ord'"
DoCmd.RunSQL requete
tracteurs_dispo_date.Requery
DoCmd.SetWarnings True

MsgBox ("Import Terminé")
End Sub

Private Sub Commande66_Click()
Set fichier = Application.FileDialog(msoFileDialogSaveAs)
With fichier
.InitialFileName = "Liste_tracteurs_dispos.xls"
If .Show Then
nom_fichier = .SelectedItems(1)
End If
End With
If Not (IsEmpty(nom_fichier)) Then
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "trateurs dispos", nom_fichier, True
End If

End Sub

Private Sub Commande7_Click()
DoCmd.SetWarnings False
TR.SourceObject = ""
Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
If tbl.Name = "factures n" Then
Debug.Print "Effacement de " & tbl.Name
CurrentDb.TableDefs.Delete tbl.Name
End If
Next tbl

Set tbl = Nothing

fichier_importe = OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Excel", "xlsm")
DoCmd.TransferSpreadsheet acImport, , "factures n", fichier_importe, True, "factures n!A:AJ"
requete = "DELETE * FROM [factures n] WHERE M is Null"
DoCmd.RunSQL requete
temp = PurgeErreurs()
requete = "UPDATE param SET info = '" & Dir(fichier_importe) & " importé le " & Date & "' " & "WHERE id_param ='facturen'" _

DoCmd.RunSQL requete
fichier_factures_n.Requery
DoCmd.SetWarnings True
TR.SourceObject = "tracteur recherché"

MsgBox ("Import Terminé")
End Sub




Dans module 1

Option Compare Database
'CODE récupéré sur developpez.com

'Déclaration de l'API
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 Long

'Structure du fichier
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
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 Long
lpfnHook As Long
lpTemplateName As String
End Type

'Constantes
Private Const OFN_READONLY = &H1
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_NOCHANGEDIR = &H8
Private Const OFN_SHOWHELP = &H10
Private Const OFN_ENABLEHOOK = &H20
Private Const OFN_ENABLETEMPLATE = &H40
Private Const OFN_ENABLETEMPLATEHANDLE = &H80
Private Const OFN_NOVALIDATE = &H100
Private Const OFN_ALLOWMULTISELECT = &H200
Private Const OFN_EXTENSIONDIFFERENT = &H400
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_CREATEPROMPT = &H2000
Private Const OFN_SHAREAWARE = &H4000
Private Const OFN_NOREADONLYRETURN = &H8000
Private Const OFN_NOTESTFILECREATE = &H10000

Private Const OFN_SHAREFALLTHROUGH = 2
Private Const OFN_SHARENOWARN = 1
Private Const OFN_SHAREWARN = 0


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 a 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 (Me.Hwnd)
'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 defaut
'Exemple: C:\windows\system32
'Si vous laissé l'argument vide, par defaut 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


Public Function PurgeErreurs()

Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
If InStr(tbl.Name, "importerrors") Or InStr(tbl.Name, "Échec") Or InStr(tbl.Name, "factures n$A:AJ_ImportErrors") Then
Debug.Print "Effacement de " & tbl.Name
CurrentDb.TableDefs.Delete tbl.Name
End If
Next tbl

Set tbl = Nothing

End Function




Dans Module 2
Option Compare Database







Sachant que je vient de passez en excel 64 bits et c'est pour ça que ça fonctionne plus.

DoCmd.TransferSpreadsheet acImport


Pour l'instant c'est que cette partie la qui bug
0
Cailloux50 Messages postés 79 Date d'inscription jeudi 13 septembre 2018 Statut Membre Dernière intervention 10 août 2020
17 juil. 2019 à 16:48
access 64 bits *
0