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

IHM Discussion :

[Etat] Mise en forme d'un etat conditionnel


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 71
    Points
    71
    Par défaut [Etat] Mise en forme d'un etat conditionnel
    Je possède une requête qui fait apparaitre une somme suivant la date d'enregistrement:

    Table: heures de travail
    Nom
    Date
    Valeur

    J'ai créé une requête pour faire la somme des valeurs par nom et en regroupant les dates par semaine.
    J'en ai fait une seconde pour les mois.

    Les deux grace à :Format$([heures de travail].[Date],'ww yyyy') AS Semaine
    puis un regroupement par nom et semaine.

    Maintenant je cherche par un formulaire à l'aide de cases à cocher choisir l'etat à afficher par mois ou semaine mais egalement pouvoir choisir ma semaine ou mois.

    Comment puis-je faire? Je suppose par du VBA?

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    tu pourrai avoir deux Etats. Un regroupé par mois et un regroupé par semaines.
    En fonction des cases à cocher tu ouvres l'un ou l'autre.
    Pour t'assurer que les deux cases à cocher n'ont pas la même valeur tu mets ce code dans l'évènement Après MAJ
    des cases à cocher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub cbSemaine_AfterUpdate()
      Me.cbMois = Not Me.cbSemaine
    End Sub
     
    Private Sub cbMois_AfterUpdate()
      Me.cbSemaine = Not Me.cbMois
    End Sub
    Tu définis une case cachée par défaut dans l'évènement Sur Ouverture du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Load()
      Me.cbMois = True
    End Sub
    Sur le formulaire, en plus des cases à cocher, tu mets deux zones de textes (txtAnnee et txtMoisOuSem).
    Cela permet de créer une condition WHERE pour l'état à ouvrir.

    Exemple de code d'un bouton
    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
    Dim strDoc As String
    Dim strWHERE As String, strAnnee As String, strMoisOuSem As String
    
    ' Choix Etat à ouvrir
    If cbMois = True Then strDoc = "EtatMois"
    If cbSemaine = True Then strDoc = "EtatSemaine"
    
    strAnnee = Format(Nz([txtAnnee], 0), "0000")
    strMoisOuSem = Format(Nz([txtMoisOuSem], 0), "00")
    
    If strAnnee = "0000" Or strMoisOuSem = "00" Then
       ' Afficher un message d'erreur. Au moins une donnée est manquante
       Exit Sub
    Else
       ' Construction du critère pour un filtrage par Mois
       If cbMois = True Then
          strWHERE = "Format([Date], ""yyyymm"") = '" & strAnnee & strMoisOuSem & "'"
       End If
       ' Construction du critère pour un filtrage par Semaine
       If cbSemaine = True Then
          strWHERE = "Format(Year([Date])*100 + datepart(""ww"",[Date],0,3), _
                     ""000000"") = '" & strAnnee & strMoisOuSem & "'"
       End If
       ' Ouverture état filtré par condition WHERE
       DoCmd.OpenReport strDoc, acViewPreview, , strWHERE
    End If
    Voir plus en détail l'aide de DatePart pour les deux derniers paramètres.
    Ils influent sur le numéro de semaine retourné (premier jour de la semaine et définition de la semaine 1).

    Voir aussi les tutoriels Recherche mutli-critère.
    C'est le même principe : création d'une condition WHERE pour filtrer des données.

    A+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Je suis débutant avec un strict minimum sur visual basic,
    Le code ne fonctionne pas donc je cherche à comprendre le code pour l'adapter à ma base de donnée.

    Grand merci d'avance aux personnes qui voudront bien m'aider!!!!!!!

    1- Dois-je avoir une requête avec le champs date normal et non déjà regroupé par semaine ou mois pour faire le formulaire indiqué?

    2- A quoi sert le strDoc?
    Citation Envoyé par LedZeppII
    Exemple de code d'un bouton
    [CODE]Dim strDoc As String
    Dim strWHERE As String, strAnnee As String, strMoisOuSem As String
    3- A quoi sert le Nz dans la definition du format?
    strAnnee = Format(Nz([txtAnnee], 0), "0000")
    strMoisOuSem = Format(Nz([txtMoisOuSem], 0), "00")
    4- Al la ligne suivante dois je ajouter le texte de mon choix avec " ... "?
    If strAnnee = "0000" Or strMoisOuSem = "00" Then
    ' Afficher un message d'erreur. Au moins une donnée est manquante
    Exit Sub
    5- Un msg d'erreur: "erreur de compilation Else and If" apparait au niveau du Else de quoi ça vient?

    6- A quoi sert la ligne de code suivante?
    If cbMois = True Then
    strWHERE = "Format([Date], ""yyyymm"") = '" & strAnnee & strMoisOuSem & "'"
    End If
    A définir mon année?

    7- La ligne de code suivante s'affiche en rouge donc il y a une erreur mais laquelle?
    If cbSemaine = True Then
    strWHERE = "Format(Year([Semaine])*100 + datepart(""ww"",[Semaine],0,3), _
    ""000000"") = '" & strAnnee & strMoisOuSem & "'"

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Je réponds à tes questions point par point.

    1. Dois-je avoir une requête avec le champs date normal et non déjà regroupé par semaine ou mois pour faire le formulaire indiqué?
    Tu dois avoir le champ date en plus de ton champ de regroupement pour que mon code fonctionne.
    Pour avoir la somme entrer dans une zone de texte : = Somme([NomDuChamp])
    Remarque : Somme([Valeur]) ne fonctionne pas chez moi. J'ai du renommer le champ en Valeur1 et écrire = Somme([Valeur1]).
    L' état fera le regroupement sur les champs de regroupement et la somme dans le pied de groupe (sur Nom par exemple).

    Donc dans ta requête tu aura les champs de ta table (Nom, Date, Valeur1) et ton champ de regroupement (Format$([heures de travail].[Date],'ww yyyy') AS Semaine ou Format$([heures de travail].[Date],'mm yyyy') AS Mois)

    2. strDoc est une variable texte destinée à recevoir le nom de l'état à ouvrir.

    3. Nz est une fonction Access qui permet de substituer une valeur à Null (champ vide)
    Dans mon exemple la valeur de remplacement est 0 (zéro).

    4. Tu affiche un message de ton choix avec la fonction MsgBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If strAnnee = "0000" Or strMoisOuSem = "00" Then
       ' Afficher un message d'erreur. Au moins une donnée est manquante
       MsgBox "Au moins une donnée est manquante"
       Exit Sub
    Else
       ...
    End If
    5. Je ne vois pas. Peut-être qu'il manque un End If

    6. Cette ligne crée un critère de sélection sur Année et Mois

    7. L'erreur vient de ce qu'il manque un espace entre , et _
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       If cbSemaine = True Then
          strWHERE = "Format(Year([Date])*100 + datepart(""ww"",[Date],0,3), _
                     ""000000"") = '" & strAnnee & strMoisOuSem & "'"
       End If
    _ sert à dire que la ligne qui suit est la suite de la ligne juste au dessus parce qu'on l'a coupé. _ doit être précédé d'un espace.


    Si je reprends mon exemple,

    On a un état regroupé par semaine (EtatSemaine) et un état regroupé par mois (EtatMois).
    En fonction de l'état des cases à cocher cbMois et cbSemaine la variable strDoc contient le nom de l'état EtatSemaine ou EtatMois.
    La fonction DoCmd.OpenReport à la fin du code ouvrira l'état dont le nom est dans la variable strDoc.

    txtAnnee est la zone de texte dans laquelle on saisi l'année (4 chiffres) et
    txtMoisOuSemaine est la zone de texte dans laquelle on saisi le mois ou la semaine.
    Si l'année et le mois (ou la semaine) sont renseignés, le code crée un critère pour filtrer les données.
    J'ai choisi une forme condensée combinant année et mois ou année et semaine dans une chaîne de caractères.

    On aurait aussi pu faire comme ça (à la reflexion c'est plus lisible):
    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
    Dim strDoc As String
    Dim strWHERE As String, strAnnee As String, strMoisOuSem As String
    
    ' Choix Etat à ouvrir
    If cbMois = True Then strDoc = "EtatMois"
    If cbSemaine = True Then strDoc = "EtatSemaine"
    
    strAnnee = CStr(Nz([txtAnnee], 0))
    strMoisOuSem = CStr(Nz([txtMoisOuSem], 0))
    
    If strAnnee = "0" Or strMoisOuSem = "0" Then
       ' Afficher un message d'erreur
       MsgBox "Au moins un valeur n'est pas renseignée"
       Exit Sub
    Else
       ' Critère sur Année et Mois
       If cbMois = True Then
          strWHERE = "Year([Date])= " & strAnnee & " AND Month([Date]) = " & strMoisOuSem
       End If
       ' Critère sur Année et Semaine
       If cbSemaine = True Then
          strWHERE = "Year([Date])= " & strAnnee & " AND DatePart(""ww"",[Date],0,3) = " & strMoisOuSem
       End If
       DoCmd.OpenReport strDoc, acViewPreview, , strWHERE
    End If
    Si tu veux conserver tes Etats basés sur des requêtes de regroupement (la requête fait la somme au lieu de l'état) :
    Le formulaire a une zone de texte txtSemaine dans laquelle on saisi la semaine et l'année (ww YYYY),
    une zone de texte txtMois dans laquelle on saisi le mois et l'année (mm YYYY),
    deux cases à cocher cbMois et cbSemaine, et un bouton dont voici le code

    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
    Dim strDoc As String
    Dim strWHERE As String, strMois As String, strSemaine As String
    
     ' Choix Etat à ouvrir
    If cbMois = True Then strDoc = "EtatMois"
    If cbSemaine = True Then strDoc = "EtatSemaine"
    
    strMois = Nz([txtMois], "")
    strSemaine = Nz([txtSemaine], "")
    
    If cbMois And strMois = "" Then
       ' message d'erreur si txtMois est vide
       MsgBox "Entrer mois et année (MM AAAA)"
       Exit Sub
    End If
    
    If cbSemaine And strSemaine = "" Then
       ' message d'erreur si txtSemaine
       MsgBox "Entrer semaine et année (SS AAAA)"
       Exit Sub
    End If
    
    ' Critère sur champ Mois Format$([heures de travail].[Date],'mm yyyy')
    If cbMois = True Then
       strWHERE = "Mois ='" & strMois & "'"
    End If
    
    ' Critère sur champ Semaine Format$([heures de travail].[Date],'ww yyyy')
    If cbSemaine = True Then
       strWHERE = "Semaine ='" & strSemaine & "'"
    End If
    
    DoCmd.OpenReport strDoc, acViewPreview, , strWHERE
    A+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Grand merci pour ces explications !!!!!!

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 71
    Points
    71
    Par défaut améliorations
    Voici la solution que j'ai opté (La dernière):
    Private Sub Form_Load()
    Me.cbMois = True
    Me.cbSemaine = False
    End Sub
    Private Sub cbSemaine_AfterUpdate()
    Me.cbMois = Not Me.cbSemaine
    End Sub

    Private Sub cbMois_AfterUpdate()
    Me.cbSemaine = Not Me.cbMois
    End Sub

    Private Sub Commande13_Click()
    Dim strDoc As String
    Dim strWHERE As String, strMois As String, strSemaine As String

    ' Choix Etat à ouvrir
    If cbMois = True Then strDoc = "Synthèse Mensuelle"
    If cbSemaine = True Then strDoc = "Synthèse hebdomadaire"

    strMois = Nz([txtMois], "")
    strSemaine = Nz([txtSemaine], "")

    If cbMois And strMois = "" Then
    ' message d'erreur si txtMois est vide
    MsgBox "Entrer mois et année (MM AAAA)"
    Exit Sub
    End If

    If cbSemaine And strSemaine = "" Then
    ' message d'erreur si txtSemaine
    MsgBox "Entrer semaine et année (SS AAAA)"
    Exit Sub
    End If

    ' Critère sur champ Mois Format$([heures de travail].[Jour],'mm yyyy')
    If cbMois = True Then
    strWHERE = "Mois ='" & strMois & "'"
    End If

    ' Critère sur champ Semaine Format$([heures de travail].[Jour],'ww yyyy')
    If cbSemaine = True Then
    strWHERE = "Semaine ='" & strSemaine & "'"
    End If

    DoCmd.OpenReport strDoc, acViewPreview, , strWHERE
    End Sub
    1 - Quand je reviens sur le formulaire la date choisi ne s'efface pas automatiquement.
    Je souhaite qu'à chaque retour sur formulaire la date s'efface. Comment dois-je procédé?

    2 - Actuellement, je peux filtrer avec une date précise grace à la zone texte.
    Je souhaite également voir toujours par semaine ou mois l'ensemble des enregistrements.
    Pour cela je pensais mettre une case à cocher pour tout voir (coché d'origine). La zone de texte serait alors grisée.
    Et si je veux filtrer la selection, je cliquerai sur la zone texte qui passerai active en blanc, à l'invers la case pour tout voir se désactiverai automatiquement.

    Je pense que c'est faisable mais comment?
    Ai-je été assez clair?

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    1.
    Il n'y a pas de retour au formulaire preprement dit.
    Mais on peut ajouter deux lignes dans le code du bouton après l'ouverture de l'Etat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DoCmd.OpenReport strDoc, acViewPreview, , strWHERE
    ' Lignes ajoutées pour 'blanchir' les zones de texte
    [txtMois] = Null
    [txtSemaine] = Null
    2.
    Aie! Une troisième case à cocher complique un peu.
    Admettons que la troisième case à cocher s'appelle cbTout.
    Voici le code des cases à cocher :
    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
    Private Sub Form_Load()
      Me.cbMois = True
      Me.cbSemaine = False
      Me.cbTout = False
      Me.txtSemaine.Enabled = False
    End Sub
     
    Private Sub cbSemaine_AfterUpdate()
    If Me.cbSemaine Then
       Me.cbMois = False
       Me.txtMois.Enabled = False ' Grise Mois
       Me.txtSemaine.Enabled = Not Me.cbTout
    Else
       Me.cbSemaine = True
    End If
    End Sub
     
    Private Sub cbMois_AfterUpdate()
    If Me.cbMois Then
       Me.cbSemaine = False
       Me.txtMois.Enabled = Not Me.cbTout
       Me.txtSemaine.Enabled = False ' Grise Semaine
    Else
       Me.cbMois = True
    End If
    End Sub
     
    Private Sub cbTout_AfterUpdate()
    If Me.cbTout Then
       Me.txtMois.Enabled = False    ' Grise Mois
       Me.txtSemaine.Enabled = False ' Grise Semaine
    Else
       ' Si Mois coché exécute code de l'évènement AfterUpdate
       If cbMois Then cbMois_AfterUpdate
       ' Si Semaine cochée exécute code de l'évènement AfterUpdate
       If cbSemaine Then cbSemaine_AfterUpdate
    End If
    End Sub
    Le code entre 'Else' end 'End If' des cases cbMois et cmSemaine empêche que l'on puisse
    décocher une case en cliquant dessus, en forçant sa valeur à True.
    (Comportement plus proche des boutons d'otpions)
    Si cbTout est cochée on grise les zones de textes, sinon on réutilise le code de l'évènement AfterUpdate de
    la case cbMois ou cbSemaine qui est cochée.

    Le code du bouton est presque le même à l'exception du filtrage des données, et le contôle des zones de texte.
    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
    Private Sub Commande13_Click()
    Dim strDoc As String
    Dim strWHERE As String, strMois As String, strSemaine As String
    
    ' Choix Etat à ouvrir
    If cbMois = True Then strDoc = "Synthèse Mensuelle"
    If cbSemaine = True Then strDoc = "Synthèse hebdomadaire"
    
    strMois = Nz([txtMois], "")
    strSemaine = Nz([txtSemaine], "")
    
    If Me.cbTout = False Then
       If cbMois And strMois = "" Then
       ' message d'erreur si txtMois est vide
       MsgBox "Entrer mois et année (MM AAAA)"
       Exit Sub
       End If
    
       If cbSemaine And strSemaine = "" Then
       ' message d'erreur si txtSemaine est vide
       MsgBox "Entrer semaine et année (SS AAAA)"
       Exit Sub
       End If
    
       ' Critère sur champ Mois Format$([heures de travail].[Jour],'mm yyyy')
       If cbMois = True Then
       strWHERE = "Mois ='" & strMois & "'"
       End If
    
       ' Critère sur champ Semaine Format$([heures de travail].[Jour],'ww yyyy')
       If cbSemaine = True Then
       strWHERE = "Semaine ='" & strSemaine & "'"
       End If
    
       DoCmd.OpenReport strDoc, acViewPreview, , strWHERE
    Else
       ' cbTout est cochée
       DoCmd.OpenReport strDoc, acViewPreview
    End If
    
    [txtMois] = Null
    [txtSemaine] = Null
    End Sub
    La partie en bleu est le code précédent, à n'exécuter que que si cbTout n'est pas cochée.
    La partie marron est un ajout de code correspondant au cas ou la cbTout est cochée.

    Voila. Si je ne me suis pas planté dans la transposition du code (j'ai plus de zones de texte), ça doit fonctionner.

    A+ et bon courage.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Merci encore pour tes explications.

    je vais essayer si cela ne fonctionne pas, je me creuse la tête.Si mes connaissances sont insuffisantes je te ferai peut-être encore appel.


  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    Cette solution fonctionne parfaitement!!!!!!

    Elle est adaptable à toutes les bases de données il suffit de changer les champs et les etats.

    Pour ceux qui en doute je suis débutant, et l'a déjà appliqué à une autre base de donnée avec succes en plus de celle présente.

    Grand merci à LedZeppII

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2006
    Messages : 160
    Points : 71
    Points
    71
    Par défaut
    J'aime comprendre ce que je fais et je suis perfectionniste (donc je suis "chieur" ).

    1- J'ai compris l'ensemble du code à l'exeption du str... ? A quoi sert-il? Doit-on mettre le champs renvoyé à la suite?

    2- Dans ma zone de texte je peux saisir une date souhaitée sous la forme: "mm aaaa" ou "ss aaaa".
    Si le champs n'est pas rempli un msg d'erreur apparait. Mais si il est mal rempli la requête s'execute en n'affichant rien.
    Ex de mauvaise saisie: "09" pour le neuvième mois

    Il y a-til une solution pour obliger à remplir correctement ou faire apparaitre msg d'erreur afin de preciser le critère?

    C'est promi après mon menu sera fini et je ne vous embête plus

    bye et merci d'avance

  11. #11
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    J'ai compris l'ensemble du code à l'exeption du str... ? A quoi sert-il? Doit-on mettre le champs renvoyé à la suite?
    Il s'agit d'une convention typographique permettant d'identifier le type de la variable.
    str pour String
    Voir le tutoriel Conventions typographique pour de plus amples précisions.

    2. Ca peut se faire au niveau du contrôle zone de texte.
    Dans l'onglet Données des propriétés du contrôle ...
    txtSemaine
    Masque de saisie : 00 0000;0
    N'accepte que des caractères 0 à 9
    ;0 indique qu'il faut retenir l'espace entre 00 et 0000

    Valide Si : CLong(ExtracChaîne([txtSemaine];1;2))>0 Et CLong(ExtracChaîne([txtSemaine];1;2))<54 Et
    CLong(ExtracChaîne([txtSemaine];4;4))>1999 Et CLong(ExtracChaîne([txtSemaine];4;4))<(Année(Date())+1)
    Semaine comprise entre 01 et 53 et année entre 2000 et l'année en cours
    ExtracChaîne extrait une sous-chaîne de caractère (chaîne;position début;longueur)
    CLong convertit en entier long

    Message si erreur : Veuillez entrer la semaine sous la forme SS AAAA

    txtMois:
    Masque de saisie : 00 0000;0

    Valide Si : CLong(ExtracChaîne([txtSemaine];1;2))>0 Et CLong(ExtracChaîne([txtSemaine];1;2))<13 Et
    CLong(ExtracChaîne([txtSemaine];4;4))>1999 Et CLong(ExtracChaîne([txtSemaine];4;4))<(Année(Date())+1)

    Message si erreur : Veuillez entrer le mois sous la forme MM AAAA

    Ca peut aussi se faire en code VBA avec plein de If ... Then ... End If, mais ça rallonge le code.
    Voici un exemple pour txtSemaine. Pas parfait car il ne vérifie pas quel le numéro de semaine max pour l'année selectionnée.
    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
        If cbSemaine And strSemaine = "" Then
           ' Afficher un message d'erreur
           MsgBox "Entrer semaine et année (SS AAAA)"
           Exit Sub
        End If
        
        If CLng(Mid(strSemaine, 4, 4)) < 1999 Or CLng(Mid(strSemaine, 4, 4)) > Year(Date) Then
           ' L'année n'est pas dans la plage attendue
           MsgBox "L'année n'est pas dans la plage attendue"
           Exit Sub
        ElseIf CLng(Mid(strSemaine, 4, 4)) = Year(Date) Then
           ' L'année est l'année en cours
           If CLng(Mid(strSemaine, 1, 2)) < 1 Or CLng(Mid(strSemaine, 4, 4)) > DatePart(ww, Date, vbMonday, vbUseSystem) Then
              ' La semaine n'est pas valide pour l'année en cours
              MsgBox "La semaine n'est pas valide pour l'année en cours"
              Exit Sub
           End If
        Else
           ' L'année est valide
           If CLng(Mid(strSemaine, 1, 2)) < 1 Or CLng(Mid(strSemaine, 4, 4)) > 53 Then
              ' La semaine n'est pas valide
              MsgBox "La semaine n'est pas valide"
              Exit Sub
           End If
        End If
    VBA <=> Expression Access
    CLng <=> CLong
    Mid <=> ExtracChaîne
    Date <=> Date()
    Year <=> Année

    A+

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

Discussions similaires

  1. [AC-2003] Etat mise en forme conditionnelle
    Par Ptitezone dans le forum IHM
    Réponses: 1
    Dernier message: 27/03/2011, 13h26
  2. [ETAT] Mise en forme conditionnelle
    Par Pistos dans le forum Access
    Réponses: 2
    Dernier message: 16/06/2007, 03h47
  3. Mise en forme d'un etat conditionnel
    Par syldudu dans le forum IHM
    Réponses: 8
    Dernier message: 17/10/2006, 11h35
  4. Etat, mise en forme différente par detail
    Par Kinian dans le forum IHM
    Réponses: 4
    Dernier message: 06/05/2006, 12h07
  5. Etat, mise en forme conditionnelle
    Par Kinian dans le forum Access
    Réponses: 1
    Dernier message: 26/04/2006, 17h14

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