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

Macros et VBA Excel Discussion :

Bug aléatoire Access / Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut Bug aléatoire Access / Excel
    Bonjour à tous, j'espère que vous allez m'aider car j'ai un beug qui intervient quelque fois et que je ne sais pas comment résoudre. D'ailleurs je n'arrive pas à le reproduire systématiquement, je n'ai pas encore détecter le cas provoquant ce beug.
    Vous imaginez bien que je ne suis pas à l'aise car je me dit que ça pourra très bien arriver avec les utilisateurs...

    j'ai une base access d'un côté et des fichiers excel de l'autre. Deux fonctionnalitées, l'une est de charger dans Access le contenu des fichiers excel et l'autre d'effectuer un export dans excel du contenu des tables access.

    Pour faire simple, j'ai donc deux boutons sur mon formulaire, un bouton chargement access et un bouton export excel.

    Pour le chargement, j'ouvre des fichiers excel (plusieurs) je l'ai parcourt et je charge dans Access.

    Pour l'export, je crée un fichier excel et je l'alimente a l'aide d'un recordset.

    Le beug, c'est que parfois, quand je lance la fonctionnalité de chargement, le fichier a importer s'ouvre mais il y a également un autre fichier excel qui s'ouvre.
    cet autre fichier excel s'appelle book1 et contient une ligne dont le contenu se trouve dans la base access. Ensuite ça me demande si je veux enregistrer les changements du fichier book 1 et ça fait planter mon chargement mais je ne sais plus sur quel ligne de code...
    Je me doute donc que quelque chose n'est pas ok, et je soupçonne que ce fichier book1 a été crée lors d'un export vers excel...et qui a peut etre été mal fermé..
    Je dis ça car le nom de l'onglet est le meme que celui que je nomme dans la fonctionnalité d'export vers excel.

    Bon je suis pas un expert, j'ai crée le code en regardant les syntaxe sur ce site.
    Je voudrais déja vérifier avec vous que le code est correct, propre et que c'est bien comme ça qu'on travaille avec des fichiers excel.

    Procédure de chargement :
    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
     
    Private Sub CmdChargementActiviteService_Click()
     
        Set xls = FnOuvrirFichierXls(CurrentProject.Path & "\" & RepertoirePA & "\" & NomFichier)
     
        'Activer onglet "projet"
        xls.Sheets("projet").Activate
     
            'Parcourt des activitées
            While xls.Cells(iNumLigne, 3) <> "fin"
     
                'remplir table budget
                SQLInsertion = "INSERT INTO budget (Type, Producteur,Periode, niveauActivite1, niveauActivite2, niveauActivite3, niveauActivite4, Nature, IndicateurVariabilite, TotalJH, Montant, ModeAllocation, CentreSolutionFinanceJH, CentreSolutionFinanceMontant, CentreSolutionRHJH,CentreSolutionRHMontant, CentreSolutionSiègeSupportJH,CentreSolutionSiègeSupportMontant, CentreDeServicesJH,CentreDeServicesMontant, CentreDeProductionJH,CentreDeProductionMontant,  DSICentraleJH, DSICentraleMontant)" _
                & "VALUES ('" & strType & "','" & xls.Cells(NumLigneDebut, 1) & "','" & xls.Cells(NumLigneDebut, 2) & "','" & Replace(xls.Cells(iNumLigne, 3), "'", "''") & "','" & Replace(xls.Cells(iNumLigne, 4), "'", "''") & "','" & Replace(xls.Cells(iNumLigne, 5), "'", "''") & "','" & Replace(xls.Cells(iNumLigne, 6), "'", "''") & "','" & strNature & "','" & strIndicateurVariabilite & "','" & xls.Cells(iNumLigne, 7) & "'," & iTJMBrut * xls.Cells(iNumLigne, 7) & ",'" & xls.Cells(iNumLigne, 9) & "','" & DestCSFJH & "','" & DestCSFMontant & "','" & DestCSRHJH & "','" & DestCSRHMontant & "','" & DestCSSSJH & "','" & DestCSSSMontant & "','" & DestCSJH & "','" & DestCSMontant & "','" & DestCPJH & "','" & DestCPMontant & "','" & DestDSIJH & "','" & DestDSIMontant & "')"
     
                'MsgBox SQLInsertion
                DoCmd.RunSQL SQLInsertion
     
        Call FnFermerFichierXls(xls)
     
     
    'ouverture du fichier des sous activitées
    Set xls = FnOuvrirFichierXls(CurrentProject.Path & "\" & RepertoirePlanRH & "\" & FichierPlanRH)
     
    xls.Sheets("Sous-activité").Activate
     
    SQL ...
        'MsgBox SQLInsertion
        DoCmd.RunSQL SQLInsertion
     
    Call FnFermerFichierXls(xls)
     
    End Sub
    Procédure d'export :
    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
     
    Private Sub CmdExporterBudget_Click()
     
    If IsNull(txtPeriode.Value) = False Then
        SQLBudget = "SELECT * FROM Budget WHERE periode = '" & txtPeriode.Value & "'"
        'MsgBox SQLBudget
    End If
     
     
    'initialisation des variables
    iNumLigneDebut = 2
     
    Set rs = CurrentDb.OpenRecordset(SQLBudget)
    If rs.RecordCount = 0 Then
        MsgBox "aucun résultat pour la recherche"
        Exit Sub
    End If
     
    rs.MoveFirst
     
    'Fichier déja présent ?
    If Dir(CurrentProject.Path & "\Budget.xlsx", vbHidden) <> "" Then
        If MsgBox("Un export a déja été réalisé pour cette période et ce producteur, voulez-vous l'écraser ?", vbYesNo) = vbYes Then
            'Le fichier est il ouvert
            If IsFileOpen(CurrentProject.Path & "\Budget.xlsx") = True Then
                MsgBox "Veuillez fermer le fichier budget puis relancer le traitement"
                Exit Sub
            Else
                'supprimer le fichier
                Kill (CurrentProject.Path & "\Budget.xlsx")
            End If
        Else
            Exit Sub
        End If
    End If
     
    Workbooks.Add
    Sheets("sheet1").Select
    Sheets("sheet1").Name = "Budget"
    Sheets("budget").Activate
     
    'Création entete
    Sheets("budget").Cells(1, 1) = "Producteur"
    .......
     
    While Not rs.EOF
        Sheets("budget").Cells(iNumLigneDebut, 1) = (rs!Producteur)
    .......    
        rs.MoveNext
        iNumLigneDebut = iNumLigneDebut + 1
    Wend
     
     
    ActiveWorkbook.SaveAs FileName:=CurrentProject.Path & "\Budget"
    ActiveWorkbook.Close
     
    MsgBox "Export terminé"
     
     
    end sub
    Les procédures ouverture et fermeture d'un fichier excel :
    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
     
     
    Public Function FnOuvrirFichierXls(CheminFichier As String) As Excel.Application
     
    Dim xls As Excel.Application
     
    Set xls = CreateObject("Excel.Application")
    xls.Workbooks.Open CheminFichier
    xls.Visible = True
     
    Set FnOuvrirFichierXls = xls
     
    End Function
     
     
    Public Sub FnFermerFichierXls(ByVal objFichierXls As Excel.Application)
     
    objFichierXls.ActiveWorkbook.Save
    objFichierXls.Workbooks.Close
    objFichierXls.Quit
     
    Set objFichierXls = Nothing
     
    End Sub
    Si vous pouviez déja me dire si la manière dont j'ouvre et je ferme les fichiers excel est correct, et si la manière dont je crée les fichiers excel est correct également ?

    Merci beaucoup de votre aide, je sais pas comment résoudre ce probleme aléatoire...

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonsoir,
    la fonction d'ouverture de fichier Excel (FnOuvrirFichierXls) est sans doute de trop car Workbooks.open dans le corps de la fonction principale suffirait
    Le passage de l'objet Excel.Application en variable me semble suspect.
    Idem pour la fermeture.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    Bonjour merci pour ta réponse. OK je supprime les fonctions d'ouvertures et de procédures du fichier.
    Mais peux-tu m'en dire d'avantage, ai-je besoin de déclarer un objet excel.application ou bien je fait juste un woorbook.open puis close puis save ?

    merci de votre aide

    Bonjour, en regardant un autre code d'ouverture d'excel, j'ai vu qu'on pouvait déclarer un objet de type woorbook et lui affecté l'ouverture du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set xlBook = xlApp.Workbooks.Open (chemin)
    alors que moi je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set xls = CreateObject("Excel.Application")
    xls.Workbooks.Open (CurrentProject.Path & "\" & RepertoireService & "\" & FichierService)
    est-ce que ça pourrait venir de là mon problème de book1 qui s'ouvre ?

    Quelle différence entre créer un objet de type woorkbook ou non ?

    Merci

    Si quelqu'un qui s'y connait pourrait me dire si c'est plus propre de créer un objet de type workbook et si mon problème pourrait venir de là, ça serait super cool, merci beaucoup à ceux qui voudraient bien m'aider.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    bonjour, je suis retombé sur le bug...
    J'ai virer les fonctions d'ouverture et de fermeture du fichier excel.
    J'ouvre et je ferme dans le corps de procédure principal :
    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
     
    'ouverture du fichier
    Set xls = CreateObject("Excel.Application")
    Set xlsClasseur = xls.Workbooks.Open(CurrentProject.Path & "\" & RepertoireTJMChargé & "\" & FichierTJMChargé)
    xls.Visible = False
    xls.DisplayAlerts = False
     
    'Activer onglet "projet"
    Set xlsFeuille = xlsClasseur.Worksheets("TJM Chargé")
    xlsFeuille.Activate
     
    .....
     
     
    'Fermeture fichier excel
    xlsClasseur.Close
    xls.Quit
    Set xls = Nothing
    Set xlsClasseur = Nothing
    Set xlsFeuille = Nothing
    Le bug est survenu a l'exécution de ce 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
     
    While Not rs.EOF
     
        'Création fichier facture par client
        Set xls = CreateObject("Excel.Application")
     
        Set xlsClasseur = xls.Workbooks.Add
        Set xlsFeuille = xlsClasseur.Worksheets(1)
     
        'Ecriture nom client et periode dans le fichier excel
        xlsFeuille.Cells(1, 1).Value = "Client : "
        xlsFeuille.Cells(1, 2).Value = (rs!ClientNiveau3)
        xlsFeuille.Columns.AutoFit
    .................
     
        'Enregistrer le fichier facture par client
        xlsClasseur.SaveAs FileName:=CurrentProject.Path & "\Facture\Facture" & Replace(rs!ClientNiveau3, "*", "étoile") & ".xlsx"
        xlsClasseur.Close
        xls.Quit
     
        Set xls = Nothing
        Set xlsClasseur = Nothing
        Set xlsFeuille = Nothing
     
        rs.MoveNext
    Wend

    Si quelqu'un peut m'aider je suis preneur merci a tous

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 137
    Par défaut
    Le bug se produit avec du code Excel et sur Excel. Pourquoi le poster dans Access ? Je transfère.

    Tu auras peut-être une réponse.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    Loufab,

    c'est dans un formulaire access que j'ai ce code et non pas dans une macro excel.

    mais si en le transferant j'aurais plus de réponse ok pas de soucis.

    Merci

Discussions similaires

  1. [Access][Excel]en vb
    Par elasfer dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/10/2005, 20h37
  2. [VBA] Access Excel
    Par mariobedard dans le forum Access
    Réponses: 3
    Dernier message: 06/10/2005, 11h12
  3. PB export date et lien hypertexte d'access à excel
    Par Celia1303 dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2005, 17h09
  4. Access - Excel - Serveur RPC
    Par lorang dans le forum Access
    Réponses: 29
    Dernier message: 23/02/2005, 15h14
  5. [VBA] Access-> Excel Format de cellule
    Par toflofr dans le forum VBA Access
    Réponses: 19
    Dernier message: 31/07/2003, 14h26

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