|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : mai 2011 Messages : 29 ![]() |
Bonjour à tous,
J'ai une application Excel relié à une base Access pour stocker les données. J'ai crée une fonction qui permet de coller les données d'une feuille de l'application vers la base. Le problème survient lorsque je met à jour les valeurs de la feuille et que je rapelle ma fonction, il y a un message qui apparaît m'indiquant la présence d'un doublon. Je voudrais savoir comment faire pour que la fonction mette à jour l'enregistrement si celui ci existe déjà (Clé primaire de la table : ID_Action). Ci dessous, le code de la fonction qui me permet de copier les données: Code :
|
||
|
|
00
|
|
|
#2 | ||||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Si ta feuille Excel contient toutes les données (celles qui sont déjà dans la base, plus les nouvelles), une méthode bourrin mais simple consisterait à vider ta table et à tout ré-exporter dedans (si le temps d'exécution est acceptable, bien entendu).
Sinon tu peux toujours tester si ton record existe déjà. Mais dans ce cas-là je te conseillerai d'utiliser un 'table-type" recordset car je pense que ce sera plus rapide qu'un 'dynaset-type'. En plus la recherche est plus simple car avec un 'table-type" on définit explicitement une clé primaire et on peut donc faire une recherche dessus avec comme conséquence implicite qu'il y aura au plus un résultat. En revanche avec un 'dynaset-type', il peut y avoir plusieurs occurrences et il y a donc plusieurs méthodes (FindNext, FindPrevious, FindFirst et FindLast). Du coup tu déclares ton recordset comme ça: Code :
Code :
|
||||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : mai 2011 Messages : 29 ![]() |
Bonjour,
Juste quelques petites questions : "Primary Key" : je laisse comme sa ou je mets l'intitulé de ma clé Rs1.Seek("=", Array(x, 1)) : le "=" je le laisse ossi ou il faut mettre quelque chose en particulier (il me met erreur de compilation) A part les changements données, mon code je pe le garder come tel ou il y a des choses à supprimé ? Merci |
|
|
00
|
|
|
#4 | ||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Normalement si tu as un seul champ définit comme clé primaire, il ne devrait pas y avoir d'ambigüité donc tu peux laisser comme ça. Jette un œil à la collection Indexes de ta table si ça ne fonctionne pas.
Citation:
Citation:
|
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mai 2011 Messages : 29 ![]() |
J'ai un problème avec cette ligne :
Rs1.Seek("=" , Array1(x, 1) Le message dit "Erreur de compilation Attendu séparateur de liste ou ) " J'ai beau cherché je vois pas ou rajouter cet élément ( j'ai pensé à un = après Seek mais il me dit encore qu'il manque une parenthèse) Merci |
|
|
00
|
|
|
#6 | |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Citation:
Sinon c'est parce qu'en VBA, pour les appels de procédures, il ne faut normalement pas lister les arguments entre parenthèses (c'est réservé aux fonctions). Personnellement je n'aime pas donc j'utilise toujours les parenthèses .2 solutions: Ou tu enlèves les parenthèses: ou tu utilises 'Call' devant (il parait que ce n'est pas recommandé mais je ne sais pas pourquoi et je n'ai jamais eu de problème avec): |
|
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mai 2011 Messages : 29 ![]() |
En enlevant les parenthèses sa marche parfaitement.
Merci à toi Sclarckone tu m'as été d'une grande aide. Ce sujet est à présent résolu !!! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com