bonjour à tous alors voila j ai une connexion entre excel et accès mais le problème lors de l échange d information (si des données sont déjà saisi et que la procédure veut les exporter vers access un beug ce produit car il ya des doublons dans les clefs primaires). Donc je voulais savoir si vous connaissez une procédure qui peut comparer mes plages de cellules avec les tables que si ya des doublons elle ne fassent rien avec ces données et pour le reste elle les tranfère vers accès.
Merci à vous
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christophe JEAN
Slt Il y a quelques temps, j'avais répondu à un message similaire (mais qui demandait le traitement complet) avec la prociédure suivante. Ce qui doit t'intéressé ce sont les instructions entre ¤¤¤¤¤¤¤¤.
A+
Sub LA_SUPER_PROCEDURE_QUI_ENVOIE_DES_DONNEES_VERS_ACCESS() 'pour cette constante, tu change le nom de cettee base de données Const strNomDB As String = "C:Program FilesMicrosoft OfficeOFFICE11SAMPLESComptoir.mdb" 'Déclarations des Variables Dim oDB As Object Dim dbComptoir As DAO.Database Dim rsClient As DAO.Recordset 'Déclaration des variables pour récupérer les données Dim strID As String Dim strNom As String Dim strContact As String Dim strFonction As String Dim strAdresse As String Dim strCP As String Dim strVille As String Dim strRegion As String Dim strPays As String Dim strTel As String Dim strFax As String 'Récupération des données strID = [A2].Value strNom = [B2].Value strContact = [C2].Value strFonction = [D2].Value strAdresse = [E2].Value strCP = [H2].Value strVille = [F2].Value strRegion = [G2].Value strPays = [I2].Value strTel = [J2].Value strFax = [K2].Value 'Envoi de ces données vers La table "Clients" de la base de données "Comptoirs" Set oDB = CreateObject("Access.Application") With oDB 'Création des objets automation Set dbComptoir = .dbEngine.WorkSpaces(0).OpenDatabase(strNomDB) Set rsClient = dbComptoir.OpenRecordset("Clients", dbOpenTable) 'Vérification de l'enregistrement est bien inexistant dans la table '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ rsClient.Index = "PrimaryKey" rsClient.Seek "=", strID If Not rsClient.NoMatch Then Beep MsgBox "Ce client a déjà été saisi dans la table", _ vbExclamation, "Attention doublon dans la saisie" Exit Sub End If '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ 'Sinon on ajoute les données dans la table rsClient.AddNew rsClient![Code client] = strID rsClient![Société] = strNom rsClient![Contact] = strContact rsClient![Fonction] = strFonction rsClient![Adresse] = strAdresse rsClient![Code Postal] = strCP rsClient![Ville] = strVille rsClient![Région] = strRegion rsClient![Pays] = strPays rsClient![Téléphone] = strTel rsClient![Fax] = strFax rsClient.Update End With 'Fermeture des objets rsClient.Close dbComptoir.Close Range("A2:K2").ClearContents End Sub
Slt
Il y a quelques temps, j'avais répondu à un message similaire (mais qui
demandait le traitement complet) avec la prociédure suivante. Ce qui doit
t'intéressé ce sont les instructions entre ¤¤¤¤¤¤¤¤.
A+
Sub LA_SUPER_PROCEDURE_QUI_ENVOIE_DES_DONNEES_VERS_ACCESS()
'pour cette constante, tu change le nom de cettee base de données
Const strNomDB As String = "C:Program FilesMicrosoft
OfficeOFFICE11SAMPLESComptoir.mdb"
'Déclarations des Variables
Dim oDB As Object
Dim dbComptoir As DAO.Database
Dim rsClient As DAO.Recordset
'Déclaration des variables pour récupérer les données
Dim strID As String
Dim strNom As String
Dim strContact As String
Dim strFonction As String
Dim strAdresse As String
Dim strCP As String
Dim strVille As String
Dim strRegion As String
Dim strPays As String
Dim strTel As String
Dim strFax As String
'Récupération des données
strID = [A2].Value
strNom = [B2].Value
strContact = [C2].Value
strFonction = [D2].Value
strAdresse = [E2].Value
strCP = [H2].Value
strVille = [F2].Value
strRegion = [G2].Value
strPays = [I2].Value
strTel = [J2].Value
strFax = [K2].Value
'Envoi de ces données vers La table "Clients" de la base de données
"Comptoirs"
Set oDB = CreateObject("Access.Application")
With oDB
'Création des objets automation
Set dbComptoir = .dbEngine.WorkSpaces(0).OpenDatabase(strNomDB)
Set rsClient = dbComptoir.OpenRecordset("Clients", dbOpenTable)
'Vérification de l'enregistrement est bien inexistant dans la table
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
rsClient.Index = "PrimaryKey"
rsClient.Seek "=", strID
If Not rsClient.NoMatch Then
Beep
MsgBox "Ce client a déjà été saisi dans la table", _
vbExclamation, "Attention doublon dans la saisie"
Exit Sub
End If
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
'Sinon on ajoute les données dans la table
rsClient.AddNew
rsClient![Code client] = strID
rsClient![Société] = strNom
rsClient![Contact] = strContact
rsClient![Fonction] = strFonction
rsClient![Adresse] = strAdresse
rsClient![Code Postal] = strCP
rsClient![Ville] = strVille
rsClient![Région] = strRegion
rsClient![Pays] = strPays
rsClient![Téléphone] = strTel
rsClient![Fax] = strFax
rsClient.Update
End With
'Fermeture des objets
rsClient.Close
dbComptoir.Close
Range("A2:K2").ClearContents
End Sub
Slt Il y a quelques temps, j'avais répondu à un message similaire (mais qui demandait le traitement complet) avec la prociédure suivante. Ce qui doit t'intéressé ce sont les instructions entre ¤¤¤¤¤¤¤¤.
A+
Sub LA_SUPER_PROCEDURE_QUI_ENVOIE_DES_DONNEES_VERS_ACCESS() 'pour cette constante, tu change le nom de cettee base de données Const strNomDB As String = "C:Program FilesMicrosoft OfficeOFFICE11SAMPLESComptoir.mdb" 'Déclarations des Variables Dim oDB As Object Dim dbComptoir As DAO.Database Dim rsClient As DAO.Recordset 'Déclaration des variables pour récupérer les données Dim strID As String Dim strNom As String Dim strContact As String Dim strFonction As String Dim strAdresse As String Dim strCP As String Dim strVille As String Dim strRegion As String Dim strPays As String Dim strTel As String Dim strFax As String 'Récupération des données strID = [A2].Value strNom = [B2].Value strContact = [C2].Value strFonction = [D2].Value strAdresse = [E2].Value strCP = [H2].Value strVille = [F2].Value strRegion = [G2].Value strPays = [I2].Value strTel = [J2].Value strFax = [K2].Value 'Envoi de ces données vers La table "Clients" de la base de données "Comptoirs" Set oDB = CreateObject("Access.Application") With oDB 'Création des objets automation Set dbComptoir = .dbEngine.WorkSpaces(0).OpenDatabase(strNomDB) Set rsClient = dbComptoir.OpenRecordset("Clients", dbOpenTable) 'Vérification de l'enregistrement est bien inexistant dans la table '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ rsClient.Index = "PrimaryKey" rsClient.Seek "=", strID If Not rsClient.NoMatch Then Beep MsgBox "Ce client a déjà été saisi dans la table", _ vbExclamation, "Attention doublon dans la saisie" Exit Sub End If '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ 'Sinon on ajoute les données dans la table rsClient.AddNew rsClient![Code client] = strID rsClient![Société] = strNom rsClient![Contact] = strContact rsClient![Fonction] = strFonction rsClient![Adresse] = strAdresse rsClient![Code Postal] = strCP rsClient![Ville] = strVille rsClient![Région] = strRegion rsClient![Pays] = strPays rsClient![Téléphone] = strTel rsClient![Fax] = strFax rsClient.Update End With 'Fermeture des objets rsClient.Close dbComptoir.Close Range("A2:K2").ClearContents End Sub
salut, oui je sais c'était pour moi mais j'ai toujours ce problème au niveau des comparaisons, si tu pouvais m'expliquer seulement la procédure de comparaison sans le transfert ca serait bien sympa merci
-----Message d'origine----- Slt Il y a quelques temps, j'avais répondu à un message similaire (mais qui
demandait le traitement complet) avec la prociédure suivante. Ce qui doit
t'intéressé ce sont les instructions entre ¤¤¤¤¤¤¤¤.
A+
Sub LA_SUPER_PROCEDURE_QUI_ENVOIE_DES_DONNEES_VERS_ACCESS()
'pour cette constante, tu change le nom de cettee base de données
Const strNomDB As String = "C:Program FilesMicrosoft OfficeOFFICE11SAMPLESComptoir.mdb" 'Déclarations des Variables Dim oDB As Object Dim dbComptoir As DAO.Database Dim rsClient As DAO.Recordset 'Déclaration des variables pour récupérer les données Dim strID As String Dim strNom As String Dim strContact As String Dim strFonction As String Dim strAdresse As String Dim strCP As String Dim strVille As String Dim strRegion As String Dim strPays As String Dim strTel As String Dim strFax As String 'Récupération des données strID = [A2].Value strNom = [B2].Value strContact = [C2].Value strFonction = [D2].Value strAdresse = [E2].Value strCP = [H2].Value strVille = [F2].Value strRegion = [G2].Value strPays = [I2].Value strTel = [J2].Value strFax = [K2].Value 'Envoi de ces données vers La table "Clients" de la base de données
"Comptoirs" Set oDB = CreateObject("Access.Application") With oDB 'Création des objets automation Set dbComptoir = .dbEngine.WorkSpaces(0). OpenDatabase(strNomDB)
Set rsClient = dbComptoir.OpenRecordset("Clients", dbOpenTable)
'Vérification de l'enregistrement est bien inexistant dans la table
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ rsClient.Index = "PrimaryKey" rsClient.Seek "=", strID If Not rsClient.NoMatch Then Beep MsgBox "Ce client a déjà été saisi dans la table", _
vbExclamation, "Attention doublon dans la saisie"
Exit Sub End If '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ 'Sinon on ajoute les données dans la table rsClient.AddNew rsClient![Code client] = strID rsClient![Société] = strNom rsClient![Contact] = strContact rsClient![Fonction] = strFonction rsClient![Adresse] = strAdresse rsClient![Code Postal] = strCP rsClient![Ville] = strVille rsClient![Région] = strRegion rsClient![Pays] = strPays rsClient![Téléphone] = strTel rsClient![Fax] = strFax rsClient.Update End With 'Fermeture des objets rsClient.Close dbComptoir.Close Range("A2:K2").ClearContents End Sub
.
salut, oui je sais c'était pour moi mais j'ai toujours ce
problème au niveau des comparaisons, si tu pouvais
m'expliquer seulement la procédure de comparaison sans le
transfert ca serait bien sympa merci
-----Message d'origine-----
Slt
Il y a quelques temps, j'avais répondu à un message
similaire (mais qui
demandait le traitement complet) avec la prociédure
suivante. Ce qui doit
t'intéressé ce sont les instructions entre ¤¤¤¤¤¤¤¤.
A+
Sub
LA_SUPER_PROCEDURE_QUI_ENVOIE_DES_DONNEES_VERS_ACCESS()
'pour cette constante, tu change le nom de cettee base de
données
Const strNomDB As String = "C:Program FilesMicrosoft
OfficeOFFICE11SAMPLESComptoir.mdb"
'Déclarations des Variables
Dim oDB As Object
Dim dbComptoir As DAO.Database
Dim rsClient As DAO.Recordset
'Déclaration des variables pour récupérer les données
Dim strID As String
Dim strNom As String
Dim strContact As String
Dim strFonction As String
Dim strAdresse As String
Dim strCP As String
Dim strVille As String
Dim strRegion As String
Dim strPays As String
Dim strTel As String
Dim strFax As String
'Récupération des données
strID = [A2].Value
strNom = [B2].Value
strContact = [C2].Value
strFonction = [D2].Value
strAdresse = [E2].Value
strCP = [H2].Value
strVille = [F2].Value
strRegion = [G2].Value
strPays = [I2].Value
strTel = [J2].Value
strFax = [K2].Value
'Envoi de ces données vers La table "Clients" de la base
de données
"Comptoirs"
Set oDB = CreateObject("Access.Application")
With oDB
'Création des objets automation
Set dbComptoir = .dbEngine.WorkSpaces(0).
OpenDatabase(strNomDB)
Set rsClient = dbComptoir.OpenRecordset("Clients",
dbOpenTable)
'Vérification de l'enregistrement est bien inexistant
dans la table
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
rsClient.Index = "PrimaryKey"
rsClient.Seek "=", strID
If Not rsClient.NoMatch Then
Beep
MsgBox "Ce client a déjà été saisi dans la table",
_
vbExclamation, "Attention doublon dans la
saisie"
Exit Sub
End If
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
'Sinon on ajoute les données dans la table
rsClient.AddNew
rsClient![Code client] = strID
rsClient![Société] = strNom
rsClient![Contact] = strContact
rsClient![Fonction] = strFonction
rsClient![Adresse] = strAdresse
rsClient![Code Postal] = strCP
rsClient![Ville] = strVille
rsClient![Région] = strRegion
rsClient![Pays] = strPays
rsClient![Téléphone] = strTel
rsClient![Fax] = strFax
rsClient.Update
End With
'Fermeture des objets
rsClient.Close
dbComptoir.Close
Range("A2:K2").ClearContents
End Sub
salut, oui je sais c'était pour moi mais j'ai toujours ce problème au niveau des comparaisons, si tu pouvais m'expliquer seulement la procédure de comparaison sans le transfert ca serait bien sympa merci
-----Message d'origine----- Slt Il y a quelques temps, j'avais répondu à un message similaire (mais qui
demandait le traitement complet) avec la prociédure suivante. Ce qui doit
t'intéressé ce sont les instructions entre ¤¤¤¤¤¤¤¤.
A+
Sub LA_SUPER_PROCEDURE_QUI_ENVOIE_DES_DONNEES_VERS_ACCESS()
'pour cette constante, tu change le nom de cettee base de données
Const strNomDB As String = "C:Program FilesMicrosoft OfficeOFFICE11SAMPLESComptoir.mdb" 'Déclarations des Variables Dim oDB As Object Dim dbComptoir As DAO.Database Dim rsClient As DAO.Recordset 'Déclaration des variables pour récupérer les données Dim strID As String Dim strNom As String Dim strContact As String Dim strFonction As String Dim strAdresse As String Dim strCP As String Dim strVille As String Dim strRegion As String Dim strPays As String Dim strTel As String Dim strFax As String 'Récupération des données strID = [A2].Value strNom = [B2].Value strContact = [C2].Value strFonction = [D2].Value strAdresse = [E2].Value strCP = [H2].Value strVille = [F2].Value strRegion = [G2].Value strPays = [I2].Value strTel = [J2].Value strFax = [K2].Value 'Envoi de ces données vers La table "Clients" de la base de données
"Comptoirs" Set oDB = CreateObject("Access.Application") With oDB 'Création des objets automation Set dbComptoir = .dbEngine.WorkSpaces(0). OpenDatabase(strNomDB)
Set rsClient = dbComptoir.OpenRecordset("Clients", dbOpenTable)
'Vérification de l'enregistrement est bien inexistant dans la table
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ rsClient.Index = "PrimaryKey" rsClient.Seek "=", strID If Not rsClient.NoMatch Then Beep MsgBox "Ce client a déjà été saisi dans la table", _
vbExclamation, "Attention doublon dans la saisie"
Exit Sub End If '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ 'Sinon on ajoute les données dans la table rsClient.AddNew rsClient![Code client] = strID rsClient![Société] = strNom rsClient![Contact] = strContact rsClient![Fonction] = strFonction rsClient![Adresse] = strAdresse rsClient![Code Postal] = strCP rsClient![Ville] = strVille rsClient![Région] = strRegion rsClient![Pays] = strPays rsClient![Téléphone] = strTel rsClient![Fax] = strFax rsClient.Update End With 'Fermeture des objets rsClient.Close dbComptoir.Close Range("A2:K2").ClearContents End Sub
.
michdenis
Bonjour j0b,
Pourquoi ne pas transférer tout ton tableau des données que tu as dans ta feuille excel dans une table "temporaire" d'access. De mémoire, si tu fais dans access un requête "Ajout" pour transférer tes données de ta table "Temp" vers la table réelle de destination, Access va refuser de lui-même lors de la transaction d'ajouter les enregistrements qui sont des doublons (pour le champ de la clé primaire ....Attention, il y a d'autres conditions pour lesquelles access peut refuser de valider un enregistrement ...) et il va créer de lui-même comme un grand une table avec tous les enregistrements qu'il aura refuser. Cela devrait être beaucoup plus rapide que d'effectuer une vérification systématique pour tous les enregistrements de ton tableau.
Si tu veux vérifier enregistrements par enregistrements, il y a ceci :
Attention, tu dois ajouter la référence suivante à ton projet Excel :
" Microsoft DAO 3.6 objects librairy "
'------------------------------------------- Sub RechercherDataAccessPourExcel()
Dim MyRange As Range, C As Range, RgExport As Range Dim db As Database Dim RstTrouve As Recordset Dim Chaine As String
Set db = OpenDatabase("C:LotusMes Documentsbd2.mdb") Set RstTrouve = db.OpenRecordset("Etudiant", dbOpenDynaset) RstTrouve.MoveLast RstTrouve.MoveFirst
Set MyRange = Worksheets("Feuil1").Range("A1:A25")
For Each C In MyRange Chaine = Trim(C.Value) Application.EnableEvents = False With RstTrouve .MoveFirst 'Remplace NomEtudiant par le nom du champ 'de la clé primaire .FindFirst "[NomEtudiant] = " & Chr(34) & Chaine & Chr(34) If .NoMatch = False Then 'Si il trouve, tu masques la ligne C.EntireRow.Hidden = True End If End With Next
'Ajoute le code pour ne transférer que seulement les enregistrements 'dont les lignes sont visibles. Pour ce faire tu peux utiliser 'la méthode SpecialCells de l'objet Range Set RgExport = MyRange.SpecialCells(xlCellTypeVisible) 'Applique ta procédure pour ajouter le range RgExport à 'ta table dans access.
'Et tu démasques les lignes dans ta plage de cellules.
Set C = Nothing: Set MyRange = Nothing: Set RgExport = Nothing RstTrouve.Close: db.Close Set RstTrouve = Nothing: Set db = Nothing Application.EnableEvents = True End If
End Sub '-------------------------------------------
Salutations!
"j0b" a écrit dans le message de news:415565cc$0$13520$ bonjour à tous alors voila j ai une connexion entre excel et accès mais le problème lors de l échange d information (si des données sont déjà saisi et que la procédure veut les exporter vers access un beug ce produit car il ya des doublons dans les clefs primaires). Donc je voulais savoir si vous connaissez une procédure qui peut comparer mes plages de cellules avec les tables que si ya des doublons elle ne fassent rien avec ces données et pour le reste elle les tranfère vers accès. Merci à vous
Bonjour j0b,
Pourquoi ne pas transférer tout ton tableau des données que tu as dans ta feuille excel dans une table "temporaire" d'access.
De mémoire, si tu fais dans access un requête "Ajout" pour transférer tes données de ta table "Temp" vers la table réelle de
destination, Access va refuser de lui-même lors de la transaction d'ajouter les enregistrements qui sont des doublons (pour
le champ de la clé primaire ....Attention, il y a d'autres conditions pour lesquelles access peut refuser de valider un
enregistrement ...) et il va créer de lui-même comme un grand une table avec tous les enregistrements qu'il aura refuser.
Cela devrait être beaucoup plus rapide que d'effectuer une vérification systématique pour tous les enregistrements de ton
tableau.
Si tu veux vérifier enregistrements par enregistrements, il y a ceci :
Attention, tu dois ajouter la référence suivante à ton projet Excel :
" Microsoft DAO 3.6 objects librairy "
'-------------------------------------------
Sub RechercherDataAccessPourExcel()
Dim MyRange As Range, C As Range, RgExport As Range
Dim db As Database
Dim RstTrouve As Recordset
Dim Chaine As String
Set db = OpenDatabase("C:LotusMes Documentsbd2.mdb")
Set RstTrouve = db.OpenRecordset("Etudiant", dbOpenDynaset)
RstTrouve.MoveLast
RstTrouve.MoveFirst
Set MyRange = Worksheets("Feuil1").Range("A1:A25")
For Each C In MyRange
Chaine = Trim(C.Value)
Application.EnableEvents = False
With RstTrouve
.MoveFirst
'Remplace NomEtudiant par le nom du champ
'de la clé primaire
.FindFirst "[NomEtudiant] = " & Chr(34) & Chaine & Chr(34)
If .NoMatch = False Then
'Si il trouve, tu masques la ligne
C.EntireRow.Hidden = True
End If
End With
Next
'Ajoute le code pour ne transférer que seulement les enregistrements
'dont les lignes sont visibles. Pour ce faire tu peux utiliser
'la méthode SpecialCells de l'objet Range
Set RgExport = MyRange.SpecialCells(xlCellTypeVisible)
'Applique ta procédure pour ajouter le range RgExport à
'ta table dans access.
'Et tu démasques les lignes dans ta plage de cellules.
Set C = Nothing: Set MyRange = Nothing: Set RgExport = Nothing
RstTrouve.Close: db.Close
Set RstTrouve = Nothing: Set db = Nothing
Application.EnableEvents = True
End If
End Sub
'-------------------------------------------
Salutations!
"j0b" <j0b@yencpower-post.com> a écrit dans le message de news:415565cc$0$13520$626a14ce@news.free.fr...
bonjour à tous alors voila j ai une connexion entre excel et accès mais le problème lors de l échange d information (si des
données sont déjà saisi et que la procédure veut les exporter vers access un beug ce produit car il ya des doublons dans les
clefs primaires). Donc je voulais savoir si vous connaissez une procédure qui peut comparer mes plages de cellules avec les
tables que si ya des doublons elle ne fassent rien avec ces données et pour le reste elle les tranfère vers accès.
Merci à vous
Pourquoi ne pas transférer tout ton tableau des données que tu as dans ta feuille excel dans une table "temporaire" d'access. De mémoire, si tu fais dans access un requête "Ajout" pour transférer tes données de ta table "Temp" vers la table réelle de destination, Access va refuser de lui-même lors de la transaction d'ajouter les enregistrements qui sont des doublons (pour le champ de la clé primaire ....Attention, il y a d'autres conditions pour lesquelles access peut refuser de valider un enregistrement ...) et il va créer de lui-même comme un grand une table avec tous les enregistrements qu'il aura refuser. Cela devrait être beaucoup plus rapide que d'effectuer une vérification systématique pour tous les enregistrements de ton tableau.
Si tu veux vérifier enregistrements par enregistrements, il y a ceci :
Attention, tu dois ajouter la référence suivante à ton projet Excel :
" Microsoft DAO 3.6 objects librairy "
'------------------------------------------- Sub RechercherDataAccessPourExcel()
Dim MyRange As Range, C As Range, RgExport As Range Dim db As Database Dim RstTrouve As Recordset Dim Chaine As String
Set db = OpenDatabase("C:LotusMes Documentsbd2.mdb") Set RstTrouve = db.OpenRecordset("Etudiant", dbOpenDynaset) RstTrouve.MoveLast RstTrouve.MoveFirst
Set MyRange = Worksheets("Feuil1").Range("A1:A25")
For Each C In MyRange Chaine = Trim(C.Value) Application.EnableEvents = False With RstTrouve .MoveFirst 'Remplace NomEtudiant par le nom du champ 'de la clé primaire .FindFirst "[NomEtudiant] = " & Chr(34) & Chaine & Chr(34) If .NoMatch = False Then 'Si il trouve, tu masques la ligne C.EntireRow.Hidden = True End If End With Next
'Ajoute le code pour ne transférer que seulement les enregistrements 'dont les lignes sont visibles. Pour ce faire tu peux utiliser 'la méthode SpecialCells de l'objet Range Set RgExport = MyRange.SpecialCells(xlCellTypeVisible) 'Applique ta procédure pour ajouter le range RgExport à 'ta table dans access.
'Et tu démasques les lignes dans ta plage de cellules.
Set C = Nothing: Set MyRange = Nothing: Set RgExport = Nothing RstTrouve.Close: db.Close Set RstTrouve = Nothing: Set db = Nothing Application.EnableEvents = True End If
End Sub '-------------------------------------------
Salutations!
"j0b" a écrit dans le message de news:415565cc$0$13520$ bonjour à tous alors voila j ai une connexion entre excel et accès mais le problème lors de l échange d information (si des données sont déjà saisi et que la procédure veut les exporter vers access un beug ce produit car il ya des doublons dans les clefs primaires). Donc je voulais savoir si vous connaissez une procédure qui peut comparer mes plages de cellules avec les tables que si ya des doublons elle ne fassent rien avec ces données et pour le reste elle les tranfère vers accès. Merci à vous
Christophe JEAN
Alors en fait c'est cette instruction qui compare dans ta table
Pour définir le champ de recherche d'après le nom de son index Les noms d'index sont visible en création de table en cliquant sur le bouton qui représente un éclair. Et c'est d'après le nom visible dans cette fenêtre qu'il faut lancer la recherche
rsClient.Index = "PrimaryKey"
On effection une comparaison de recherche = pour l'opérateur de comparaison puis la valeur ou variable qui exécute la comparaison
rsClient.Seek "=", strID
La propriété NoMatch renvoie VRAI si la recherche n'abouti pas Donc ici on teste si la recherche Abouti
If Not rsClient.NoMatch Then C'est qu'il y a déjà un enregistrement existant dans ta table
Alors on prévient celui qui est devant l'écran
Beep MsgBox "Ce client a déjà été saisi dans la table", _
vbExclamation, "Attention doublon dans la saisie"
Exit Sub End If
A+
Alors en fait c'est cette instruction qui compare dans ta table
Pour définir le champ de recherche d'après le nom de son index
Les noms d'index sont visible en création de table en cliquant sur le bouton
qui représente un éclair.
Et c'est d'après le nom visible dans cette fenêtre qu'il faut lancer la
recherche
rsClient.Index = "PrimaryKey"
On effection une comparaison de recherche
= pour l'opérateur de comparaison puis la valeur ou variable qui exécute la
comparaison
rsClient.Seek "=", strID
La propriété NoMatch renvoie VRAI si la recherche n'abouti pas
Donc ici on teste si la recherche Abouti
If Not rsClient.NoMatch Then
C'est qu'il y a déjà un enregistrement existant dans ta table
Alors on prévient celui qui est devant l'écran
Beep
MsgBox "Ce client a déjà été saisi dans la table",
_
Alors en fait c'est cette instruction qui compare dans ta table
Pour définir le champ de recherche d'après le nom de son index Les noms d'index sont visible en création de table en cliquant sur le bouton qui représente un éclair. Et c'est d'après le nom visible dans cette fenêtre qu'il faut lancer la recherche
rsClient.Index = "PrimaryKey"
On effection une comparaison de recherche = pour l'opérateur de comparaison puis la valeur ou variable qui exécute la comparaison
rsClient.Seek "=", strID
La propriété NoMatch renvoie VRAI si la recherche n'abouti pas Donc ici on teste si la recherche Abouti
If Not rsClient.NoMatch Then C'est qu'il y a déjà un enregistrement existant dans ta table
Alors on prévient celui qui est devant l'écran
Beep MsgBox "Ce client a déjà été saisi dans la table", _
vbExclamation, "Attention doublon dans la saisie"
Exit Sub End If
A+
Merci pour les renseignements je vais voir ce que je peux faire avec l'ensemble de vos renseignements merci à bientot
Merci pour les renseignements je vais voir ce que je peux
faire avec l'ensemble de vos renseignements merci à bientot