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 :

[VBA]Pb de programmation avec FindFirst


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut [VBA]Pb de programmation avec FindFirst
    Bonjour,

    J'ai un module me permettant d'importer des données à partir de fichier excel. Dans ce module, j'importe les informations dans une table temporaire (CONTACTS_IMPORT) et je souhaite pouvoir ajouter ou modifier les enregistrements qui existent déja dans ma table (nommé CONTACTS).

    Voila le 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
    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
        On Error GoTo Err_cmd_Importer_Click
     
            'Controle l'accès
        If F_Administrateur = False Then
           MsgBox "Vous n'avez pas le droit d'y accéder  (^_^)   !!", vbOKOnly, "Droit d'accès"
           Exit Sub
        End If
     
        Dim dbs As DAO.Database, Rst As DAO.Recordset, Rst_Import As DAO.Recordset
        Dim Exist_Enr As Boolean
     
        Set dbs = CurrentDb
        Set Rst_Import = dbs.OpenRecordset("CONTACTS_IMPORT")
     
            'Importation de fichier *.XLS
            'Utilisation de la fenêtre FichierSélect pour l'importation à partir d'excel
     
        Dim repert, feuille, base As String, fic As Variant
        Dim cible, CibleData As String
        Dim strSQL As String
     
        base = "cibleImport"
                    'récupération du fichier à importer
        Crit = "[base] ='" & base & "'"
        m_bouton = "Valider la Sélection"
        m_sélFicAnnulé = True
        DoCmd.OpenForm "FichierSélect", acNormal, , Crit, acFormEdit, acDialog
        If m_sélFicAnnulé Then Exit Sub
                    'récupération du répertoire sélectionné
        repert = DLookup("[répertoire]", "Variables", Crit)
        fic = DLookup("[fich_Data]", "Variables", Crit)
                    'nettoyage et récupération des données
        videTable "CONTACTS_IMPORT"
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "CONTACTS_IMPORT", repert & fic, True
     
        delTableImportErrors
     
            'controle de décalage pb de point virgule
        ChampListeCréa
     
     
        Set Rst = dbs.OpenRecordset("CONTACTS")
     
        With Rst_Import
            .MoveFirst
            Do While Not .EOF
                Rst.FindFirst ("Cont_CodeInterne = '" & !Cont_CodeInterne & "'")
                If Rst.NoMatch Then     'Ne trouve pas l'enregistrement
                    Rst.AddNew
                Else
                    Rst.Edit
                End If
     
                'Rst.AddNew
                Rst!Cont_CodeInterne = !Cont_CodeInterne
                Rst!Cont_societe = !Cont_societe
                Rst!Cont_Societe2 = !Cont_Societe2
                Rst!Cont_Civilite = !Cont_Civilite
                Rst!Cont_Nom = !Cont_Nom
                Rst!Cont_Prenom = !Cont_Prenom
                Rst!Cont_Fonction = !Cont_Fonction
                Rst!Cont_Adr1 = !Cont_Adr1
                Rst!Cont_Adr2 = !Cont_Adr2
                Rst!Cont_Adr3 = !Cont_Adr3
                Rst!Cont_Cp = !Cont_Cp
                Rst!Cont_Ville = !Cont_Ville
                Rst!Cont_PrefixePays = !Cont_PrefixePays
                Rst!Cont_TelStandard = !Cont_TelStandard
                Rst!Cont_TelDirect = !Cont_TelDirect
                Rst!Cont_TelPortable = !Cont_TelPortable
                Rst!Cont_Fax = !Cont_Fax
                Rst!Cont_Mail = !Cont_Mail
                Rst!Cont_TailleSociete = !Cont_TailleSociete
                Rst!Cont_Inst = !Cont_Inst
                Rst!Cont_Expl = !Cont_Expl
                Rst!Cont_Ind = !Cont_Ind
                Rst!Cont_UtilisateurFinal = !Cont_UtilisateurFinal
                Rst!Cont_Distr = !Cont_Distr
                Rst!Cont_Deshumidifacation = !Cont_Deshumidifacation
                Rst!Cont_Humidification = !Cont_Humidification
                Rst!Cont_Deshydratation = !Cont_Deshydratation
                Rst!Cont_Climatisation = !Cont_Climatisation
                Rst!Cont_Chauffage = !Cont_Chauffage
                Rst!Cont_EnergRenouvenable = !Cont_EnergRenouvenable
                Rst!Cont_Commercial = !Cont_Commercial
                Rst!Cont_Commentaire = !Cont_Commentaire
                Rst!Cont_Commentaire1 = !Cont_Commentaire1
                Rst!cont_Commentaire2 = !cont_Commentaire2
                Rst!Cont_Selection = !Cont_Selection
                Rst!Cont_TypeClient = !Cont_TypeClient
                Rst!Cont_Part = !Cont_Part
                Rst!Cont_Divers = !Cont_Divers
                Rst!Cont_BE = !Cont_BE
                Rst!Cont_DateDerniereVisite = !Cont_DateDerniereVisite
     
                Rst.Update
                .MoveNext
            Loop
        End With
     
        Me.Refresh
        MsgBox "Importation des données terminées.", vbApplicationModal + vbOKOnly, "Importation de données"
     
            'Décharge la mémoire
        Rst.Close
        Rst_Import.Close
        Set Rst = Nothing
        Set Rst_Import = Nothing
        Set dbs = Nothing
     
    Exit_Err_cmd_Importer_Click:
        DoCmd.SetWarnings True
        Exit Sub
     
    Err_cmd_Importer_Click:
        MsgBox Error$
        Resume Exit_Err_cmd_Importer_Click
    Lorsque je lance l'importation, une erreur survient sur la permière ligne de cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                Rst.FindFirst ("Cont_CodeInterne = '" & !Cont_CodeInterne & "'")
                If Rst.NoMatch Then     'Ne trouve pas l'enregistrement
                    Rst.AddNew
                Else
                    Rst.Edit
                End If
    Donc j'aimerai savoir s'il est possible de programmer comme ça et sinon quelle serait mon erreur.

    Je précise aussi que l'erreur est : 3251 Opération non autorisé pour ce type d'objet.

    Si l'un(e) d'entre vous a une idée sur ce problème ça me dépannerait bien.

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    C'est une attrape de Access qui m'a fait rager pendant pas mal de temps.

    Quand tu ouvres une table Access elle ne se comporte pas par dégaut comme un recordset standard.

    Voilà la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rst = dbs.OpenRecordset("CONTACTS",dbOpenDynaset)
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par marot_r Voir le message
    C'est une attrape de Access qui m'a fait rager pendant pas mal de temps.

    Quand tu ouvres une table Access elle ne se comporte pas par dégaut comme un recordset standard.

    Voilà la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rst = dbs.OpenRecordset("CONTACTS",dbOpenDynaset)
    A+

    Ca marche nickel . Merci de ton aide.

    Une petite question toutefois par curiosité et pour + tard :
    Cela signifie t'il qu'il faut à chaque fois préciser le type d'ouverture lorsque tu fais ton SET ?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Citation Envoyé par Misha Voir le message
    Cela signifie t'il qu'il faut à chaque fois préciser le type d'ouverture lorsque tu fais ton SET ?
    Si par exemple tu ouvres une requète ou une table lié, dbOpenDynaset est la valeur par défaut. Comme l'erreur est facilement repérable et que l'on change rarement la source d'un recordset, il m'arrive de ne pas le mettre.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Si par exemple tu ouvres une requète ou une table lié, dbOpenDynaset est la valeur par défaut. Comme l'erreur est facilement repérable et que l'on change rarement la source d'un recordset, il m'arrive de ne pas le mettre.

    A+
    Valeur par défaut signifie quand même qu'on est pas obligé de la mettre non ? Alors pourquoi je dois le préciser à ce moment précis ?

    A+

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    La valeur par défaut dépend du type d'objet que tu utilise comme source de ton recordset.

    Pour les requêtes et les tables liées, c'est DBOpenDynaset pour les tables c'est DoOpenTable.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    D'accord.

    Merci pour les infos.

    A+

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

Discussions similaires

  1. Programmer avec vba et excel 2007
    Par logaiete dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 21/11/2014, 23h04
  2. [XL-2007] Programme VBA pour confection tableau avec n°article en reference
    Par gabigabou dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/05/2014, 21h38
  3. [Toutes versions] [Livre] Introduction à la programmation avec VBA
    Par Didier Gonard dans le forum Excel
    Réponses: 2
    Dernier message: 29/12/2012, 19h42

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