access excel modifications

A

alex

Guest
bonjour,

je me pose une question :

'comment verifier si les informations que l'on ajoute dans les différents champs n'existe pas déja?
'a savoir : que si par exemple il existe deja dans ma table de données access une ligne
'possédant les meme infomations sur la date_timbre et nom_op
'dans ce cas au lieu de creer une nouvelle ligne modifier simplement les changements


voici le code foctionnant mais en ajoutant meme si un ligne existe déja


For i = 11 To 13 'fin.Row

If IsNumeric(Range('E' & i).Value) And Range('D' & i).Value <> '' Then

'verification que la ligne n'exixte pas encore ici!??

With Rs1

.AddNew

.Fields('Client') = Range('A1').Value

.Fields('date_timbre') = Range('B' & i).Value

.Fields('nom_op') = Range('D' & i).Value

.Fields('nbre_pli_annon') = Range('E' & i).Value

.Fields('Catégorie') = Range('G' & i).Value

.Update

End With


Merci d 'avance pour votre aide
 

Creepy

XLDnaute Accro
Bonjour le Forum, Alex,

Je te conseilel de faire une requête SQL sur le champ date_Timbre ou nom_op de ta table.

Il faut que tu selectionnes l'un des deux champs qui ne peut pas avoir de doublons. Si les deux en ont trouve un autre champs.

Ensuite si ta requête SQL t'envoie une reponse tu modifies l'enregistrement sinon tu inseres un nouveau.

Ne me demande pas comment on fait une requête SQL, sans voir la base de données et l'applications, je ne peux pas être plus précis.

Si tu ne sais pas faire de requête SQL, cherche sur le net tu trouveras pleins d'exemples.

@+

Creepy
 

MichelXld

XLDnaute Barbatruc
bonjour Alex , bonjour Creepy

j'espere que cet exemple pourra t'aider


Sub Test()
Dim Conn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim Fichier As String, rSQL As String
Dim Cible1 As Long
Dim Cible2 As String

'termes à controler dans la base
Cible1 = 13000
Cible2 = 'Marseille'

Fichier = 'C:\\\\\\\\dataBase.mdb'

Set Conn = New ADODB.Connection
Conn.Open 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' & _
Fichier & ';'

rSQL = 'SELECT * FROM Table1 ' & _
'WHERE PostalCode=' & Cible1 & ' AND CityName='' & Cible2 & '''

Set rsT = New ADODB.Recordset
With rsT
.ActiveConnection = Conn
.Open rSQL, , adOpenKeyset, adLockOptimistic, adCmdTableDirect
End With

If rsT.RecordCount = 0 Then
With rsT
.AddNew
.Fields(0) = 555555
.Fields(1).Value = 555
.Fields(2) = 'xldCity'
.Fields(3) = 9
.Fields(4) = 'Xld'
.Update
End With

Else
With rsT
.Fields(0) = 555555
.Fields(1).Value = 555
.Fields(2) = 'xldCity'
.Fields(3) = 9
.Fields(4) = 'Xld'
.Update
End With
End If

rsT.Close
Conn.Close
End Sub




bonne soiree
MichelXld
 
A

Alex

Guest
re BONJOUR

je rencontre encore qq difficulté je ne vois pas trop comment fonctionne la modification en supprimant seulment le addnew
??
et surtout comment faire fonctionnoner la requete SQL (le rs1.OpenRecordset rSQL.. ne fonctionne pas...!)
Merci d 'avance

Cible1 = 19 / 10 / 2005 'Range('B' & i).Value
Cible2 = Range('D' & i).Value




rSQL = 'SELECT * FROM Prévisions_tri ' & _
'WHERE date_timbre=' & Cible1 & ' AND nom_op='' & Cible2 & '''



If Rs1.RecordCount = 0 Then
MsgBox ('add')
With Rs1
.AddNew
.Fields('Client') = Range('A1').Value
.Fields('date_timbre') = Range('B' & i).Value
.Fields('nom_op') = Range('D' & i).Value
.Fields('nbre_pli_annon') = Range('E' & i).Value
.Fields('Catégorie') = Range('G' & i).Value
.Update
End With

Else
MsgBox ('modif')
With Rs1

.Fields('Client') = Range('A1').Value
.Fields('date_timbre') = Range('B' & i).Value
.Fields('nom_op') = Range('D' & i).Value
.Fields('nbre_pli_annon') = Range('E' & i).Value
.Fields('Catégorie') = Range('G' & i).Value
.Update
End With
End If

End If
Next
Rs1.Close
 

michel_m

XLDnaute Accro
Bonjour lex, Michel, Creepy

IL te faut activer 'microsoft activeX data objet 2.x library' dand VBE_outils_référence pour Fonctionner

Pour compléter la réponse de Creepy tu as des exemples d'utilisation de SQL dans ce post
Ce lien n'existe plus

et également dans Wiki de MichelXLD (bandeau à gauche de l'écran)

A+
Michel_M
 
L

Lex

Guest
Merci pour ta reponse michel
j'ai essayer de prendre l'exemple du post que tu m'a consseillé
mais j'obtient tjrs une Erreur Automation



Sub controleValeurTable()
Dim Conn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim Fichier As String, rSQL As String
Dim Valeur As Integer

Fichier = ThisWorkbook.Path & '\\EquiGest.mdb'

'Valeur = InputBox('Saisir le numero à rechercher dans la table')

'termes à controler dans la base

Cible1 = 24 / 3 / 2005 'Range('B' & i).Value
Cible2 = 'mkg' 'Range('D' & i).Value







Set Conn = New ADODB.Connection
Conn.Open 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' & _
Fichier & ';'



rSQL = 'SELECT * FROM Prévisions_tri ' & _
'WHERE date_timbre=' & Cible1 & ' AND nom_op='' & Cible2 & '''


Set rsT = New ADODB.Recordset

With rsT
.ActiveConnection = Conn
.Open rSQL, , adOpenStatic, adLockOptimistic, adCmdText
End With
MsgBox ('test')


If rsT.EOF Then
MsgBox 'Le numéro ' & Cible1 & Cible2 & ' n'existe pas dans la table . '
Else
MsgBox 'Le numéro ' & Cible1 & Cible2 & ' existe la table . '
End If

rsT.Close
Conn.Close
End Sub


Aprés tes je mappercoi que l'erreur vien de rsT.open rSQL...
pourtant j'ai bien ajouter la reference

Je ne comprend plus

Merci d'avance
 
A

alex

Guest
michel désolé de t'embéter encore un fois mais ca ne fonctionne toujours pas
enfin ca ne différencie pas si les cible sont ou non dans la base

je pense que c'est du a la requete
rSQL = 'SELECT * FROM Prévisions_tri WHERE date_timbre=' & Cible1 & ' AND nom_op='' & Cible2 & '''
mais certainement la cible2
car quand je fais un msgbox de rSQL, la date est bien noté mais pas ma seconde cible

Cible1 = '11/08/2005'
Cible2 = 'xxx'

jespére etre assez clair dans mes pb
merci
 

MichelXld

XLDnaute Barbatruc
bonsoir Alex

je viens de refaire des essais et ça fonctionne chez moi
quels sont les types de données des variables Cible1 et Cible2 (Texte , numerique , Date ...) dans la base Access ?

as tu adapté les variables en conséquence

Dim Cible1 As ....
Dim Cible2 As ....

de plus pour les recherches sur les dates , il faut adapter la requete en format anglais (du style mm/dd/yyyy)



bonne journée
MichelXld

Message édité par: michelxld, à: 11/10/2005 22:26
 

Discussions similaires

Réponses
6
Affichages
249
Réponses
2
Affichages
271
Réponses
12
Affichages
253

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise