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 :

Le code ne marche pas et je reçois ce message d'erreur: "Compile error: Argument not optional" [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut Le code ne marche pas et je reçois ce message d'erreur: "Compile error: Argument not optional"
    Bonjour à tous,

    comme indiqué dans le titre ci-dessus, je n'arrive pas à definer le problem auquel je suis confronté:
    Voici mon code, il est censé parametrer l'importation de données depuis MS Excel 2010.

    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
    Private Sub cmdImportR_Click()
    
    On Error GoTo err_import
    MyFile = "\\soa-msb-fs\Rations Invoice & Budget\Database\Ration.xlsx"
    Set Mysh = MyFile.LaRequisition
    Set tb = [Commande Client]
    Call Importdata
    err_import:
    MsgBox Err.Description
    Resume Next
    
    End Sub
    
    Public Function Importdata(MyFile As Excel.Workbook, Mysh As Excel.Worksheet, tb As Table)
    On Error GoTo err_import
    'Dim MyFile As New Excel.Application
    'Dim tb As New Table
    'Dim MaPlage As Excel.Range
    'Set Mysh = MyFile.Worksheet
    DoCmd.TransferSpreadsheet acImport, , tb, MyFile.Mysh, True
    err_import:
    MsgBox Err.Description
    Resume Next
    
    End Function
    NB. Je ne suis pas trop confortable en VBA.

  2. #2
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut Nouveau message d'erreur apres quelques modifications du code
    Le nouveau message qui s'affiche est maintenant: Object Variable or With block variable not set
    après que j'ai modifié le code comme suite:

    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
    Private Sub cmdImportR_Click()
     
    On Error GoTo err_import
    Dim db As DAO.Database
    Dim MaTable As DAO.Recordset
    Dim MonFichier As Excel.Workbook
    Dim MaFeuille As Excel.Worksheet
    Set db = CurrentDb
    MonFichier = "\\soa-msb-fs\Rations Invoice '&' Budget\Database\Ration.xls"
    MaFeuille = MonFichier.LaRequisition
    Set MaTable = db.OpenRecordset("Commande Client")
    Call Importdata(MonFichier, MaFeuille, MaTable)
    err_import:
    'MsgBox Err.Description
    Resume Next
     
    End Sub
     Public Function Importdata(MyFile As Excel.Workbook, Mysh As Excel.Worksheet, tb As Table)
     On Error GoTo err_import
     'Dim MyFile As New Excel.Application
     'Dim tb As New Table
     'Dim MaPlage As Excel.Range
     'Set Mysh = MyFile.Worksheet
     DoCmd.TransferSpreadsheet acImport, , tb, MyFile.Mysh, True
     err_import:
     MsgBox Err.Description
     Resume Next
     
     End Function

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Effectivement, tu n'avais pas mis les paramètres au début dans ton Call.

    Pour ce qui est de ta nouvelle erreur, as tu essayé de mettre des set pour définir ta feuille et ton fichier? Car l'erreur te dit qu'il manque des set.

    Essaye par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set MonFichier = "\\soa-msb-fs\Rations Invoice '&' Budget\Database\Ration.xls"
    Set MaFeuille = MonFichier.LaRequisition
    Après je ne suis pas un spécialiste mais en tâtonnant, on finit par trouver.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut Merci
    Merci a toi,
    J'ai essaye cela sans success.
    Par contre, j'ai proceder a des changements dans 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
    Public Function ImportData(ByVal MaTable As Variant, ByVal MyFile As Variant, ByVal Mysh As Variant)
    On Error GoTo err_import
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, MaTable, MyFile, True, Mysh
    err_import:
    MsgBox Err.Description
    Resume Next
    
    End Function
    
    Private Sub cmdImportD_Click()
    On Error GoTo err_import
    Dim tb As Variant
    Dim MonFichier As Variant
    Dim MaFeuille As Variant
    tb = "Delivery Details"
    MaFeuille = 2
    MonFichier = "R:\RATIONS INVOICE & BUDGET\Database\Ration"
    Call ImportData(tb, MonFichier, MaFeuille)
    err_import:
    'MsgBox Err.Description
    Resume Next
    End Sub
    Et maintenant, j'ai comme l'impression que j'ai rate quelquechose dans la description de l'emplacement de mon fichier.

    Nouveau message (ci-joint)
    Images attachées Images attachées  

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Points : 60
    Points
    60
    Par défaut
    Si tu es sûr du chemin que tu as écrit, tu peux essayer de mettre ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonFichier = """R:\RATIONS INVOICE & BUDGET\Database\Ration"""
    Il est fort probable que ce soit les espaces qui gênent.

    Si ça ne marche pas comme je t'ai proposé ou en modifiant les espaces par des "_", dis moi.

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut
    Merci pour ton soutien, je ne crois pas que cela marche: je suis plutot en train de me demander si les restrictions d'acces au serveur peuvent influencer l'execution du code.
    NB. J'y suis accepte en tant que utilisateur ordinaire mais j'ai acces a tous les fichiers s'y trouvant.

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2012
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 103
    Points : 76
    Points
    76
    Par défaut
    Et ton fichier est bien un .xls (Excel 97-2003) ? si c'est un .xlsx c'est peut-être pour ça qui te fait un message d'erreur.

  8. #8
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut
    Le fichier est bien .xls; mais comme je l'est souligné auparavant, le nom du server doit peut-être causer le problème.
    Je ne sais pas s'il faut utiliser l'adresse IP (que je ne connais pas d'ailleurs)

  9. #9
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Si tu reprends l'aide d'Access sur la fonction d'import de données d'excel, tu verras que les arguments sont des chaines de caractères.Ce qui donne au niveau de tes procédures :

    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
     
    Private Sub cmdImportR_Click()
     
    On Error GoTo err_import
    Dim strMaTable As String
    Dim strMonFichier As String
    MonFichier = "Chemin de ton fichier"
    strMaTable = "Lecture"
    Call Importdata(strMonFichier, strMaTable)
    err_import:
    Resume Next
     
    End Sub
     Public Function Importdata(MyFile As String, tb As String)
     On Error GoTo err_import
     DoCmd.TransferSpreadsheet acImport, , tb, MyFile, True
    err_import:
     MsgBox Err.Description
     Resume Next
     
     End Function
    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  10. #10
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut
    Merci pour ta contribution, je vais faire les changement et observer

  11. #11
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut Presqu'au bout!
    Effectivement, en remplaçant le mot Variant par String le programme retrouve le fichier mais pas la feuille:

    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
    Public Function ImportData(ByVal MaTable As String, ByVal MyFile As String, ByVal Mysh As String)
    On Error GoTo err_import
    DoCmd.TransferSpreadsheet acImport, , MaTable, MyFile, True, Mysh
    err_import:
    MsgBox Err.Description
    Resume Next
     
    End Function
    Private Sub cmdImportD_Click()
    On Error GoTo err_import
    Dim tb As String
    Dim MonFichier As String
    Dim MaFeuille As String
    tb = "Delivery Details"
    MaFeuille = "Deliveries"
    MonFichier = "R:\RATIONS INVOICE & BUDGET\Database\Ration"
    Call ImportData(tb, MonFichier, MaFeuille)
    err_import:
    'MsgBox Err.Description
    Resume Next
    End Sub

  12. #12
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut
    Mon problème revient donc à trouver comment accéder à une feuille particulère car le classeur contient différentes feuilles.
    Merci à vous tous pour votre aide incommensurable toujours nécessitée.

  13. #13
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    En regardant l'aide d'access sur la fonction TransferSpreadsheet, tu trouves l'argument Range

    Range - Facultatif - Variante : Expression chaîne qui correspond à une plage valide de cellules ou au nom d'une plage de la feuille de calcul. Cet argument n'est valable que pour une importation. Laissez cet argument vierge pour importer la feuille de calcul entière. Lorsque vous effectuez une exportation vers une feuille de calcul, vous devez laisser cet argument vierge. Si vous tapez une plage, l'exportation échoue.
    Si tu ne places aucun argument, il récupère les données de la première feuille de calcul.
    A toi donc de nommer ta zone à importer si elle ne se trouve pas sur la première feuille de ton classeur ou alors indique le nom de l'onglet de la feuille à importer.

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  14. #14
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut
    Dans la function ci-dessous, Mysh est cense être la feuille à importer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function ImportData(ByVal MaTable As String, ByVal MyFile As String, ByVal Mysh As String)
    On Error GoTo err_import
    DoCmd.TransferSpreadsheet acImport, , MaTable, MyFile, True, Mysh
    err_import:
    MsgBox Err.Description
    Resume Next
     
    End Function
    Peut être que j'ai aussi manqué la description i.e string ou variant ...

  15. #15
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut Le message d'erreur
    Je reçois donc ce message en attaché
    Images attachées Images attachées  

  16. #16
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    La feuille que tu doit importer est-elle la première du classeur ?
    Sinon, place la en premier et dans ta fonction d'import, supprime l'argument Mysh et fait un test d'importation
    De mon coté cela fonctionne
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  17. #17
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut
    Effectivement cela marche, je l'avai deja essayer.
    Mais ici, le classeur contient quatre differentes feuilles qui doivent importees dans 4 differentes tables.
    Si je ne peux pas specifier la feuille a importer dans mon code, cela voudrait dire que je dois creer quatre differents classeurs avec une feuille chacun.

  18. #18
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Si je ne peux pas spécifier la feuille a importer dans mon code, cela voudrait dire que je dois créer quatre différents classeurs avec une feuille chacun.
    Pas forcément, tu peux utiliser aussi le principe des feuilles attachées. Chaque feuille correspondant à une table.
    Chaque modification dans la feuille de calcul se répercute automatiquement au niveau de la table attachée.
    Tu passes par :
    - l'onglet : Données externes
    - groupe : Importer - lier
    - Outil : Excel

    Dans la boite de dialogue tu choisis : Attacher et par le bouton "Parcourir" tu vas chercher le classeur contenant tes données. L'assistant te demande de choisir la feuille que tu souhaites attacher.

    Voila une solution qui éviterai la programmation d'un import.
    A toi de voir

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  19. #19
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 70
    Points : 48
    Points
    48
    Par défaut
    Salut
    Merci pour ta contribution; c'est effectivement ce que j'utilise actuellement.
    Je cherchais à éviter toute mauvaise manipulation de ma base de données par un quelconque utilisateur vu que je dois donner l'accès à deux autres personnes pour les mise-à-jour. Moi j'ai le fichier installé dans Mes documents, je voulais donc le sauvegarder sur le server pour un usage collectif.

    Qui cherche trouve

  20. #20
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    On ne lache rien !

    Voici une solution à ton importation qui a l'air de fonctionner.
    A chaque zone que tu veux importer, tu donnes un nom de portée Feuille et non Classeur
    Voici ci-dessous le code correspondant

    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
    Private Sub cmdImportR_Click()
     
    Dim strMaTable As String
    Dim strMonFichier As String
    Dim strZoneImportee As String
     
    strMonFichier = "Chemin du Fichier"
    strMaTable = "Table Destination"
    strZoneImportee = "Onglet!NomZoneImportee"
    Call Importdata(strMonFichier, strMaTable, strZoneImportee )
     
    End Sub
     Public Function Importdata(MyFile As String, tb As String, ByVal mysh As String)
     On Error GoTo err_import
     DoCmd.TransferSpreadsheet acImport, 8, tb, MyFile, True, mysh
     Exit Function
    err_import:
     MsgBox Err.Description
     Resume Next
     
     End Function
    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/05/2010, 11h50
  2. code ne marche pas
    Par zakaroh dans le forum C#
    Réponses: 7
    Dernier message: 18/07/2008, 11h11
  3. videoroll vogroll code ne marche pas
    Par crikooo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/12/2007, 08h57
  4. je ne sais pas pourquoi ce code ca marche pas
    Par debutantasp dans le forum ASP
    Réponses: 14
    Dernier message: 23/11/2007, 17h10
  5. [VBA-E] mon code ne marche pas sur un autre PC
    Par yannph dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/01/2006, 21h03

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