Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1586 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] PB avec fonctions Acess

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] PB avec fonctions Acess

n°700786
alterisanz
Posté le 16-04-2004 à 10:06:57  profilanswer
 

Selon certains cas, mes appels aux fonctions acess font foirer mon
prg !
Pour inserer une nouvelle ligne je fait
 
Dim rs as DAO.recordset
 
set rs = currentDb.OpenRecordset("TableTemp" )
 
rs.addnew
 
rs("Facture" )=xxxx
'ainsi de suite je rempli toutes les colonnes de ma table et quand j'ai  
'fini je fais :
rs.Update
 
Bon ça marche uniquement quand ma table "TableTemp" est vide, sinon  
ça bugge au niveau de rs.update !
Et j'ai essayé avec des ptites tables bidons, ça marche tt le tps !
Aidez moi SVP j'en ai marre de galérer !

mood
Publicité
Posté le 16-04-2004 à 10:06:57  profilanswer
 

n°700798
pumpkin031​2
Posté le 16-04-2004 à 10:16:27  profilanswer
 

J'utilise sensiblement le même code :  
 
Dim Rst As Recordset
Set Rst= CurrentDb.OpenRecordset("NomTable", DB_OPEN_TABLE)
Rst.AddNew
Rst("Champs" ) = xxxx
Rst.Update
Rst.Close
 
je ne sais pas si c'est le DAO en moins ou le "DB_OPEN_TABLE" en plus, mais ce code marche pour moi depuis des années sans pbm.
 
quel message d'erreur as-tu ?

n°700819
alterisanz
Posté le 16-04-2004 à 10:35:18  profilanswer
 

Non je viens d'essayer mais cela ne marche pas.
Disons que je ne pas le fermer car après je dois envoyer mon
recordset en param à une fonction. De toute façon ce n'est pas ça puisqu'il bloque sur le "rs.update" et  qu'il me quitte ma procédure.
En fait il ne me met pas de message d'erreur mais il me quitte anormalement ma procédure.
Je sens que je vais devoir laisser tomber les fonctions Acess et me rabattre sur du bon vieux SQL.
Si tu peux m'aider je ne dirai pas non.
Merci de me répondre, c'est sympa car je suis à mon premier stage d'info et je galère car je découvre VBA (dans ce domaine j'ai juste des compétence en WinDev)
@+

n°700840
pumpkin031​2
Posté le 16-04-2004 à 10:48:47  profilanswer
 

t'as même pas un p'tit pop up avant qu'il quitte ta procédure ?
sinon, peux-tu repréciser ton besoin (les étapes de tes actions, pour voir quelle est la meilleure stratégie)

n°700844
alterisanz
Posté le 16-04-2004 à 10:56:44  profilanswer
 

Ben en fait je suis en train de continuer un projet deja commencé.
Sinon je dois faire une procédure qui récupère des données dans un fichier Excel et les écrire dans une table.
Donc si cette table est vide ça marche sinon ça bugge et je comprends absolument pas pourquoi !  
Je vais etre obligé de faire des fonctions d'execution de requetes SQL mais ça va être long et lourd !

n°700847
pumpkin031​2
Posté le 16-04-2004 à 10:59:37  profilanswer
 

et tu peux pas simplement importer ton fichier excel en entier ?

n°700853
alterisanz
Posté le 16-04-2004 à 11:02:47  profilanswer
 

Comment ça ?  
Si tu veux j'ouvre le fichier et les feuilles qu'il faut et après je prends les valeurs des cellules qui m'intéressent.

n°700868
pumpkin031​2
Posté le 16-04-2004 à 11:17:27  profilanswer
 

lol
ok, va dans l'onglet "table" d'access :
- Tu fais "Nouveau", une boite s'ouvre
- tu selectionnes "importer la table", tu fais Ok.
- tu va chercher ton fichier excel
- tu choisis ton onglet et fais suivant
- tu coches si tu veux que la 1ere ligne contienne les entêtes de colonnes ( + suivant)
- tu précise si tu crées une nouvelle table ou si tu veux que tes données s'ajoutent à une table existant (dans ce cas, attention aux formats !) (+suivant)
- là il te montre tous tes champs (si t'avais importé un fichier texte, c'est là que tu aurais choisi le format des champs, mais avec excel, pas de choix) (+ suivant)
- tu indiques si tu veux une clé primaire ou pas (+suivant)
- donnes le nom de table qui sera créée (+ Terminer)
 
et voilà, tout ton fichier excel est dans une jolie table access.  
c'est beau, non ?
 
Ensuite, si ton fichier de départ change toutes les semaines (par ex) et que tu ne veux pas te retapper cette opération d'import à chaque fois, tu peux alors "attacher la table " au lieu de l'importer.  
ainsi, access prendra en compte chaque modif de ton fichier excel.
à toi de voir de l'attache ou de l'import ce qui est le plus pratique pour l'utilisation que tu en fera ensuite...
 
 

n°700885
alterisanz
Posté le 16-04-2004 à 11:33:00  profilanswer
 

C'est vrai que ça aurait pu être pas mal et meme 100 fois plus simple.
Mais comme je t'ai dit je reprends un projet déja existant et si je modifie la structure du projet ça va être vraiment très chiant à tout modiifer ensuite.  
De plus je crois que ton système ne peut pas marcher avec mon application. Dans la boite où je suis il faut importer des fichiers execels pour chaque agence et il y en a plusieurs. Le pb c'est qu'il ya plusieurs agence donc je ne peux pas lier un champ à un seul fichier excel. De plus cet appli est destinée à des gars qui savent pas se servir d'access et c'est censé leur simplifier la vie donc je suis oblige de tout passer par le code.
 
Merci mais si vous avez des solutions concernant les rs.update
rs.addnew  
AIDEZ-MOI !

n°700903
pumpkin031​2
Posté le 16-04-2004 à 11:54:51  profilanswer
 

Je ne vois pas où est le pbm. Ces données que tu va chercher dans tes fichiers excel, tu les colles biens dans une table ... pourquoi cette table ne pourait pas être ta table d'import ?  
ça ne modifierait en rien la structure de ta base, juste la façon d'alimenter la table existante.
 
Ensuite pour ce qui est de tes multiples fichiers xls : 2 possibilités
 
1 - tu attaches chacun de tes fichiers à ta base access et tu fais une requête ajout pour chacun de tes fichiers (qui ajoute les données du fichier dans une seule et même table, celle qui est déjà existante). Mai s'il y en a vraiment beaucoup, ça risque d'être chiant à faire.
 
2 - le code ci-dessous  va chercher dans un dossier précis tous les fichiers xls, et les importe un par un dans une même table (qui peut aussi être ta table existante)
 
 
Function Search_bis_()
Dim i
Dim j
Application.FileSearch.LookIn = "C:\Chemin\Dossier\"
Application.FileSearch.FileName = "*.xls"
 
    If Application.FileSearch.Execute > 0 Then
        For i = 1 To Application.FileSearch.FoundFiles.Count
            j = import_(Application.FileSearch.FoundFiles(i))
        Next i        
    Else
        MsgBox "Aucun fichier n'a été trouvé !!!"
    End If
End Function
 
 
Public Function import_(Texte As String)
DoCmd.TransferSpreadsheet acImport, 8, "table_import", Texte, True, ""
End Function

mood
Publicité
Posté le 16-04-2004 à 11:54:51  profilanswer
 

n°700922
alterisanz
Posté le 16-04-2004 à 12:19:34  profilanswer
 

Ca fait quoi ça ?
Pour chacun des fichiers, il me les comptes et les importe ?
Mais j'ai pas bien compri comment je peux exploiter cela ?

n°700965
alterisanz
Posté le 16-04-2004 à 12:55:50  profilanswer
 

C'est bon c'est plus la peine de me répondre on m'a aidé et j'ai finalement compri là où était mon pb !
En fait ça ne venait pas des fonctions Acess mais de mes fichiers... qui comportataient des doublons ! On m'a juste fait une gestion des erreurs et j'ai compri tt de suite !
Merci kanmem pumkin

n°701038
cleini
Posté le 16-04-2004 à 13:52:22  profilanswer
 

coucou  
je suis justement en train de faire exactement ce type de projet :
voici mon code qui marche :  
 
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset 'pour table cli
rs.Open "client_test", cn, adOpenKeyset, adLockOptimistic, adCmdTable
 
 
    With rs
               .AddNew 'créé un nouvel enregistrement
                    ' ajoute les valeurs pour chaque champ de l'enregistrement
                    .Fields("ClientID" ) = Range("A" & r).Value
                    .Fields("ClientNom" ) = Range("B" & r).Value
                    .Fields("ClientPrénom" ) = Range("C" & r).Value
                    .Fields("ClientTel" ) = Range("D" & r).Value
                    .Update 'stocke le nouvel enregistrement
            End With
 
 
une question ? tu arrives à gérer un Update des date ? (update pas insertion) ? car j'ai laissé un post pour demander de l'aide, mais je n'ai pas encore trouvé  :(


Message édité par cleini le 16-04-2004 à 13:53:50
n°701089
alterisanz
Posté le 16-04-2004 à 14:30:34  profilanswer
 

J'ai pas tt compri dans ton code...
Déja connais tu la différence entre ADODB.recordset et DAO.recordset ?
Ensuite à quoi servent ttes les options lors de l'ouverture ?
Les range c'est pour excel ? Pour la selection d'une cellule. Je crois qu'on peu le faire aussi avec "Cell"
Merci pour la fonction Field elle me sera bien utile, au moins je pourrai utiliser mon rs avec with et eviter de le reécrire à chq fois....
Sinon pour l'update... Dans le meme cas que ton exemple je l'ai déja fait et ça marche mais un vrai update je l'ai pas encore fait.
Le gars avec qui je suis et qui s'y connait bien m'avait dit qu'il valait mieux faire une requete SQL comme ça en plus quand tu debugge tu peux voir la valeur de ta chaine.
Moi c'est comme ça :
 
dim rs as DAO.recordset
dim valeur as string
 
valeur = "Calimero"
 
set rs = currentDb.OpenRecordset("NomTable" )
sSQL = "update NomTable set Champ = '"& Valeur &"'"
rs.Execute sSQL
 
 
Et ça sa marche je l'ai déja fait  
 
Bonne chance
 
Ah oui toi c'est pour des dates... Ben je crois que c'est pareil, non ? Sinon essaye un truc que j'ai fait en WinDev : soit tu ecris ta date à l'anglaise (20030511) et sans les "/" soit tu la convertit en chaine (avec Cstr) et après si ça marche tu peux essayer d'enever les "/" de cette chaine avec "replace". Tu peux combiner mes solutions.
@+

n°701103
cleini
Posté le 16-04-2004 à 14:40:32  profilanswer
 

en fait, pour les UPDATE purs, je les fait bien via une requete SQL du type
Dim TSQL as string
TSQL = (" UPDATE client_test SET ClientNom   =  ' " & nomCli & "';" )
cn.Execute TSQL
 
seulement si j'exécute ça sur une date (disons que j'ai une cellule contenant la date dans mon fichier excel ) et bien j'ai message : erreur de syntawe dans commande UPDATE ... 1 semaine que je suis dessus
 
