Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comparer des variables....

5 réponses
Avatar
j0b
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

5 réponses

Avatar
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
Avatar
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


.



Avatar
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
Avatar
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+

Avatar
Merci pour les renseignements je vais voir ce que je peux
faire avec l'ensemble de vos renseignements merci à bientot