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 :

Erreur d'execution 424: objet requis [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut Erreur d'execution 424: objet requis
    Bonjour

    J'ouvre un fichier excel à partir d'Access, je sélectionne des cellules et ensuite j'insere la valeur de chaque cellule sélectionnée dans une table avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each Cell In Selection
        sql1 = "INSERT INTO temp2 (a) SELECT " & Cell
        DoCmd.RunSQL sql1
        Next
    1 fois sur 2 j'ai le message "erreur d'execution 424: objet requis" qui surligne la ligne "for each cell in selection". En fait j'ai l'impression que les cellules sélectionnées dans Excel ne sont pas vues.
    Souvent cela marche à la 1ere manip mais des que je veux la refaire j'ai le message qui apparait. Savez-vous d'où cela peut provenir et comment y remédier svp?

    Pour les courageux voici le code en entier associé à la manip:
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    Dim fDlg As Office.FileDialog, strFichier As String
    Dim base As DAO.Database
     
    Dim resultat As DAO.Recordset
    Dim idm As String
     
    ' --------------------------
    ' Selection du fichier Excel
    ' --------------------------
    Set fDlg = Application.FileDialog(msoFileDialogOpen)
    ' Définition du ou des filtres
    fDlg.Filters.Clear
    fDlg.Filters.Add "Fichier Excel", "*.xl*"
    ' Dossier de départ
    fDlg.InitialFileName = USERPROFILE
    ' Type d'affichage
    fDlg.InitialView = msoFileDialogViewList
    If fDlg.Show Then
       strFichier = fDlg.SelectedItems(1)
    End If
    Set fDlg = Nothing
    ' Si l'utilisateur a cliqué sur Annuler quitter la procédure
    If Len(strFichier) = 0 Then Exit Sub
     
     
    ' --------------------------
    ' Ouverture du fichier Excel
    ' --------------------------
    DoCmd.SetWarnings False
    Dim xlApp As Object
        Dim path As String
     
        Set xlApp = CreateObject("Excel.Application")
     
        'Ouverture
       Set owkb = xlApp.Workbooks.Open(strFichier)
     
    z = MsgBox("Cliquez sur OK pour ouvrir le fichier Excel, sélectionnez ensuite la plage de cellules à insérer pour les TEMPERATURES et revenez sur cette application pour valider.", vbInformation + vbOKCancel, "Ouverture du fichier Excel")
    If z = vbCancel Then
    Exit Sub
    End If
     
    xlApp.Visible = True
     
    DoCmd.RunSQL "delete * from temp2" 'on vide table temp2 avant de la remplir
     
    'insertion de la 1ere colonne de données
    Y = MsgBox("Valider la sélection des cellules à insérer pour la température?", vbQuestion + vbOKCancel, "Insertion des données de températures")
    If Y = vbCancel Then
    xlApp.ActiveWorkbook.Saved = True
    xlApp.Quit
    Exit Sub
    End If
     
    owkb.Activate
    owkb.ActiveSheet.Select
     
        For Each Cell In Selection
        sql1 = "INSERT INTO temp2 (a) SELECT " & Cell
        DoCmd.RunSQL sql1
        Next
     
     
    MsgBox "Données des températures insérées!" & Chr(10) & "Cliquez sur OK pour sélectionnez maintenant les cellules concernant les données de DILATATION et revenez sur cette application pour valider", vbInformation, "Insertion de données"
    xlApp.Visible = True
     
    'insertion de la 2e colonne de données
    w = MsgBox("Valider la sélection des cellules à insérer pour la dilatation?", vbQuestion + vbOKCancel, "Insertion des données de dilatation")
    If w = vbCancel Then
    xlApp.ActiveWorkbook.Saved = True
    xlApp.Quit
    Exit Sub
    End If
     
    'verification si nbre données Temp=nbre données dilatation
    r1 = DLookup("comptedea", "R_cptatemp2") 'requete qui compte le nombre de données de la 1ere colonne insérée
    t = Selection.Count ' compte le nombre de cellules sélectionnées dans excel pour la 2e colonne
    If r1 <> t Then
    MsgBox "Le nombre de données insérées pour la température ne correspond pas au nombre de données insérées pour la dilatation!" & Chr(10) & "Veuillez recommencer la saisie!", vbCritical, "erreur de saisie des données"
    xlApp.ActiveWorkbook.Saved = True
    xlApp.Quit
    Exit Sub
    End If
     
    owkb.Activate
    owkb.ActiveSheet.Select
     
    Set base = CurrentDb()
    Set resultat = base.OpenRecordset("temp2")
    With resultat
     
        For Each Cell In Selection
     
                    .Edit
                    .Fields("b") = Round(Cell, 3)
                    .Update
                    .MoveNext
        Next
    End With
    resultat.Close
    Set resultat = Nothing
    xlApp.ActiveWorkbook.Saved = True
    xlApp.Quit
     
    DoCmd.RunCommand acCmdSave
     
    MsgBox "Insertion des données effectuée avec succés!", vbInformation, "Insertion des données"
     
    DoCmd.Close acForm, "dilato"

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Cela ne serait-il pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each Cell In Selection
        sql1 = "INSERT INTO temp2 (a) VALUES (" & Cell & ")"
        DoCmd.RunSQL sql1
    Next
    @+.

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    Salut
    je viens d'essayer mais cela ne change rien mais je t'avoue que la fois où cela marche sans erreur, les données d'insèrent bien dans la table

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Cell est une valeur numérique !

    Sinon, il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each Cell In Selection
        sql1 = "INSERT INTO temp2 (a) VALUES ('" & Cell & "')"
        DoCmd.RunSQL sql1
    Next
    @+.

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    désolé, toujours pas

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    en fait il surligne toujours la ligne "for each cell..." et quand je mets le curseur sur cette ligne il affiche cell=vide

  7. #7
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    C'est normal ! Si la cellule est vide, il faut faire un test que si la cellule est vide il passe à la suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each Cell In Selection
        if not(isnull(Cell) then
            sql1 = "INSERT INTO temp2 (a) VALUES ('" & Cell & "')"
            DoCmd.RunSQL sql1
        end if
    Next
    @+.

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    je vais faire l'essai mais ce que je ne comprends pas c'est que toutes les cellules que je sélectionne ne sont pas vides.

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    Toujours pas désolé. Même ligne avec erreur, ce qui parait logique puisqu'on lui fait faire la verif si la cellule est vide juste après. Ce qui semblerait cependant vouloir dire que l'erreur ne vient pas du contenu de la cellule mais plus du fait qu'il ne voit pas la selection.

  10. #10
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Je viens de voir le code entier, le problème est que tu ne définis pas ce qu'est Cell, donc il ne le trouve pas et ne peut donc pas travailler avec.

    @+.

  11. #11
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    il s'agit d'un bout de code que j'ai récupéré. Que dois-je lui mettre comme nature de definition stp

  12. #12
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Voici un bout de code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Set oAppExcel = CreateObject("Excel.Application")
        Set oClasseur = oAppExcel.Workbooks.Open(strFichier)
        Set oFeuille = oClasseur.Worksheets(1)
     
        'La colonne A contient les données
        ligne = oFeuille.Range("A65536").End(xlUp).Offset(1, 0).Row - 1
        For i = 1 To ligne
            sql1 = "INSERT INTO temp2 (a) VALUES ('" & oFeuille.Range("A" & i).Value & "')"
            DoCmd.RunSQL sql1
        Next
        oAppExcel.Quit
        Set oAppExcel = Nothing
        Set oClasseur = Nothing
    @+.

  13. #13
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    merci de ton aide mais je suis désolé de faire le pénible. je ne peux pas utiliser ce code car les données à récupérer dans les fichiers excel ne sont jamais au même endroit et le seul moyen de les récupérer est de les selectionner d'où l'utilisation de mon code "for each cell in selection". si tu vois un autre moyen je suis preneur

  14. #14
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Tierisa Voir le message
    car les données à récupérer dans les fichiers excel ne sont jamais au même endroit
    Qu'entends-tu par au même endroit ?

    @+.

  15. #15
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    elles ne commencent jamais à la meme ligne ni à la meme colonne et les 2 colonnes à récupérer ne sont pas systématiquement côte à côte

  16. #16
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    bonjour
    concernant ce sujet que je n'ai toujours pas résolu, j'ai une info supplémentaire: malgre le fait que je demande de fermer Excel à la fin du code avec "oAppExcel.Quit", quand je verifie dans le gestionnaire des taches, Excel est toujours ouvert en fond et c'est pour cela que ça bug.
    Comment faire pour lui faire vraiment fermer cette instance excel svp?

  17. #17
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour ,

    essaie de rajouter cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oAppExcel = nothing

  18. #18
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    merci. Effectivement je l'avais oublié mais cependant cela ne résoud pas le pb

  19. #19
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    J'avais eu un problème similaire à partir d'un programme MSPoject, et je m'en était tiré de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Fermeture des instances d'Excel
                ExcelWorkbook.Save
                Set excelsheet = Nothing
                ExcelWorkbook.Close
                ExcelApp.Quit
    Essaye de faire la même chose

  20. #20
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    ne marche pas non plus désolé

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

Discussions similaires

  1. Erreur d'execution 424 objet requis
    Par mrsx37 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/02/2012, 12h55
  2. erreur d'execution 424 objet requis
    Par Mandrill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/07/2009, 14h03
  3. [XL-2003] erreur d'execution 424 objet requis
    Par olivier1289 dans le forum Excel
    Réponses: 2
    Dernier message: 23/05/2009, 02h22
  4. [VBA-E] erreur d'execution 424 - objet requis
    Par ludo02 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/02/2007, 11h29
  5. Erreur d'execution '424' : Objet requis
    Par deglingo37 dans le forum Access
    Réponses: 3
    Dernier message: 09/10/2006, 17h47

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