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

Access Discussion :

Comment adapter le code "RameneNombreEntier" à ma recherche ? [AC-2013]


Sujet :

Access

  1. #1
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut Comment adapter le code "RameneNombreEntier" à ma recherche ?
    Salut Membres du forum !
    Je souhaite écrire un code qui me permet d'enregistrer automatiquement des nombres entiers successifs de 1;2;3 etc. dans un champ numérique d'une table.
    Exemple: ce code doit être paramétré selon un critère (mleparent as long, anneescol as string, idecole as long).
    From table where mlepa=" & mleparent....

    Voici la capture de la table dans laquelle voudrais je introduire le code en question:
    Nom : CaptureNombreEntierSelonCriteria.PNG
Affichages : 269
Taille : 67,2 Ko

    et le champ concerné pour introduire les nombres entiers est "Chrono" ayant pour légende "Indice_Modalité" (voir ligne jaune verticale) ,

    le stLinkCriteria selon les champs avec (*)

    Le code me permettra de compter le champ "Chrono" de chaque personne de 1 aux nombres entiers successifs jusqu'à la dernière ligne atteinte selon le stLinkCriteria.

    je sollicite votre aide.
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  2. #2
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut Comment adapter le code suivant à ma recherche ?
    Bonjour membres du forum !
    Comment adapter le code suivant à ma recherche ?
    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
    Public Function RameneNombreEntier(NumParResp As Long, AnSco As String)
     
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
     
    Dim strSelect As String
    Dim strSqlWhere As String
    Dim strSqlJoin As String
     
    If NewRecord Then
     
    strSelect = "SELECT Max(chrono) FROM PAYEMENTS_Scolairite"
    strSqlWhere = " WHERE "
    strSqlJoin = " AND "
    strSqlWhere = strSqlWhere & "Format(datescol,""yyyy"") = " & Chr(34) & Format(Me.anneeid, "yyyy") & Chr(34)
    strSqlWhere = strSqlWhere & strSqlJoin
    strSqlWhere = strSqlWhere & "NumEnregistreParResponsable = " & NumParResp & "and AnneeScolairePay='" & AnSco & "';"
     
    strSQL = strSelect & strSqlWhere
    'Debug.Print strSql
        Set rst = CurrentDb.OpenRecordset(strSQL)
            With rst
                If Not .EOF Then
                Me![chrono].Value = Nz(.Fields(0).Value, 0) + 1
                Else
                Me![chrono].Value = 1
                End If
                .Close
            End With
    End If
        Me.chronoperso.Value = "Versement N° " & Year([datescol]) & "." & Format([chrono], "00")
     
    End Function
    Message d'erreur:
    Nom : CaptureVariableNonDéfinie.PNG
Affichages : 214
Taille : 36,3 Ko

    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  3. #3
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Bonjour,

    Il faut sans doute écrire Me.NewRecord, Me étant le formulaire dans lequel se trouve le code de la fonction (la fonction ne doit pas être placée dans un module externe).

    Voir aussi la fonction DMax(), plus simple à employer que le SELECT Max...

    Bonne continuation.

  4. #4
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Bonsoir membres du forum,
    bonsoir EricDgn !
    J'ai déplacé le code le module du formulaire, et ajouté le Me. à l'objet "NewRecord"
    J'ai introduit la fonction DMax() dans mon code mais à l'appel, ça me ramène des "0".

    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
    Public Function RameneNombreEntier(NumParResp As Long, AnSco As String)
     
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
     
    Dim strSelect As String
    Dim strSqlWhere As String
    Dim strSqlJoin As String
     
    If Me.NewRecord Then
     
    strSelect = "DMax((chrono) FROM PAYEMENTS_Scolairite)"
    strSqlWhere = " WHERE "
    strSqlJoin = " AND "
    strSqlWhere = strSqlWhere & "Format(datescol,""yyyy"") = " & Chr(34) & Format(Me.anneeid, "yyyy") & Chr(34)
    strSqlWhere = strSqlWhere & strSqlJoin
    strSqlWhere = strSqlWhere & "NumEnregistreParResponsable = " & NumParResp & "and AnneeScolairePay='" & AnSco & "';"
     
    strSQL = strSelect & strSqlWhere
    'Debug.Print strSql
        Set rst = CurrentDb.OpenRecordset(strSQL)
            With rst
                If Not .EOF Then
                Me![chrono].Value = Nz(.Fields(0).Value, 0) + 1
                Else
                Me![chrono].Value = 1
                End If
                .Close
            End With
    End If
        Me.chronoperso.Value = "Versement N° " & Year([datescol]) & "." & Format([chrono], "00")
     
    End Function
    Voici comment je le ramène le champ Chrono:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub chrono_GotFocus()
     Me.chrono = RameneNombreEntier(Me.NumEnregistreParResponsable, Me.AnneeScolairePay)
    End Sub
    Nom : CaptureChrono.PNG
Affichages : 230
Taille : 58,5 Ko

    Pourriez me donner un exemple de la fonction DMax() par rapport à mon code ?
    Je suis stoppé à ce niveau.
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Pas vraiment le temps de regarder cela maintenant, mais DMax() s'utilise tout à fait autrement que SELECT ...
    Aussi conserver SELECT ...
    Cordialement.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 637
    Points : 14 611
    Points
    14 611
    Par défaut
    bonsoir morobaboumar,

    as-tu vraiment besoin d'une telle fonction pour te ramener la dernière valeur d'un champ ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub chrono_GotFocus()
     
    If Me.NewRecord Then
        Me.chrono = RameneProchainChrono(Me.NumEnregistreParResponsable, Me.AnneeScolairePay)
    end if 
     
    Me.chronoperso = "Versement N° " & Year(Me.[datescol]) & "." & Format(Me.[chrono], "00")
     
    End sub
    il faut éviter de mettre à jour des champs d'un formulaire directement dans une fonction, sauf si on ne peut pas faire autrement ou si cela évite de la duplication de code, il vaut mieux le faire dans les évènements du formulaire pour plus de lisibilité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function RameneProchainChrono(NumParResp As Long, AnSco As String) as integer
    dim itDernierChrono as long
     
    ' recherche du dernier chrono
        itDernierChrono = Nz(DMax("chrono","PAYEMENTS_Scolairite","Year(datescol)=" & Me.anneeid & _
        " and NumEnregistreParResponsable = " & NumParResp & " and AnneeScolairePay='" & AnSco & "'"),0)
    ' renvoie le prochain chrono	
        RameneProchainChrono = itDernierChrono + 1
     
    End Function
    pour plus d'information sur l'utilisation de Dmax regarde : ici
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Bonjour membres du forum,
    bonjour tee_grandbois,
    J'ai essayé le code que vous m'avez suggéré, voilà la suite:
    Nom : CaptureChrono2.PNG
Affichages : 191
Taille : 61,9 Ko

    Piece jointe de la BD.

    Cordialement.
    Fichiers attachés Fichiers attachés
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Bonjour,

    Cette routine calcule les indices chronologiques pour les enregistrements existants.
    Elle n'est pas à utiliser à l'encodage d'un nouvel enregistrement, là il faudra utiliser un DCount(,,) +1
    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
    Sub chrono()
       '--- à n'utiliser qu'une seule fois:
       '--- crée les numéros pour les enregistrements déjà encodés
       Dim sSQL As String, rst As Recordset
       Dim mlepa As String, idEts As Long, AnSco As String, Chro As Long
       sSQL = "SELECT mlepa_Enreg_ParResp, ID_EtablissFreq, AnneeScolairePay, dateVersement, chrono" & _
              " FROM PAYEMENTS_Scolairite" & _
              " ORDER BY mlepa_Enreg_ParResp, ID_EtablissFreq, AnneeScolairePay, dateVersement;"
       Set rst = CurrentDb.OpenRecordset(sSQL)
       mlepa = ""
       idEts = 0
       AnSco = ""
       Chro = 0
       With rst
          .MoveLast
          .MoveFirst
          While Not .EOF
             If !mlepa_Enreg_ParResp = mlepa And _
                   !ID_EtablissFreq = idEts And _
                   !AnneeScolairePay = AnSco Then
                Chro = Chro + 1
             Else
                mlepa = !mlepa_Enreg_ParResp
                idEts = !ID_EtablissFreq
                AnSco = !AnneeScolairePay
                Chro = 1
             End If
             .Edit
             !chrono = Chro
             .Update
             .MoveNext
          Wend
       End With
    End Sub
    C'est la partie ORDER BY qui décide de l'ordre de comptage.
    Le comptage redémarre à 1 à chaque changement d'année (AnneeScolairePay)

    A noter que dans la table utilisée il n'y a pas de lien avec l'enfant, uniquement avec le parent. Pas de parent avec plusieurs enfants?

    Bonne continuation.

  9. #9
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut remerciements
    Salut membres du forum,
    merci infiniment à vous EricDgn,
    merci infiniment à vous tee_grandbois,
    merci à toute la famille developpez.net.
    Notre discussion est
    infiniment.
    Cordialement.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  10. #10
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par EricDgn Voir le message
    Bonjour,
    Cette routine calcule les indices chronologiques pour les enregistrements existants.
    Elle n'est pas à utiliser à l'encodage d'un nouvel enregistrement, là il faudra utiliser un DCount(,,) +1
    S'il vous dans la mesure où l'on souhaiterait employer le code pour l'encodage d'un nouvel enregistrement, qu'est ce qui doit y être
    changé.

    A+
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

  11. #11
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 182
    Points : 5 514
    Points
    5 514
    Par défaut
    Voilà, après avoir modifié le formulaire Payements_scolarité pour qu'il accepte l'encodage de nouveaux enregistrements, le calcul de 'chrono' se fait ainsi:
    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
    Private Sub chrono_Enter()
       NumChrono
    End Sub
     
    Private Sub mlepa_Enreg_ParResp_LostFocus()
       NumChrono
    End Sub
     
    Private Sub NumEnregistreParResponsable_Change()
       On Error Resume Next '--- parfois erreur quand entrée avec souris
       Me.NumEnregistreParResponsable.Dropdown
    End Sub
     
    Private Sub NumChrono()
       Dim sWh As String
       If Nz(Me.chrono, 0) = 0 Then
          '--- test données nécessaires exitent
          If Nz(Me.AnneeScolairePay, "") = "" Then
             MsgBox "Il manque AnneeScolairePay"
             Me.AnneeScolairePay.SetFocus
          ElseIf Nz(Me.ID_EtablissFreq, 0) = 0 Then
             MsgBox "Il manque ID_EtablissFreq"
             Me.ID_EtablissFreq.SetFocus
          ElseIf Nz(Me.mlepa_Enreg_ParResp, 0) = 0 Then
             MsgBox "Il manque mlepa_Enreg_ParResp"
             Me.mlepa_Enreg_ParResp.SetFocus
          Else
             '--- détermine n° chrono
             sWh = "mlepa_Enreg_ParResp=" & Me.mlepa_Enreg_ParResp & _
                   " AND ID_EtablissFreq=" & Me.ID_EtablissFreq & _
                   " AND AnneeScolairePay='" & Me.AnneeScolairePay & "'"
             Me.chrono = DCount("Chrono", "PAYEMENTS_Scolairite", sWh) + 1
          End If
       Else
          '--- ne rien faire: un n° chrono a déjà été donné
       End If
    End Sub
    Bonne continuation.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 114
    Points : 491
    Points
    491
    Par défaut
    Bonsoir membres du forum !
    Très heureux.
    Les codes fonctionnent parfaitement.
    Je ne peux que vous souhaiter beaucoup de bonheurs tout le temps.
    Merci infiniment.
    A bientôt.
    Je ne Suis Pas un Expert en Programmation
    Le savoir est la lumière de l'esprit
    Le chemin de la réussite

    Les savants sont les héritiers de la science
    Qui cherche positivement trouve
    Tout ce qui brille n'est pas l'or ou diamant
    Mais l'or et le diamant se trouvent avec sagesse, intelligence et effort

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment insérer correctement des Conditions en PHP dans mon Code HTML ?
    Par cheboy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/09/2017, 15h33
  2. Réponses: 1
    Dernier message: 10/04/2013, 12h51
  3. [Free Pascal] Générer des nombres entiers aléatoires dans un tableau et trier celui-ci
    Par praetis dans le forum Free Pascal
    Réponses: 8
    Dernier message: 15/09/2012, 20h57
  4. Réponses: 3
    Dernier message: 16/09/2010, 12h54
  5. Insérer automatiquement des boutons dans des cellules excel
    Par Oaurelius dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/11/2005, 18h38

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