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 :

Aide pour copier coller lors de création de dossier


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Finances
    Inscrit en
    Février 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Finances
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 41
    Points : 20
    Points
    20
    Par défaut Aide pour copier coller lors de création de dossier
    Bonjour à tous, novice dans ce domaine, je me retrouve devant un petit soucis. J'aimerais que le champs "NUMDOSSIER" et "ID_Client" se remplisse automatiquement lors de la création dans nouveau dossier, pour ce faire j'ai un bouton pour lancer la procédure, le liens du dossier se met bien dans la table document, mais pas les champs indiqué plus haut.
    ci-dessous le code que j'utilise :
    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 CreerDossiers_Click()
     
    Dim fso As Object
    Dim sDossier1 As String, sDossier2 As String
    Dim rst As DAO.Recordset
     
    Set rst = CurrentDb.OpenRecordset( _
    "SELECT [NUMDOSSIER] FROM [Tbl_CLIENTS] WHERE [ID_Client] = " & Me.ID_Client, _
    dbOpenSnapshot)
    sDossier1 = "D:\Mes documents\BDD\Dossiers Clients"
    sDossier2 = rst("[NUMDOSSIER]")
     
    strSql = "INSERT INTO [TNUMDOSSIER] ( [ID_Client], [DOCUMENT] ) SELECT '" & rst("[NUMDOSSIER]") & "','" & sDossier1 & "\" & sDossier2 & "';"
     
    If Dir((sDossier1) & "\" & (sDossier2), vbDirectory) = "" Then
        Set fso = CreateObject("Scripting.FileSystemObject")
        fso.CreateFolder (sDossier1) & "\" & (sDossier2)
          ' Insertion dans la table Document Client
        DoCmd.SetWarnings False
        CurrentDb.Execute (strSql)        '<=====  c'est ici que la requête s'exécute
        DoCmd.SetWarnings True
    Else
        MsgBox "Le dossier " & sDossier1 & "\" & sDossier2 & " existe déjà"
    End If
    rst.Close
     
    Set rst = Nothing
    Set fso = Nothing
    End Sub
    Merci d votre aide. Alain

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Bonjour,

    A priori la bonne syntaxe est plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSql = "INSERT INTO [TNUMDOSSIER] ( [ID_Client], [DOCUMENT] ) VALUES ('" & rst("[NUMDOSSIER]") & "','" & sDossier1 & "\" & sDossier2 & "');"
    Par ailleurs setwarning false désactive la gestion d'erreur (ce qui n'est pas adapté lors du développement) mais n'a aucun effet sur la commande currentdb.execute qui elle accepte l'option dbfailonerror (qui comme son nom l'indique arrête l'exécution en cas de problème SQL)

    Donc pour résumer ça marchera mieux ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Dir((sDossier1) & "\" & (sDossier2), vbDirectory) = "" Then
        Set fso = CreateObject("Scripting.FileSystemObject")
        fso.CreateFolder (sDossier1) & "\" & (sDossier2)
          ' Insertion dans la table Document Client
        CurrentDb.Execute strSql, dbfailonerror      '<=====  c'est ici que la requête s'exécute
    Else...
    Enfin j'écris rst!NUMDOSSIER mais peut-être que rst("[NUMDOSSIER]") marche aussi...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Finances
    Inscrit en
    Février 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Finances
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 41
    Points : 20
    Points
    20
    Par défaut Erreur dans le code
    Bonjour Nico84 et merci de ton aide

    Mais dès que je clique sur le bouton j'ai le message d'erreur : " Erreur d'exécution '3464' Type de donnée incompatible dans l'expression du critère"

    je te remets le code pour info :
    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
    Private Sub CreerDossiers_Click()
     
    Dim fso As Object
    Dim sDossier1 As String, sDossier2 As String
    Dim rst As DAO.Recordset
     
    Set rst = CurrentDb.OpenRecordset( _
    "SELECT [NUMDOSSIER] FROM [Tbl_CLIENTS] WHERE [ID_Client] = " & Me.ID_Client, _
    dbOpenSnapshot)
    sDossier1 = "D:\Mes documents\BDD\Dossiers Clients"
    sDossier2 = rst("[NUMDOSSIER]")
     
    strSql = "INSERT INTO [TNUMDOSSIER] ( [ID_Client], [DOCUMENT] ) VALUES ('" & rst("[NUMDOSSIER]") & "','" & sDossier1 & "\" & sDossier2 & "');"
     
    If Dir((sDossier1) & "\" & (sDossier2), vbDirectory) = "" Then
        Set fso = CreateObject("Scripting.FileSystemObject")
        fso.CreateFolder (sDossier1) & "\" & (sDossier2)
          ' Insertion dans la table Document Client
        CurrentDb.Execute strSql, dbFailOnError      '<=====  c'est ici que la requête s'exécute
    Else
    MsgBox "Le dossier " & sDossier1 & "\" & sDossier2 & " existe déjà"
    End If
    rst.Close
     
    Set rst = Nothing
    Set fso = Nothing
    End Sub
    Encore merci Alain

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Le deboggueur doit s'arrêter sur la ligne qui pose problème et en survolant avec la souris on voit le contenu des variables...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Finances
    Inscrit en
    Février 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Finances
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 41
    Points : 20
    Points
    20
    Par défaut Suite code erreur
    Désolé, mais je ne comprend rien, lorsque je mets le curseur il indique

    "dbFailOnError = 128"

    Je ne sais pas à quoi cela se rapporte.

    Merci de ton aide

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    A priori je dirais que id_client est numérique et qu'il ne faut donc pas le mettre entre '

  7. #7
    Membre à l'essai
    Homme Profil pro
    Finances
    Inscrit en
    Février 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Finances
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 41
    Points : 20
    Points
    20
    Par défaut Suite erreur 128
    Merci de ton aide, mais cela ne fonctionne pas, le dossier ce crée, mais pas la tNUMDOSSIER, Champs : ID_CLIENT (Code numérique auto de la table client), NUMDOSSIER (composer de 2 x 3 chiffres et le nom du client) et DOCUMENT(lien hypertexte qui ouvre le dossier spécifié).

    En espérant d'avoir été clair.



    Alain

  8. #8
    Membre à l'essai
    Homme Profil pro
    Finances
    Inscrit en
    Février 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Finances
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 41
    Points : 20
    Points
    20
    Par défaut Soucis de liens
    Bonjour à tous et merci d'avance pour vos aides,

    depuis ma dernière demande, j'ai pu mettre en place et obtenir ce que je souhaitais, mais et oui il y a un mais,

    mon lien de dossier copier dans ma table, n'ouvre pas le fichier demandé!

    pourriez-vous m'aider à comprendre le pourquoi, ci-dessus mon code d'avance merci.

    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
    Private Sub CreerDossier_Click()
    Dim fso As Object
    Dim sDossier1 As String, sDossier2 As String
    Dim rst As DAO.Recordset
    Dim strSql As String
     
    Set rst = CurrentDb.OpenRecordset( _
    " SELECT [NUMDOSSIER] FROM [CLIENTS]  WHERE  ID_CLIENT = " & Me.ID_Client, _
    dbOpenSnapshot)
    sDossier1 = "D:\Mes documents\BDD\DossiersClients"
    sDossier2 = rst("[NUMDOSSIER]")
     
    strSql = "INSERT INTO [DOCUMENTS] ([NUMDOSSIER], [DOCUMENTS] ) VALUES ('" & rst("[NUMDOSSIER]") & "','" & sDossier1 & "\" & sDossier2 & "');"
     
    If Dir((sDossier1) & "\" & (sDossier2), vbDirectory) = "" Then
        Set fso = CreateObject("Scripting.FileSystemObject")
        fso.CreateFolder (sDossier1) & "\" & (sDossier2)
      ' Insertion dans la table Document Client
        CurrentDb.Execute strSql, dbFailOnError      '<=====  c'est ici que la requête s'exécute
    Else
    MsgBox "Le dossier " & sDossier1 & "\" & sDossier2 & " existe déjà"
    End If
    rst.Close
     
    Set rst = Nothing
    Set fso = Nothing
    End Sub

Discussions similaires

  1. Création macro word pour copier-coller
    Par marmi dans le forum VBA Word
    Réponses: 2
    Dernier message: 18/04/2017, 09h26
  2. [XL-2010] Aide VBA pour copier coller d'un classeur à un autre
    Par jesslab dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/11/2013, 16h52
  3. aide pour copier/coller et pour trier
    Par chamoxx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/07/2008, 21h27
  4. [Dreamweaver] Probleme pour copier / coller du texte
    Par Aspic dans le forum Dreamweaver
    Réponses: 4
    Dernier message: 13/01/2007, 23h04
  5. Réponses: 2
    Dernier message: 18/11/2005, 16h29

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