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 :

Programme VBA pour ACCESS:"erreur d'execution 9"


Sujet :

VBA Access

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut Programme VBA pour ACCESS:"erreur d'execution 9"
    Bonjour a tous,
    je suis nouvelle sur ce forum et je suis surtout novice en tout ce qui a trait a access 2010.
    je vous expose mon probleme en esperant que quelqu'un puisse m'aider au plus vite.
    alors j'ai créé un programme en utilisant les recordsets DAO qui va chercher un fichier excel dans un dossier en fonction du numero de YK une fois trouvé il ouvre ce fichier et il renseigne deux cellules C12 et E14 avec des valeurs données d'un recordset.
    ceci fronctionne tres bien mais qu'une fois sur deux en me donnant comme message d'erreur "erreur d'execution 9" donc deja je ne comprends pas pour quoi.
    quand ca marche, je demande a mon programme d'enregistrer le fichier sous le non "valeur CELLULE E14".xlsx dans un dossier (en lui donnant le chemin du dossier) en faisant un test d'erreur tel que si le fichier existe deja je rajoute un indice "_01" qui normalement s'incremente si le "_01" existe deja ceci marchait tres bien mais plus maintenant j'ai utilisé ce meme programme pour un autre formulaire et ca marche parfaitement sauf pour celui la.
    voici mon programme vous serez plus eclairés:

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Private Sub decontamination_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim sql As String
    Dim tableur As Excel.Application
    Dim classeur As Excel.Workbook
    Dim feuil1 As Excel.Worksheet
    'Dim db As Database
    'Dim rs As Recordset
     
    sql = "SELECT [REQ Decontamination].* FROM [REQ Decontamination] WHERE [REQ Decontamination].[YKNumber]= """ & Me.txtYK & """"
    Set db = Application.CurrentDb
    Set rs = db.OpenRecordset(sql)
    If IsNull(Me.txtYK) Or Me.txtYK = "" Or Me.txtYK = "YK" Then
    MsgBox ("Veuillez entrer un numero de YK")
    Exit Sub
    End If
    If rs.BOF And rs.EOF Then
    MsgBox "Equipement " & Me.txtYK & " non contaminé"
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    Exit Sub
    End If
    If txtYK = rs![YKNumber] Then
    Do While Me.txtFIRNumber <> rs![FIRNumber]
     rs.MoveNext
     Loop
     If Me.txtFIRNumber <> rs![FIRNumber] Then
     MsgBox "Cette FIR ne figure pas dans la liste des equipements contaminés"
    End If
    If Me.txtFIRNumber = rs![FIRNumber] Then
    Dim chemin As String
    chemin = "T:\PUBLIC_SHARE\Repairs\SToRM\Décontamination\Décontamination " + Me.txtYK + "*.xlsx"
        Set tableur = CreateObject("Excel.Application")
        Set classeur = tableur.Workbooks.Open(chemin)
        Set feuil1 = tableur.ActiveSheet
    tableur.Visible = True
    Workbooks(chemin).Sheets("Feuil1").range("C12") = rs![SerieNum]
    Workbooks(chemin).Sheets("Feuil1").range("E14") = rs![FIRNumber]
    'Workbooks("Décontamination " + Me.txtYK + ".xlsx").Sheets("Feuil1").range("B39").Value = Workbooks("Décontamination " + Me.txtYK + ".xlsx").Sheets("Feuil1").range("B47").Value
     
    Dim Maintenant As Date
        Sheets("Feuil1").range("B47").Value = Date
        Maintenant = Sheets("Feuil1").range("B47").Value
    End If
    End If
    'on sauvegarde la fiche de décontamination
    Dim NomFichier As String
    Dim CheminSortie As String
    CheminSortie = "C:\Users\sha2817\Desktop\STORM\Decontamination"
    NomFichier = CheminSortie & "\" & rs![FIRNumber] & ".xlsx"
    Debut:
    If SCR.FileExist(NomFichier) Then
        If Not Left(Right(NomFichier, 7), 1) = "_" Then
            NomFichier = Left(NomFichier, Len(NomFichier) - 5) + "_01" + ".xlsx"
        Else
            num = Format(CStr((Left(Right(NomFichier, 6), 2)) + 1), "00")
            NomFichier = Left(NomFichier, Len(NomFichier) - 7) + "_" + num + ".xlsx"
        End If
    GoTo Debut
    End If
    tableur.ActiveWorkbook.SaveAs FileName:=NomFichier
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    Exit Sub
    Set classeur = Nothing
    Set tableur = Nothing
    End Sub
    si quelqu'un pouvait m'aider ca me sauverait la vie
    merci d'avance

  2. #2
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    C'est surement un problème lié au fait que tu pilotes Excel depuis Access.

    Il faut commencer par bien référencer les objets Excel que l'on va manipuler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Set tableur = CreateObject("Excel.Application")
            Set classeur = tableur.Workbooks.Open(chemin)
            Set feuil1 = classeur.Worksheets("Feuil1")
    Ensuite, il faudra toujours utiliser une des trois variables objets ci-dessus, et en particulier feuil1 pour écrire dans la feuille Excel.
    Ce qu'il ne faut surtout pas utiliser (parce qu'on n'est pas dans un module de code Excel):
    Ne pas utiliser Remplacer par
    Workbooks(chemin).Sheets("Feuil1") feuil1
    Sheets("Feuil1") feuil1

    Moins critique:
    tableur.ActiveWorkbook peut-être remplacé par classeur.

    Avant de quitter la procédure (sub) bien libérer les variables objets Excel (tu as un Exit Sub qui traine ligne 67).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    classeur.SaveAs FileName:=NomFichier
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    Set feuil1 = Nothing
    classeur.Close False
    Set classeur = Nothing
    Set tableur = Nothing
    A+

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    Bonjour,
    Merci @LedZeppII pour ton aide, comme je commence a peine avec access je ne savais pas que piloter un fichier excel a partir d'access necessitait quelques petites adaptations.
    mon probleme est donc resolu mais qu'a moitié car j'ai toujours le probleme des indices lors de l'enregistrement du fichier excel si ce dernier existe deja: pour etre plus claire quand j'enregistre la premiere fois dans mon dossier j'ai "T11062.xlsx" si j'enregistre une deuxieme fois jai "T11062_01.xlsx" une troisieme fois "T11062_01_01.xlsx" une quatrieme fois "T11062_01_01_01.xlsx" etc... alors que normalement la troisieme fois jaurais "T11062_02.xlsx", quatrieme "T11062_03.xlsx" etc...
    avec rs![FIRNumber]=T11062
    voici le bout de code en question
    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
     
    Dim NomFichier As String
    Dim CheminSortie As String
    CheminSortie = "C:\Users\sha2817\Desktop\STORM\Decontamination"
    NomFichier = CheminSortie & "\" & rs![FIRNumber] & ".xlsx"
    Debut:
    If SCR.FileExist(NomFichier) Then
        If Not Left(Right(NomFichier, 7), 1) = "_" Then
            NomFichier = Left(NomFichier, Len(NomFichier) - 5) + "_01" + ".xlsx"
        Else
            num = Format(CStr((Left(Right(NomFichier, 6), 2)) + 1), "00")
            NomFichier = Left(NomFichier, Len(NomFichier) - 7) + "_" + num + ".xlsx"
        End If
    GoTo Debut
    End If
    classeur.SaveAs FileName:=NomFichier
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    'classeur.Close False
    Set classeur = Nothing
    Set tableur = Nothing
    Set feuil1 = Nothing
    End Sub
    je tiens a rappeler que j'utilise le meme programme dans un autre formulaire et il fonctionne parfaitement donc je ne comprends pas pourquoi il refuse de me donner les resultats que je veux dans ce cas la.
    Merci encore pour votre aide
    en esperant une reponse rapide de votre part

  4. #4
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    On dirait que ton code est prévu pour des indices allant de 1 à 9 alors que tu gères des indices de 01 à 99.
    J'ai refait la logique de numérotation "à ma sauce", de telle manière que le code se débrouille tout seul.
    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
    Dim NomFichier As String
    Dim CheminSortie As String
    Dim num As Long, lPosDernierSlash As Long
    Dim sFmtIndice As String, sLikeIndice As String
     
    CheminSortie = "C:\Users\sha2817\Desktop\STORM\Decontamination"
    NomFichier = CheminSortie & "\" & rs![FIRNumber] & ".xlsx"
    sFmtIndice = "00"                           ' Format indice ("0", ou "00", ou "000", ...)
    sLikeIndice = Replace(sFmtIndice, "0", "#") ' Format indice pour 'Like'
    Debut:
    If SCR.FileExist(NomFichier) Then
        If Not (NomFichier Like "*_" + sLikeIndice + ".xlsx") Then
            NomFichier = Left(NomFichier, Len(NomFichier) - 5) + "_" + Format(1, sFmtIndice) + ".xlsx"
        Else
            lPosDernierSlash = InStrRev(NomFichier, "_")
            num = CLng(Mid(NomFichier, lPosDernierSlash + 1, Len(sFmtIndice))) + 1
            NomFichier = Left(NomFichier, InStrRev(NomFichier, "_")) + Format(num, sFmtIndice) + ".xlsx"
        End If
    GoTo Debut
    End If
     
    classeur.SaveAs FileName:=NomFichier
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    Set feuil1 = Nothing
    classeur.Close False
    Set classeur = Nothing
    Set tableur = Nothing
    Line 8 sFmtIndice = "00" on définit le nombre de chiffres pour l'indice ("0" pour un chiffre, "00" pour deux chiffres, "000" pour trois chiffres, ...)
    Pour extraire l'indice d'un nom de fichier existant, je me base sur la position du dernier caractère slash (\).

    A+

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    @LedZeppII Merci beaucoup ca marche tres bien.Ton code est plus logique que le mien.
    Je ne comprends toujours pas pour quoi il fonctionne tres bien pour l'autre formulaire mais bon ca restera un mystere.
    Encore une fois merci pour ton aide precieuse
    bonne fin de journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [access 2003] erreur d'execution 3137, point virgule absent
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/02/2008, 08h41
  2. [VBA-E] Help création d'un programme vba pour excel
    Par yampi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/01/2007, 11h46
  3. livre vba pour access
    Par Destiny dans le forum Access
    Réponses: 4
    Dernier message: 08/01/2007, 13h18
  4. Accès outlook par programmation VBA depuis access
    Par STOUPI dans le forum Access
    Réponses: 1
    Dernier message: 05/06/2006, 18h22
  5. Réponses: 3
    Dernier message: 06/09/2005, 10h27

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