Forum Clubic

Modification d'un champ d'une table Access via VBA (page 2)

non, pas du tout, c’est un champ que je veux rajouter mais ce champ va porter le même nom qu’un otre enfin presque le même nom (exemple : date_der_maj --> champ existant ; date_der_maj1 --> champ ke jve réaliser)Mon champ date_der_maj1 sera à supprimé si il existe au moment que j’actionneré mon bouton pour le recréer ensuite!!. tu cerne mieu le probléme??(dsl mais pas facil à expliquer même si jme comprend!!lol)


au fet, mon champ 'date_der_maj1' comprendra les même donnée que le champ 'date_der_maj' (déja existant) sauf que le type de 'date_der_maj' est texte alors que le type de 'date_der_maj1' est date!!voila!!

La bonne question est sans doute "Pourquoi le champ date_der_maj1 n’existe-t-l pas (même vide) depuis la création de la table ?

car c’est comme ça!!je sait pas pourquoi il ne l’on pas cré au début!! enfin bref, j’ai réussi à la créer mais le probléme c’est de copier les donner du champ ‘DATE_DER_MAJ’ dans le champs ‘DATE_DER_MAJ1’ en changeant le type des données (texte en date!!) tout en gardant le champ ‘DATE_DER_MAJ’

MERCI DE TOUT TON AIDE DEPUIS LE DEBUT, cela me touche beaucoup et m’aide énormément!!

A partir du moment où le champ est créé, c’est plus simple : il faut faire une requête de mise à jour, dans laquelle tu dis que le champ DATE_DER_MAJ1 a pour valeur CDATE( DATE_DER_MAJ)
Si tu veux éviter les messages d’erreur quand DATE_DER_MAJ est vide, tu le testes d’abord avec ISDATE()
(toutes les explications sont dans l’aide en ligne Access)

j’ai effecuté ce que tu ma dit avec la fonction CDate mais malheureusement il me dise “incompatible de type” --> BIZARRE!! comment doi-je faire !!MYSTERE!!LOL.
Surtout que leur exemple m’aide peu car moi j’ai besoin de dire à quel table correspond le champ.
Je voulais savoir s’il serait possible que tu me donne un exemple dans lequel il y aurait la syntaxe que j’ai besoin c’est à dire : à quel table correspond le champ!!

MERCI D’AVANCE!!
dsl de te déranger avec mes questions à la con!!lol.

Il y a surement incompatibilité de date parce que le VBA ne connait que les dates au format anglais (mmjjaa) alors que ton champ source est au format français jjmmaa.
Il faut donc que tu le travailles un peu avant de demander sa conversion.
C’est pour ça que je t’avais dit de tester d’abord avec isdate() ; que donnait isdate() comme réponse ?

Pour ce qui est de la table : c’est à toi de le préciser dans ton code.
Tout dépend la manière dont tu as commencé à travailler :

  • si tu travailles en Access (le plus simple), tu crées ta requête de mise à jour (une par table) et tu l’appelles par DOCMD OPENQUERY ; dans ce cas tous les renseignements nécessaires sont dans la requête
  • si tu travailles exclusivement en VBA, tu fais un openrecordset sur la première table, puis tu mets à jour son champ, puis tu updates et tu clos.
    et tu recommences pour chaque table

lorsque j’utilise IsDate() il me donne aucune réponse.
Je travaille sous VBA mais ma table et mon champ ben C du access (dsl mais j’ai bof compris la deuxiéme partie de ton explication)

puis tu me di de travailler un peu avant de demander la conversion, mais je le travaille comment??

En VBA, tu n’as pas d’accès direct aux tables
Donc tu “pointes” sur la table avec un recordset
ensuite tu te déplaces dans la table avec les commandes de la famille Move ou Find
pour modifier une valeur lorsque tu es sur un enregistrement tu fais Edit en précisant le nom du champ
ex :

Set rs = CurrentDb.OpenRecordset("le_nom_de_matable1", "T_Client", DB_OPEN_TABLE)
while not rs.EOF
  rs.FindFirst '1er enr
  rs.edit
  rs("DATE_DER_MAJ1") = rs("DATE_DER_MAJ") ' ligne à affiner ; on sait que ca ne marche pas à cause des formats, mais c'est pour l'exemple
  rs.update ' mise à jour proprement dite
  rs.MoveNext 'enregistrement suivant
next
rs.close

Regarde ces bons exemples

Pas possible ; une fonction c’est une fonction ; et une fonction de type booleen retourne toujours quelque chose
Tu n’as pas dû employer la bonne syntaxe

ok pr recordset!!
ben si j’ai utiliser la fonction IsDate() .
Suis comme toi je trouve ça bizarre!!je comprend pas pourquoi ca ne ma pas retournée de valeur.
tu mettré quoi dans les parenthèse de IsDate??

Si on se réfère à l’exemple précédent :
if isDate( rs(“DATE_DER_MAJ”)) then …
Edité le 11/06/2007 à 16:43

bonjour gcc,
voila j’ai mis la syntaxe du isDate ce qui me donne le code suivant :

If IsDate(rs(DATE_DER_MAJ)) Then
DSet rs = CurrentDb.OpenRecordset(Ipms_icxs_pves_epms_iens_ha_naz, DB_OPEN_TABLE)
While Not rs.EOF
rs.FindFirst
rs.Edit
rs(DATE_DER_MAJ2) = rs(DATE_DER_MAJ)
rs.Update
rs.MoveNext
Next
End If

mais probléme lorsque je met ce code, il m’affiche un message d’erreur qui est le suivant :

             Microsoft Visual Basic
             Erreur de compilation :
             Sub ou Fonction non définie

donc je sait pas quoi faire, si tu as une idée, fais mi signe!!merci d’avance!!

re-bonjour,
je voulais te prévenir qu’en faite ce que j’essayer de faire je n’avais plus à le faire car mon maitre de stage ma dit que l’action (= le fé de transvaser les date du champ ‘DATE_DER_MAJ’ au champ ‘DATE_DER_MAJ1’ se fé par une autre requête qui es déja réalisé. Donc merci d’avoir essayé de m’aider mé je n’est plus a le faire.

If IsDate(rs(DATE_DER_MAJ)) Then
C’est volontairement que tu as retiré les guillemets ?

Quand tu as un message d’erreur de ce genre, tu vas dans le module, tu fais Débogage > Compiler et généralement il te dit la ligne à laquelle tu as une erreur
Sinon tu fais du pas à pas : un point d’arrêt (touche F9) sur la première ligne du Sub et ensuite avance ligne par ligne avec F8

oui c’est moi qui à enlever volontairement les guillemet.
Merci de tes renseignements mé j’en ai plus besoins cr comme je té di je n’es pas à faire le changement des données. J’ai juste à rajouter les champs à un endroit fixe.
Donc je réussi sans problème d’ajouter un champ mé le probléme il se met à la fin de la table alor que je le voudrais aprés un champ, commen pui-je faire??

Tout dépend de la méthode que tu utilises pour ajouter ton champ.
Si tu utilises CreateField, il faut ensuite utiliser OrdinalPosition avant l’append

non j’utilise la commande : DoCmd.RunSQL “ALTER TABLE ADD COLUMN ;”
voila la commande que j’utilise pour ajouter mon champ.

Essaie
DoCmd.RunSQL “ALTER TABLE ADD COLUMN AFTER COLUMN ;”
mais c’est sans garantie

effectivement c’étais sans garantie. car j’ai rajouté mit :
DoCmd.RunSQL “ALTER TABLE ADD COLUMN AFTER COLUMN ;”
et ca m’affiche un message d’erreur :

Microsoft Office Access
Syntax error in ALTER TABLE statement.

voila le message d’erreur, jcompren pas pourquoi!!

Tout simplement parce que ce n’est pas supporté par cette version de SQL

ok!! ben comment je dois faire alors?? yauré til une autre syntaxe possible??(mm si C otre ke RunSql)