sinon pour répondre à tes questions :
 
DAO : anacronyme de Data Access Object , représente la strucuture de la BD et lse données qu'elle contient.
tu t'en sers pour créer et modifier des tables et des requetes ...
 
ADO:même chose sauf que tu peux te connecter à d'autres trucs que des .mdb, notamment à des bases SQL server
 
Les options lors de l'ouverture servent à déterminer quel type d'acces/manipulations tu vas faire .... là je ne suis pas tres calée, j'ai juste utilisé l'aide pour l'utiliser
 
RAnge : sélection d'une cellule oui mais tu peux avoir plusieurs attributs a Range, d'ou son avantage : comme range.value ou range.formula etc
 
le pb pour ton systeme pour les dates c'est que quoi que je fasse Excel reconvertit TOUJOURS les dates au format 00/00/0000
suffit de le mettre en ce que tu veux et apres d'aller regarder la barre de formule, hop, il me le remet dans ce format ...
a moins que je tente de le forcer dans le code peut etre ...

n°701155
alterisanz
Posté le 16-04-2004 à 15:29:27  profilanswer
 

Attends ton update il te sert à modifier table dans une BD locale à Acess ou une BD distante. Si ta BD est distante c'est différent, là suffit que tu me le dise je pourrai ptet t'aider.  
Tu n'essaierai pas de modifier un fichier Excel avec un update quand meme ? Si c'est le cas c'est complètement faux.
Au pire regarde avec le debugger les valeurs de tes variables contenant des dates lors de l'execution peut etre que tu te rendra compte d'une imcompatibilité de type que tu pourra corriger ensuite.
Tiens moi au courant.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] PB avec fonctions Acess

 

Sujets relatifs
[vba excel] affichage de resultat d'excel sous word ?Quelques conseils pour un débutant vba - base de données
Excel, VBA, ACCESS et ... les dates ....[JavaScript] Besoin d'aide par rapport aux fonctions ...
[vba excel] ouverture de fichiers dans un classeurrafraichissement de rapports BO en VBA...
[VBA - Powerpoint] Association Macro foireuse ou bug de pwpt ??VBA - programmer un formulaire Rendez-vous
[Php et classes] valeur par default pour des parametres de fonctionsVBA EXCEL : comment récupérer le numéro de colonne et de ligne d'une a
Plus de sujets relatifs à : [VBA] PB avec fonctions Acess


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR