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

VBA Access Discussion :

Eviter de répéter un code x fois [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2012
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 103
    Par défaut Eviter de répéter un code x fois
    Bonjour tout le monde et meilleur voeux !

    Voila j'ai ce code qui fonctionne

    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 Form_current()
    Dim i As Integer
    Dim Critere As Date
    Dim DateTable As String
    Dim version1 As String
    Dim Date001 As Date
    Dim version2 As String
    Dim Date003 As Date
     
     
    Date001 = Nz(DMax("Document_Date01", "CPP", "ETUDE_ID=" & Me![ETUDE_ID]), "01/01/1900")
    If (Date001) = "01/01/1900" Then
    Me!Document_Version01 = " -"
    Else
    Me!date01 = Date001
    version1 = DLast("Document_Version01", "CPP", "ETUDE_ID=" & Me![ETUDE_ID] & "AND Document_Date01=#" & Me![date01] & "#")
    Me!Document_Version01 = version1
    End If
    Date002 = Nz(DMax("Document_Date02", "CPP", "ETUDE_ID=" & Me![ETUDE_ID]), "01/01/1900")
    If (Date002) = "01/01/1900" Then
    Me!Document_Version01 = " -"
    Else
    Me!date02 = Date002
    version2 = DLast("Document_Version02", "CPP", "ETUDE_ID=" & Me![ETUDE_ID] & "AND Document_Date02=#" & Me![date02] & "#")
    Me!Document_Version02 = version2
    End If
     
    Date003 = Nz(DMax("Document_Date03", "CPP", "ETUDE_ID=" & Me![ETUDE_ID]), "01/01/1900")
    If (Date003) = "01/01/1900" Then
    Me!Document_Version03 = " -"
    Else
    Me!date03 = Date003
    version3 = DLast("Document_Version03", "CPP", "ETUDE_ID=" & Me![ETUDE_ID] & "AND Document_Date03=#" & Me![date03] & "#")
    Me!Document_Version03 = version3
    End If
     
    End Sub
    Le problème c'est que je devrais le répéter x fois ( ici je l'ai répéter 3 fois)
    Et je voudrais faire un code plus simple pour m’éviter de le répéter.
    j'ai essayé ça:

    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
     
    Private Sub Form_current()
    Dim i As Integer
     
    Dim DateTable As String
    Dim version1 As String
    Dim Date00 As Date
     
     
    For i = 1 To x   'x nombre de fois que je voudrai le répéter
     
    Date00 = Nz(DMax(("Document_Date0" & i), "CPP", "ETUDE_ID=" & Me![ETUDE_ID]), "01/01/1900")
    If (Date00) = "01/01/1900" Then
    Me("Document_Version0" & i) = " -"
    Else
    Me("date0" & i) = Date00
    DateTable = "Document_Date0" & i
     
    version1 = DLast(("Document_Version0" & i), "CPP", "ETUDE_ID=" & Me![ETUDE_ID] & "AND DateTable=#" & Date00 & "#")
     
    Me("Document_Version0" & i) = version1
    End If
     Next
     
    End Sub
    Mais Access me mets ce message d'erreur :

    Erreur d'exécution 2471 : l'expression entrée comme paramètre de requête est à l'origine de l'erreur suivante : "DateTable"
    Est-ce que c'est le faite que je l'ai mis en "string"? (Désolé si ma question est bête mais je ne suis pas un expert en VBA)

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,

    au lieu de : "AND DateTable=#" ,

    il faut "AND " & DateTable & "=#"


    (Désolé si ma question est bête mais je ne suis pas un expert en VBA)
    D'après le reste du code, tu es trop modeste !

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2012
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 103
    Par défaut
    Merci ça marche
    Non pas modeste mais ça fait que 3 mois bientot que je me suis pencher dessus, et j'apprend tout seul donc plein de lacune, je comprend pas toujour pourquoi je dois faire ça mais je sais que ça doit marcher comme ça (merci internet et sur tout à ce forum )

    Mais maintenant j'ai un autre problème, c'est pour le format de la date
    j'ai la date du 06/12/2012 (06 décembre 2012)

    Donc avec le code d'avant
    version1 est null est j'ai donc un message d'erreur alors qu'il ne devrait pas être null

    je sais que c'est le format des date du VBA mais j'arrive pas a le corriger. il doit comprendre le 12 juin 2012 alors que le 13/12/2012 il comprend très bien

    comment faire ?

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Pour apprendre

    D'une manière générale, pour se documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
    - afficher l'objet en mode construction ;
    - cliquer sur la propriété => elle se met en surbrillance ;
    - enfoncer la touche <F1>
    => l'aide Access s'ouvre à la bonne page.
    De même dans le code, placer le curseur de la souris et enfoncer F1.
    On peut aussi :
    • ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
    • ouvrir la fenêtre d'exécution (<Ctrl>+G), saisir un mot-clé, y placer le curseur de la souris et enfoncer F1.

    -----------

    je ne comprends pas toujours pourquoi je dois faire ça mais je sais que ça doit marcher comme ça
    Dans le cas qui nous occupe, comme tu l'avais écrit, Access recherchait dans le domaine une colonne nommée "DateTable".

    Avec la correction, Access recherche une colonne qui porte le nom contenu dans la variable DateTable.

    Capito ?

    ------------


    Pour les dates, d'accord, c'est souvent la galère

    Vois :

    Les Fonctions Date/Heure
    http://mhubiche.developpez.com/vba/f...ions/datetime/ tu comprendras mieux comment ça marche,


    et aussi le § IV B-1 de ce tutoriel (autopub !)
    tu y trouveras des exemples.

    Tu devras probablement écrire format(LaDateEnQuestion,"mm/dd/yy").

    Reviens si problème et bonne continuation.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2012
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 103
    Par défaut
    MErci beaucoup pour tout ces explication et les liens

    j'avais essayer avec format mais ça n'avait pas marcher

    mais maintenant ça marche (j'avais du oublier surement fait quelque chose de faux)

    Maintenant dans mon champs date01 j'ai la date 12/06/2012 qui apparaît au lieu de 06/12/2012

    en essayant un autre format pour le champs ça me mets le mauvaise date pour les autres dates 11/16/2012

    Il faudrait faire un if, si le jour est supérieur à 12 il prend se format et si non il prend l'autre format.

    Je sais pas si c'est possible? vais voir si je trouve ça

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2012
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 103
    Par défaut
    J'ai trouvé

    pour ceux que ça intéresse :

    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
    Private Sub Form_current()
    Dim i As Integer
     
    Dim DateTable As String
    Dim version1 As String
    Dim Date00 As Date
     
     
    For i = 1 To X   'X nombre de fois que je voudrai le répéter
     
    Date00 = Nz(DMax(("Document_Date0" & i), "CPP", "ETUDE_ID=" & Me![ETUDE_ID]), "01/01/1900")
    If (Date00) = "01/01/1900" Then
    Me("Document_Version0" & i) = " -"
    Else
     
    DateTable = "Document_Date0" & i
    Date00 = Format(Date00, "mm/dd/yyyy")
    version1 = DLast(("Document_Version0" & i), "CPP", "ETUDE_ID=" & Me![ETUDE_ID] & "AND " & DateTable & "=#" & Date00 & "#")
     
    Me("Document_Version0" & i) = version1
     
    Me("date0" & i) = Date00
        If Format(Date00, "dd") < 13 Then
    Me("date0" & i) = Format(Me("date0" & i), "mm/dd/yyyy")
        End If
     
    End If
    Next
     
    End Sub

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

Discussions similaires

  1. [RegEx] Eviter de répéter l'option \s (espace) ?
    Par FrontLine dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2008, 01h48
  2. Répéter du code sur chaque page
    Par monrded dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/07/2008, 08h40
  3. Répéter une ligne N fois
    Par rs dans le forum SQL
    Réponses: 5
    Dernier message: 09/08/2007, 15h40
  4. [HTML]Eviter les redondances de code
    Par Pfeffer dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 30/12/2005, 09h13
  5. Réponses: 2
    Dernier message: 05/07/2005, 14h46

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