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 :

Erreur dans Code vba


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 161
    Points : 59
    Points
    59
    Par défaut Erreur dans Code vba
    Bonjour à tous,

    J'ai fait des recherches sur internet afin de trouver un planning qui permet au salarié d'une entreprise d'entrer leur pointage. Le problème c'est que je ne retrouve plus la source.

    J'ai donc récupérer ce fichier, je m'en suit inspirer pour créer le même principe mais avec mes données. Pour les tables et les requêtes tout va bien mais une fois que je veux créer les formulaires a partir de ces requêtes, je suis bloquée. J'ai bien réussi a créer le sous formulaire mais impossible de l'utiliser dans le formulaire "général". Dans le code vba, il y a une erreur :objet requis et je ne sais pas comment résoudre cela. Sa fait déjà plusieurs jours que je chercher et que je ne trouve pas.

    Je vous ai mis en pièce jointe la base de données de départ.


    Et je vous met le code vba du module où l'erreur apparaît.
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    Option Compare Database
    
    
    Public Function FDateUs(vDate As Date) As String
    FDateUs = "#" & Format(vDate, "mm/dd/yyyy") & "#"
    End Function
    
    '
    ' Retourne le nombre de jour d'un mois donné, en utilisant Day(), DateSerial et DateAdd()
    '
    Public Function DaysInMonth(ByVal nMonth As Integer, ByVal nYear As Integer) As Integer
    
        DaysInMonth = Day(DateAdd("d", -1, DateAdd("m", 1, DateSerial(nYear, nMonth, 1))))
    
    End Function
    
    ' Code de la faq : Auteur MC2.
    
    Function EstFerie(ByVal QuelleDate As Date) As Boolean
    Dim anneeDate As Integer
    Dim joursFeries(1 To 11) As Date
    Dim i As Integer
      anneeDate = Year(QuelleDate)
     
      joursFeries(1) = DateSerial(anneeDate, 1, 1)
      joursFeries(2) = DateSerial(anneeDate, 5, 1)
      joursFeries(3) = DateSerial(anneeDate, 5, 8)
      joursFeries(4) = DateSerial(anneeDate, 7, 14)
      joursFeries(5) = DateSerial(anneeDate, 8, 15)
      joursFeries(6) = DateSerial(anneeDate, 11, 1)
      joursFeries(7) = DateSerial(anneeDate, 11, 11)
      joursFeries(8) = DateSerial(anneeDate, 12, 25)
     
      joursFeries(9) = fLundiPaques(anneeDate)
      joursFeries(10) = joursFeries(9) + 38 ' Ascension = lundi de Paques + 38
      joursFeries(11) = joursFeries(9) + 49 ' Lundi Pentecôte = lundi de Paques + 49
     
      For i = 1 To 11
        If QuelleDate = joursFeries(i) Then
          EstFerie = True
          Exit For
        End If
      Next
    End Function
    
    Private Function fLundiPaques(ByVal Iyear As Integer) As Date
            'Adapté de +ieurs scripts...
            Dim L(6) As Long, Lj As Long, Lm As Long
           
            L(1) = Iyear Mod 19: L(2) = Iyear Mod 4: L(3) = Iyear Mod 7
            L(4) = (19 * L(1) + 24) Mod 30
            L(5) = ((2 * L(2)) + (4 * L(3)) + (6 * L(4)) + 5) Mod 7
            L(6) = 22 + L(4) + L(5)
           
            If L(6) > 31 Then
                    Lj = L(6) - 31
                    Lm = 4
            Else
                    Lj = L(6)
                    Lm = 3
            End If
           
            ' Lundi de Pâques = Paques + 1 jour
            fLundiPaques = DateAdd("d", 1, (Lj & "/" & Lm & "/" & Iyear))
           
    End Function
    
    Public Sub MajPlanning()
    Dim ND As Integer, j As Integer
    Dim DateJ As Date, S As Double, ST As Double
    
    ND = DaysInMonth(Forms!Frm_Pointage!Mois, Forms!Frm_Pointage!An)
    DateJ = DateSerial(Forms!Frm_Pointage!An, Forms!Frm_Pointage!Mois, 1)
    
    ST = 0
    
    'Forms!Frm_Pointage!SFrm_Pointage.Form!controle1.SetFocus
    
    For j = 1 To ND
    
    Forms!Frm_Pointage!SF_Pointage.Form("Col" & j).Caption = UCase(Left(Format(DateJ, "ddd"), 1)) & vbCrLf & j
    
       If (DateJ = Date) Then ' 15852772
          Forms!Frm_Pointage!SF_Pointage.Form("Col" & j).BackColor = 15852772
          Forms!Frm_Pointage!SF_Pointage.Form("Jour" & j).BackColor = 15852772
       ElseIf EstWeekEnd(DateJ) Then
          Forms!Frm_Pointage!SF_Pointage.Form("Col" & j).BackColor = 13428479
          Forms!Frm_Pointage!SF_Pointage.Form("Jour" & j).BackColor = 13428479
       ElseIf EstFerie(DateJ) Then
          Forms!Frm_Pointage!SF_Pointage.Form("Col" & j).BackColor = 8963327
          Forms!Frm_Pointage!SF_Pointage.Form("Jour" & j).BackColor = 8963327
       Else
          Forms!Frm_Pointage!SF_Pointage.Form("Col" & j).BackColor = 16761024
          Forms!Frm_Pointage!SF_Pointage.Form("Jour" & j).BackColor = vbWhite
       End If
    
    S = Nz(DSum("[NbHeuresPointees]", "[T_Pointage]", "[DatePointage] = " & FDateUs(DateJ) & " and ([LoginSalarié]=" & Formulaires!Frm_Pointage!loginSalarie & ")"), 0)
    ST = ST + S
    
    Forms!Frm_Pointage!SF_Pointage.Form("Total" & j).Value = S
    
    DateJ = DateJ + 1
    Next j
    
    Forms!Frm_Pointage!SF_Pointage.Form("Total").Value = ST
    
    For j = 29 To ND
    Forms!Frm_Pointage!SF_Pointage.Form("Col" & j).Visible = True
    Forms!Frm_Pointage!SF_Pointage.Form("Jour" & j).Visible = True
    Next j
    
    
    For j = (ND + 1) To 31
    Forms!Frm_Pointage!SF_Pointage.Form("Col" & j).Visible = False
    Forms!Frm_Pointage!SF_Pointage.Form("Jour" & j).Visible = False
    Next j
    
    Forms!Frm_Pointage!SF_Pointage.Requery
    
    End Sub
    Public Function EstWeekEnd(dt As Date) As Boolean
    EstWeekEnd = (Weekday(dt) = 1) Or (Weekday(dt) = 7)
    
    End Function
    
    Public Sub MajReport()
    Dim ND As Integer, j As Integer
    Dim DateJ As Date
    
    ND = DaysInMonth(Forms!Frm_Pointage!Mois, Forms!Frm_Pointage!An)
    DateJ = DateSerial(Forms!Frm_Pointage!An, Forms!Frm_Pointage!Mois, 1)
    
    Reports!R_Récup_Pointage_par_Affaires_par_Salarié!Titre.Caption = "Planning mensuel des heures pour le mois de " & Format(DateJ, "mmmm yyyy")
    
    For j = 1 To ND
    
    Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Col" & j).Caption = UCase(Left(Format(DateJ, "ddd"), 1)) & vbCrLf & j
    
       If EstWeekEnd(DateJ) Or EstFerie(DateJ) Then
          Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Col" & j).BackColor = 13428479
          Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Jour" & j).BackColor = 13428479
       Else
          Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Col" & j).BackColor = 16761024
          Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Jour" & j).BackColor = vbWhite
       End If
       
    DateJ = DateJ + 1
    Next j
    
    For j = 29 To ND
    Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Col" & j).Visible = True
    Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Jour" & j).Visible = True
    Next j
    
    
    For j = (ND + 1) To 31
    Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Col" & j).Visible = False
    Reports!R_Récup_Pointage_par_Affaires_par_Salarié("Jour" & j).Visible = False
    Next j
    
    End Sub
    
    Public Function OuvrirFormSaisie(j As Integer)
    Dim DateJ As Date
    
    DateJ = DateSerial(Forms!Frm_Pointage!An, Forms!Frm_Pointage!Mois, j)
    
    'DoCmd.OpenForm "F_Saisie", , , "[LoginSalarié]=" & Nz(Formulaires!Frm_Pointage!loginSalarie, 0) & " and [Référénce Commande]=" & Nz(Formulaires!Frm_Pointage!SF_Pointage!Référence_Commande, 0) & " and ([DatePointage]=" & FDateUs(DateJ) & ")"
    DoCmd.OpenForm "F_Saisie", , , "[Référénce Commande]=" & Nz(Formulaires!Frm_Pointage!SF_Pointage!Référence_Commande, 0) & " and ([DatePointage]=" & FDateUs(DateJ) & ")"
    
    Forms!F_Saisie!loginSalarie.Value = Forms!Frm_Pointage!loginSalarie
    Forms!F_Saisie!Jour.Value = DateJ
    Forms!F_Saisie!Référence_Commande.Value = Forms!Frm_Pointage!SF_Pointage!Référence_Commande
    
    End Function
    PS: En violet la partie où est l'erreur

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Points : 129
    Points
    129
    Par défaut
    Bonjour,

    Dans la ligne qui semble poser problème (car oui le problème peut toujours résider ailleurs), j'ai remarqué que tu as bien entouré FDateUS de # en début de code, cependant pour LoginSalarié je ne vois pas de ' (si c'est bien une chaîne de caractère du moins).
    De même, peut-être qu'un .Value changerait les choses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    S = Nz(DSum("[NbHeuresPointees]", "[T_Pointage]", "[DatePointage] = " & FDateUs(DateJ) & " and ([LoginSalarié]= '" & Formulaires!Frm_Pointage!loginSalarie.Value & "')"), 0)
    Je n'utilise pas plus que ça les fonction Nz et DSum alors c'est tout ce que je peux te dire avant de me pencher un peu plus sur ton code.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 161
    Points : 59
    Points
    59
    Par défaut
    Merci de ta réponse, je l'ai testé au travail malheureusement elle ne fonctionne pas.
    Ce qui est compliqué dans l'affaire c'est que j'ai récupéré du code que je remet à "ma sauce" mais comme les champs ne correspondent pas (je souhaite en afficher plus), mais aussi que je ne souhaite pas tout a fait faire la même chose, tous cela complique la tâche.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Points : 129
    Points
    129
    Par défaut
    Bonjour,

    Désolé de ne pas avoir donner suite à ton message hier mais j'étais surchargé jusque 22h alors tu penses bien qu'en rentrant je me suis bien reposé

    Pour en revenir à ton problème, si ton champ LoginSalarié est bien de type texte, laisse le bien entouré de ' même si ton problème ne semble pas venir de là.

    J'avoue avoir un peu de mal à me plonger dans ton code tel qu'il est écrit, alors si ce soir j'ai un peu de temps, j'essaierai de travailler un peu dessus.
    En attendant, tu dis ne pas vouloir faire exactement la même chose que ce programme, donc tu peux toujours exposer plus en détail ce que tu souhaites pour que d'autres puissent t'aider.
    Je te conseil aussi de refaire ton propre code en parallèle et te t'aider quand il le faut du programme.
    Cela permet de mieux comprendre et ça te donnera l'occasion de faire le tri

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 161
    Points : 59
    Points
    59
    Par défaut
    Salut,

    Je viens de voir ta réponse, tkt c'est déjà bien sympa de ta part de prendre de ton temps pour répondre à mes questions.

    Pour le problème c'est bon j'ai réussi grace a 'laide d'un autre utilisateur sur une autre discussion( je crois que c'est la personne qui avait créé le planning).
    L'erreur venait simplement du fait que le nom de la zone ne correspondait pas avec celle du formulaire.

    Quand au code, oui c'est pas bête du tout que je "recrée" le mien et que je m'inspire de l'autre si besoin, comme cela sa permet de mieux comprendre comment sa marche et donc de ne plus poser des questions bêtes.
    Je retiens cela pour les prochains codes que je serai amenée à faire.

    En tout cas un grand merci de ton aide, et je te prie encore de m'excuser pour cette réponse tardive.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Points : 129
    Points
    129
    Par défaut
    Salut,

    C'est sûr que si le nom du formulaire ne correspond pas, ça marche moins bien
    Et moi qui cherchais compliqué...

    Sinon pas la peine de t'excuser ou de me remercier, c'était vraiment rien
    Si encore j'avais réussi à t'aider plus que ça

    Bon courage pour la suite, n'oublie pas de mettre le sujet en tant que Résolu si ce n'est déjà fait.

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

Discussions similaires

  1. [WD-2007] Erreur dans code VBA
    Par Elsa742 dans le forum VBA Word
    Réponses: 6
    Dernier message: 21/06/2010, 00h39
  2. Erreur dans code VBA
    Par symphyle dans le forum VBA Access
    Réponses: 7
    Dernier message: 23/12/2008, 14h28
  3. erreur dans code vba
    Par Renardo dans le forum IHM
    Réponses: 2
    Dernier message: 15/12/2008, 15h35
  4. PW perdu dans code VBA sous Excel ?
    Par electrosat03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/01/2007, 22h32
  5. [MySQL] Erreur dans code php
    Par Badr3am dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 31/01/2006, 22h16

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