IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête ajout avec incrément. [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut Requête ajout avec incrément.
    Bonjour à tous,

    J'ai une table dont l'un des champs, vierge, contient la référence de chaque enregistrement.

    La table ne représente pas l'historique mais les enregistrements traités au coup par coup (à chaque nouveau traitement, la table est vidée et remplie des enregistrements à traiter; lors de ce 'remplissage', le champ de la référence est encore vierge).

    Le champ contenant la référence individuelle des documents est à créer.

    comment puis je faire ?

    Par une requete mise à jour ? Seulement dans ce cas la requete place la même valeur dans tous les enregistrements, alors qu'il faut qu'elle s'incrémente.

    nb: ma référence contient le mois et l'année.
    nb2; je voudrais éviter Numéroauto qui me bride trop dans le cas de corrections.


    Merci de votre aide,

    G.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Salut,

    nb: ma référence contient le mois et l'année.
    As-tu un champ date dans ta table pour recupérer le mois et l'année de cette date ?

    avec un truc du style:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE TaTable
    SET Ref = Month([LaDate]) & "-" & Year([LaDate])

    D'autre part, tu parles d'incrément : souhaite tu ajouter un incrément dans ta référence en plus du mois et de l'année ?

    Si c'est le cas alors tu devras peut-être passer par du code VBA utilisant DAO

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Salut,
    merci pour ta réponse.

    As-tu un champ date dans ta table pour recupérer le mois et l'année de cette date ?
    Pour la date et l'année du jour de référencement, j'utilise la fonction Now() donc pas de champ mois et année dans la table.

    D'autre part, tu parles d'incrément : souhaite tu ajouter un incrément dans ta référence en plus du mois et de l'année ?
    Oui je souhaite mettre dans ma réf. l'année, le mois et la valeur incrémentielle. Ce sera de la forme: "aaaa-mm-xxxx" où "xxxx" est la valeur incrémentielle à 4 digits avec remise à zéro chaque début de mois.

    Ton me rassure à moitié: je suis pas très à l'aise en VBA ...

    Pour compléter ma question, voici quelques précisions:
    Le référencement incrémentiel de la forme "aaaa-mm-xxxx" est déjà utilisé dans une autre base, donc la ca va; seulement il fontionne par une requete MàJ, donc enregistrement par enregistrement.
    Là je souhaite mettre à jour une table entière.

    Voici l'idée que j'ai:
    - création de la table1 par une requete sélection,
    - table1 contient un champ "ref." qui contient "aaaa-mm-xxxx" qui est encore Null.
    - une table2 contient tout les références créées et quelques informations liées.
    - une requete MàJ cherche la plus grande valeur de "xxxx" pour le mois et l'année courante dans la table2,
    - si elle n'en trouve pas, elle démarre à "xxxx" = "0001"
    - si elle en trouve ("xxxx_max"), elle ajoute 1 à cette valeur et l'utilise pour mettre à jour le champ "ref." du premier enregistrement de table1 avec "aaaa-mm-xxxx_max+1")
    - elle met ensuite à jour tout table1 en incrémentant "xxxx" de 1 à chaque enregistrement.

    Mon schéma te semble tenir la route ?

    Quid du VBA pour ca ?
    Une fonction magique méconnue pourrait m'aider ?

    Merci de ton/votre réponse !

    G.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Pour avoir un peu gratté,

    Il semble que le requete MàJ sur une requete sélection sera difficile.
    Il faut donc que je créé la référence individuelle de chaque enregistrement par la requete mise à jour.

    Sur le principe pas de problème, sauf que je sais juste appliquer la même valeur a tous les enregistrements du champ de la table, alors qu'il faut qu'elle s'incrémente à chaque enregistrement.

    Quelqu'un a une idée ?

    merci

    G.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    On avance.

    La stratégie a changé:

    Une table "facture_2" contient toutes les données sauf le référencement individuel (champ "num_fact ") et la date associée à chaque enregistrement(champ "date_fact").

    Une requete ajout intègre toutes les données de "facture_2" dans "suivi_fact_nwe", qui contient déjà des données.
    Les données existantes de "suivi_fact_nwe" sont complètes.

    La requete ajout créé donc pour les nouveaux enregistrements le référencement individuel et la date associée.

    Voici la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO suivi_fact_nwe ( EventCode, UserName, [DENOMINATION COMMERCIALE], date_fact, num_fact )
    SELECT facture_2.EventCode, facture_2.UserName, facture_2.[DENOMINATION COMMERCIALE], Format(Now(),"dd/mm/yyyy") AS date_fact, "F" & Format(Now(),"yyyy\.mm\.") & DMax("index_fact","suivi_fact_nwe")+1 AS num_fact
    FROM facture_2;

    La date associée à chaque enregistrement du lot ajouté est bonne (même date pour tout le lot).

    Mais le référencement ne l'est pas: la requete applique la mêmle référence à tous les enregistrements du lot ajouté.

    Comment faire pour que chaque enregistrement du lot ait une référence individuelle incrémentielle?

    Merci d'avance !

    G.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Salut,

    avec une requête çà risque de ne pas fonctionner avec un DMax sur la table que tu veux mettre à jour:

    Il faut peut-être passer par du code VBA avec DAO:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Public Function Ajout()
    Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, rsl As DAO.Recordset
    Dim LeSql As String
    Dim m As Long
     
    Set rs1 = CurrentDb.OpenRecordset("facture_2", dbOpenSnapshot)
    Set rs2 = CurrentDb.OpenRecordset("suivi_fact_nwe")
     
     
    While Not (rs1.EOF)
    LeSql = "select Max(index_fact) as M from suivi_fact_nwe where Format([date_fact],'mm/yyyy')='" & Format(Date, "mm/yyyy") & "'"
     
    ' Calcule l'index Max de la table suivi_fact_nwe pour le mois et l'année.
     
    Set rsl = CurrentDb.OpenRecordset(LeSql, dbOpenSnapshot)
     
    m = 1 ' index max pour le mois et l'année
     
       If Not (rsl.EOF) Then
          m = rsl!m + 1 ' Ajoute 1 à l'index.
       End If
     
    rs2.AddNew ' Ajout dans la table suivi_fact_nwe
     
    rs2!EventCode = rs1!EventCode
    ...
     
    rs2!index_fact = m
    rs2!date_fact = Date()
    rs2!num_Fact = "F" & Format(Now(),"yyyy\.mm\.") & m
    rs2.Update
     
    rsl.Close
    Set rsl = Nothing
     
    rs1.MoveNext 'Enregistrement suivant dans la table facture_2
    Wend
     
    'libère les variables
     
    rs2.Close
    Set rs2 = Nothing
     
    rs1.Close
    Set rs1 = Nothing
     
    End Function
    BIEN SUR A ADAPTER...

    A+

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Je me suis lancé,
    j'ai (tenté) d'adapter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Public Function new_fact()
    Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, rsl As DAO.Recordset
    Dim LeSql As String
    Dim m As Long
     
    Set rs1 = CurrentDb.OpenRecordset("facture_2", dbOpenSnapshot)
    Set rs2 = CurrentDb.OpenRecordset("suivi_fact_nwe")
     
     
    While Not (rs1.EOF)
    LeSql = "select Max(index_fact) as M from suivi_fact_nwe where Format([date_fact],'mm/yyyy')='" & Format(Date, "mm/yyyy") & "'"
     
    ' Calcule l'index Max de la table suivi_fact_nwe pour le mois et l'année.
     
    Set rsl = CurrentDb.OpenRecordset(LeSql, dbOpenSnapshot)
     
    m = 1 ' index max pour le mois et l'année
     
       If Not (rsl.EOF) Then
          m = rsl!m + 1 ' Ajoute 1 à l'index.
       End If
     
    rs2.AddNew ' Ajout dans la table suivi_fact_nwe
     
    rs2!EventCode = rs1!EventCode
    rs2!Fact-avoir = rs1!Fact-avoir
    rs2!LearningObjectTitle = rs1!LearningObjectTitle
    rs2!StartDateTime(Date) = rs1!StartDateTime(Date)
    rs2!StartDateTime(Time) = rs1!StartDateTime(Time)
    rs2!EndDateTime(Date) = rs1!EndDateTime(Date)
    rs2!EndDateTime(Time) = rs1!EndDateTime(Time)
    rs2!GroupTitle = rs1!GroupTitle
    rs2!UserName = rs1!UserName
    rs2!Civilite = rs1!Civilite
    rs2!Nom_ concatene = rs1!Nom_ concatene
    rs2!Status = rs1!Status
    rs2!ADRESSE = rs1!ADRESSE
    rs2!Code Contrat = rs1!Code Contrat
    rs2!code site = rs1!code site
    rs2!nbre-de-jours = rs1!nbre-de-jours
    rs2!duree(h) = rs1!duree(h)
    rs2!AttendanceCharge = rs1!AttendanceCharge
    rs2!prix par jour = rs1!prix par jour
    rs2!TVA_montant = rs1!TVA_montant
    rs2!TTC = rs1!TTC
    rs2!DENOMINATION COMMERCIALE = rs1!DENOMINATION COMMERCIALE
    rs2!ADRESSE 11 = rs1!ADRESSE 11
    rs2!ADRESSE 21 = rs1!ADRESSE 21
    rs2!CP1 = rs1!CP1
    rs2!VILLE1 = rs1!VILLE1
    rs2!TELEPHONE = rs1!TELEPHONE
    rs2!TELECOPIE = rs1!TELECOPIErs2!index_fact = m
    rs2!date_fact = Date
    rs2!num_Fact = "F" & Format(Now(), "yyyy\.mm\.") & m
    rs2.Update
     
    rsl.Close
    Set rsl = Nothing
     
    rs1.MoveNext 'Enregistrement suivant dans la table facture_2
    Wend
     
    'libère les variables
     
    rs2.Close
    Set rs2 = Nothing
     
    rs1.Close
    Set rs1 = Nothing
     
    End Function
    Dans un module, lancé par "ExecuterCode" d'une macro.

    En lancant la macro il me répond "Erreur de compilation" et surligne la première ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function new_fact()
    J'ai essayé en changeant le nom de la fonction mais rien n'y fait,

    une idée ?

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Salut,

    As-tu essayé avant de compiler ton projet pour voir si çà passe ?

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Je compile et la réponse est la même:
    "Erreur de compilation" ...

    et surligne la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs2!Fact-avoir = rs1!Fact-avoir
    Ca nous oriente ?

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Salut,

    je te conseille de changer le nom de ton champ:

    changer Fact-avoir par FactAvoir

    (il n'aime pas les tirets...)

    A+

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Bien vu!

    je me suis retartiner le code, l'erreur de syntaxe ne remonte plus,
    mais il semble qu'il ne trouve pas certaines données.
    Dans la logique: les requetes successives "facture" et "facture_2" sont la source de la fonction "new_fact()"; elles proviennent de table sur lesquelles je n'ai pas la main; la focntion va ensuite créer créer des enregistrements dans la table "suivi_fact_nwe"

    Requete "facture":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [Participants_a _la_session].LearningObjectTitle, [Participants_a _la_session].EventCode, CDate([Participants_a _la_session]![StartDateTime (Date)]) AS [StartDateTime(Date)], CDate([Participants_a _la_session]![StartDateTime (Time)]) AS [StartDateTime(Time)], CDate([Participants_a _la_session]![EndDateTime (Date)]) AS [EndDateTime(Date)], CDate([Participants_a _la_session]![EndDateTime (Time)]) AS [EndDateTime(Time)], [location-v2].location, [location-v2].plan, [location-v2].adresse, Tous_les_users.UserName, Tous_les_users.FirstName, Tous_les_users.LastName, Tous_les_users.GroupTitle, [Participants_a _la_session].Status, Tous_les_users.Civilite, Left([Tous_les_users]![GroupTitle],4) AS code_site, [Tous_les_users]![FirstName] & " " & [Tous_les_users]![LastName] AS Nom_concatene, [Durees-types]![nbre-de-jours] AS nbre_de_jours, [nbre-de-jours]*7 AS [duree_(h)], Toutes_les_sessions.AttendanceCharge, Format([Toutes_les_sessions]![AttendanceCharge]/[nbre-de-jours],"000.00€") AS prix_par_jour, Format([Toutes_les_sessions]![AttendanceCharge]*0.196,"00.00€") AS TVA_montant, Format([Toutes_les_sessions]![AttendanceCharge]*1.196,"0.00€") AS TTC, [Participants_a _la_session]![EventCode] & [Participants_a _la_session]![UserName] AS concatenn, DatePart("ww",[Participants_a _la_session]![StartDateTime (Date)],2,1) AS n_semaine
    FROM [location-v2] RIGHT JOIN ([image-test] RIGHT JOIN (([duree-session] RIGHT JOIN (Toutes_les_sessions RIGHT JOIN (Tous_les_users RIGHT JOIN ([Sessions-annulations] RIGHT JOIN [Participants_a _la_session] ON ([Sessions-annulations].UserName = [Participants_a _la_session].UserName) AND ([Sessions-annulations].EventCode = [Participants_a _la_session].Code)) ON Tous_les_users.UserName = [Participants_a _la_session].UserName) ON Toutes_les_sessions.Code = [Participants_a _la_session].Code) ON [duree-session].Code = [Participants_a _la_session].Code) LEFT JOIN [Durees-types] ON [duree-session].diffdate = [Durees-types].[diff-de-date]) ON [image-test].grouptitle = [Participants_a _la_session].GroupTitle) ON [location-v2].location = [Participants_a _la_session].Location
    GROUP BY [Participants_a _la_session].LearningObjectTitle, [Participants_a _la_session].EventCode, CDate([Participants_a _la_session]![StartDateTime (Date)]), CDate([Participants_a _la_session]![StartDateTime (Time)]), CDate([Participants_a _la_session]![EndDateTime (Date)]), CDate([Participants_a _la_session]![EndDateTime (Time)]), [location-v2].location, [location-v2].plan, [location-v2].adresse, Tous_les_users.UserName, Tous_les_users.FirstName, Tous_les_users.LastName, Tous_les_users.GroupTitle, [Participants_a _la_session].Status, Tous_les_users.Civilite, Left([Tous_les_users]![GroupTitle],4), [Tous_les_users]![FirstName] & " " & [Tous_les_users]![LastName], [Durees-types]![nbre-de-jours], [nbre-de-jours]*7, Toutes_les_sessions.AttendanceCharge, Format([Toutes_les_sessions]![AttendanceCharge]/[nbre-de-jours],"000.00€"), Format([Toutes_les_sessions]![AttendanceCharge]*0.196,"00.00€"), Format([Toutes_les_sessions]![AttendanceCharge]*1.196,"0.00€"), [Participants_a _la_session]![EventCode] & [Participants_a _la_session]![UserName], DatePart("ww",[Participants_a _la_session]![StartDateTime (Date)],2,1), Mid([Participants_a _la_session]![EventCode],3,1), Tous_les_users.IsEnabled, Toutes_les_sessions.IsEnabled
    HAVING ((([Participants_a _la_session].Status) Like "Présent" Or ([Participants_a _la_session].Status) Like "Absent non justifié" Or ([Participants_a _la_session].Status) Like "Partiellement présent") AND ((Toutes_les_sessions.IsEnabled)="true"))
    ORDER BY Tous_les_users.GroupTitle;
    Requete "facture_2":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT facture.LearningObjectTitle, facture.EventCode, facture.[StartDateTime(Date)], facture.[StartDateTime(Time)], facture.[EndDateTime(Time)], facture.[EndDateTime(Date)], facture.location, facture.plan, facture.adresse, facture.UserName, facture.FirstName, facture.LastName, facture.GroupTitle, facture.Status, facture.Civilite, facture.code_site, [reseau-VPTR]![Code Contrat] AS code_contrat, facture.Nom_concatene, facture.nbre_de_jours, facture.[duree_(h)], facture.AttendanceCharge, facture.prix_par_jour, facture.TVA_montant, facture.TTC, facture.concatenn, facture.n_semaine, [reseau-VPTR]![DENOMINATION COMMERCIALE] AS DENOMINATION_COMMERCIALE, [reseau-VPTR]![ADRESSE 11] AS ADRESSE_11, [reseau-VPTR]![ADRESSE 21] AS ADRESSE_21, [reseau-VPTR].CP1, [reseau-VPTR].VILLE1, [reseau-VPTR].TELEPHONE, [reseau-VPTR].TELECOPIE, "FACTURE" AS Fact_avoir, Format(Now(),"dd/mm/yyyy") AS date_fact
    FROM ((cre_category INNER JOIN Tous_les_groupes ON cre_category.category = Tous_les_groupes.Category) INNER JOIN [reseau-VPTR] ON cre_category.type_de_site = [reseau-VPTR].[Type Site]) INNER JOIN facture ON (Tous_les_groupes.Title = facture.GroupTitle) AND ([reseau-VPTR].[Code Site] = facture.code_site)
    GROUP BY facture.LearningObjectTitle, facture.EventCode, facture.[StartDateTime(Date)], facture.[StartDateTime(Time)], facture.[EndDateTime(Time)], facture.[EndDateTime(Date)], facture.location, facture.plan, facture.adresse, facture.UserName, facture.FirstName, facture.LastName, facture.GroupTitle, facture.Status, facture.Civilite, facture.code_site, [reseau-VPTR]![Code Contrat], facture.Nom_concatene, facture.nbre_de_jours, facture.[duree_(h)], facture.AttendanceCharge, facture.prix_par_jour, facture.TVA_montant, facture.TTC, facture.concatenn, facture.n_semaine, [reseau-VPTR]![DENOMINATION COMMERCIALE], [reseau-VPTR]![ADRESSE 11], [reseau-VPTR]![ADRESSE 21], [reseau-VPTR].CP1, [reseau-VPTR].VILLE1, [reseau-VPTR].TELEPHONE, [reseau-VPTR].TELECOPIE, "FACTURE", Format(Now(),"dd/mm/yyyy");
    Fonction:

    Option Compare Database

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Public Function new_fact()
    Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, rsl As DAO.Recordset
    Dim LeSql As String
    Dim m As Long
     
    Set rs1 = CurrentDb.OpenRecordset("facture_2", dbOpenSnapshot)
    Set rs2 = CurrentDb.OpenRecordset("suivi_fact_nwe")
     
     
    While Not (rs1.EOF)
    LeSql = "select Max(index_fact) as M from suivi_fact_nwe where Format([date_fact],'mm/yyyy')='" & Format(Date, "mm/yyyy") & "'"
     
    ' Calcule l'index Max de la table suivi_fact_nwe pour le mois et l'année.
     
    Set rsl = CurrentDb.OpenRecordset(LeSql, dbOpenSnapshot)
     
    m = 1 ' index max pour le mois et l'année
     
       If Not (rsl.EOF) Then
          m = rsl!m + 1 ' Ajoute 1 à l'index.
       End If
     
    rs2.AddNew ' Ajout dans la table suivi_fact_nwe
     
    rs2!EventCode = rs1!EventCode
    rs2!Fact_avoir = rs1!Fact_avoir
    rs2!LearningObjectTitle = rs1!LearningObjectTitle
    rs2!StartDateTime(Date) = rs1!StartDateTime(Date)
    rs2!StartDateTime(Time) = rs1!StartDateTime(Time)
    rs2!EndDateTime(Date) = rs1!EndDateTime(Date)
    rs2!EndDateTime(Time) = rs1!EndDateTime(Time)
    rs2!GroupTitle = rs1!GroupTitle
    rs2!UserName = rs1!UserName
    rs2!Civilite = rs1!Civilite
    rs2!Nom_concatene = rs1!Nom_concatene
    rs2!Status = rs1!Status
    rs2!adresse = rs1!adresse
    rs2!Code_Contrat = rs1!Code_Contrat
    rs2!code_site = rs1!code_site
    rs2!nbre_de_jours = rs1!nbre_de_jours
    rs2!duree_(h) = rs1!duree_(h)
    rs2!AttendanceCharge = rs1!AttendanceCharge
    rs2!prix_par_jour = rs1!prix_par_jour
    rs2!TVA_montant = rs1!TVA_montant
    rs2!TTC = rs1!TTC
    rs2!DENOMINATION_COMMERCIALE = rs1!DENOMINATION_COMMERCIALE
    rs2!ADRESSE_11 = rs1!ADRESSE_11
    rs2!ADRESSE_21 = rs1!ADRESSE_21
    rs2!CP1 = rs1!CP1
    rs2!VILLE1 = rs1!VILLE1
    rs2!TELEPHONE = rs1!TELEPHONE
    rs2!TELECOPIE = rs1!TELECOPIE
    rs2!num_fact = rs1!num_fact
    rs2!index_fact = rs1!index_fact
    rs2!date_fact = rs1!date_fact
    rs2!concatenn = rs1!concatenn
     
    rs2.Update
     
    rsl.Close
    Set rsl = Nothing
     
    rs1.MoveNext 'Enregistrement suivant dans la table facture_2
    Wend
     
    'libère les variables
     
    rs2.Close
    Set rs2 = Nothing
     
    rs1.Close
    Set rs1 = Nothing
     
    End Function

    Le manque de données se produit à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs2!StartDateTime(Date) = rs1!StartDateTime(Date)
    de la fonction.

    qu'est ce que j'ai oublié ?

    Merci d'avance

  12. #12
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Salut,

    tu dois avoir:

    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs2!StartDateTime = rs1!StartDateTime
    que vient faire ce StartDateTime(date)

  13. #13
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    est bien le nom du champ.

    Est ce que, au même titre que le trait d'union, les parenthèses ne sont pas très bien vues ?

    Merci

  14. #14
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    bonjour,
    oui les parentheses et aussi dans ton cas les mots réservés - Date - a éviter absoluement car même si cela semble passer .....un jour ou l'autre !!!!

  15. #15
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    Merci pour l'info !

    Je met à jour et vous tient au jus ...

    A suivre (et merci encore)

    G.

  16. #16
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    J'ai mis à jour la requete "facture_2" et la table "suii_fact_nwe" avec les nouveaux noms de champs.

    La fonction est également à jour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    Option Compare Database
     
    Public Function new_fact()
    Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, rsl As DAO.Recordset
    Dim LeSql As String
    Dim m As Long
     
    Set rs1 = CurrentDb.OpenRecordset("facture_2", dbOpenSnapshot)
    Set rs2 = CurrentDb.OpenRecordset("suivi_fact_nwe")
     
     
    While Not (rs1.EOF)
    LeSql = "select Max(index_fact) as M from suivi_fact_nwe where Format([date_fact],'mm/yyyy')='" & Format(Date, "mm/yyyy") & "'"
     
    ' Calcule l'index Max de la table suivi_fact_nwe pour le mois et l'année.
     
    Set rsl = CurrentDb.OpenRecordset(LeSql, dbOpenSnapshot)
     
    m = 1 ' index max pour le mois et l'année
     
       If Not (rsl.EOF) Then
          m = rsl!m + 1 ' Ajoute 1 à l'index.
       End If
     
    rs2.AddNew ' Ajout dans la table suivi_fact_nwe
     
    rs2!EventCode = rs1!EventCode
    rs2!Fact_avoir = rs1!Fact_avoir
    rs2!LearningObjectTitle = rs1!LearningObjectTitle
    rs2!StartDateTimeD = rs1!StartDateTimeD
    rs2!StartDateTimeT = rs1!StartDateTimeT
    rs2!EndDateTimeD = rs1!EndDateTimeD
    rs2!EndDateTimeT = rs1!EndDateTimeT
    rs2!GroupTitle = rs1!GroupTitle
    rs2!UserName = rs1!UserName
    rs2!Civilite = rs1!Civilite
    rs2!Nom_concatene = rs1!Nom_concatene
    rs2!Status = rs1!Status
    rs2!adresse = rs1!adresse
    rs2!Code_Contrat = rs1!Code_Contrat
    rs2!code_site = rs1!code_site
    rs2!nbre_de_jours = rs1!nbre_de_jours
    rs2!duree_h = rs1!duree_h
    rs2!AttendanceCharge = rs1!AttendanceCharge
    rs2!prix_par_jour = rs1!prix_par_jour
    rs2!TVA_montant = rs1!TVA_montant
    rs2!TTC = rs1!TTC
    rs2!DENOMINATION_COMMERCIALE = rs1!DENOMINATION_COMMERCIALE
    rs2!ADRESSE_11 = rs1!ADRESSE_11
    rs2!ADRESSE_21 = rs1!ADRESSE_21
    rs2!CP1 = rs1!CP1
    rs2!VILLE1 = rs1!VILLE1
    rs2!TELEPHONE = rs1!TELEPHONE
    rs2!TELECOPIE = rs1!TELECOPIE
    rs2!num_fact = rs1!num_fact
    rs2!index_fact = rs1!index_fact
    rs2!date_fact = rs1!date_fact
    rs2!concatenn = rs1!concatenn
     
    rs2.Update
     
    rsl.Close
    Set rsl = Nothing
     
    rs1.MoveNext 'Enregistrement suivant dans la table facture_2
    Wend
     
    'libère les variables
     
    rs2.Close
    Set rs2 = Nothing
     
    rs1.Close
    Set rs1 = Nothing
     
    End Function
    Lorsque je lance,
    J'ai le message:
    "Erreur d'execution '94':
    Utilisation incorecte de Null"
    et lorsque je clique sur "Débogage",la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m = rsl!m + 1 ' Ajoute 1 à l'index.
    est surlignée.

    une idée pour la suite ?

    Merci d'avance !

    G.

  17. #17
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    bonsoir,
    que doit contenir rsl!m ?
    voir fonction nz()

  18. #18
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Bonjour LE VIEUX, tous,

    Merci d'avoir répondu.

    Hélas mes connaissances en VBA sont un peu courtes.

    La fonction m'a été fournie par "User" le 27/08/2009, 20h30 (cf dans la conversation).
    Je l'ai juste bêtement adapté;

    mais je crains d'être incapable d'entrer dans le détails et donc de répondre à ta question.

    Pensez vous que ce soit sans issue ? Dois-je chercher par une autre voie ?

    Merci de votre aide,

    G.

  19. #19
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    re,
    si j'ai bien compris,
    rs1.m serait le champ m de ta table ou requête Facture.

    l'erreur signalerait à priori que ce champ est nul au moment du parcours :
    si c'est le cas :
    il faut soit lui donner la valeur 0 par défaut en création table.
    soit comme je te l'ai signalé utiliser la fonction NZ.

    soit :

    regardes ce que cela donne.

  20. #20
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 116
    Points : 63
    Points
    63
    Par défaut
    Je crains que ca n'aille trop loin dans le VBA et qu'en cas de succès puis de panne je ne sois pas capable de réparer.

    J'essaie donc une autre stratégie:

    La table finale est "suivi_fact_nwe", elle comporte entre autre un champ "num_fact" (numéro de facture complet avec année, mois et "index_fact"), un champ "date_fact" et un champ "index_fact" (5 derniers caract de "num_fact").

    La construction de "num_fact" ne pose pas de problème si j'ai "index_fact", je me suis donc concentré la-dessus:
    La requete "facture_3" rassemble et met en forme tous les champs à destination de "suivi_fact_nwe" (à l'exception des 3 champs cités ci-dessus) via une requete ajout.

    1- J'ajoute les enregistrements de "facture_3" dans la table vide "facture_4". Cette table comporte deux champs en plus de "facture_3":
    - "numauto", un Numéroauto indexé sans doublons à incrément;
    - "index_fact_tmp" vide;

    2- Je met à jour le champ "index_fact_tmp" de "facture_4" avec la requete "indexation_fact" (*)

    3- J'ajoute tous les enregistrements de "facture_4" à "suivi_fact_nwe",

    4 - j'efface tous les enregistrements de "facture_4"

    (*)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE facture_4 SET facture_4.index_fact_tmp = DMax("suivi_fact_nwe","index_fact")+([facture_4]![numauto])-DMin("facture_4","numauto")+1
    WHERE (((facture_4.index_fact_tmp) Is Null));
    pour utiliser l'incrémentation du champ "numauto" lors de chaque enregistrement.

    Ca me semblait logique,
    en tout cas sur le papier ca y ressemblait et en simulation sur excel ca fonctionne.
    Mais quand je lance la requete "indexation_fact" j'ai une vilaine boite de dialogue (cf PJ).

    Savez-vous ou mon raisonnement coince ?

    Merci !
    Images attachées Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [2012] Requête complexe avec incrémentation
    Par laurent_sitbon dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 10/02/2015, 14h55
  2. [AC-2003] Exécuter plusieurs fois une même requête ajout avec le même paramètre.
    Par paulojbt9 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/07/2011, 11h34
  3. [AC-2003] Requête Ajout et Incrémentation
    Par Nikodemus dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/06/2011, 11h43
  4. éxecution d'une requête ajout avec VBA
    Par averooès dans le forum VBA Access
    Réponses: 16
    Dernier message: 06/02/2009, 18h22
  5. Problème avec requête ajout
    Par mitnick32 dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 19h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo