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 :

Code qui colorie x fois la case i au lieu de colorier de la case i à j pour chaque x


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Par défaut Code qui colorie x fois la case i au lieu de colorier de la case i à j pour chaque x
    Bonjour,

    Mon intitulé est clair sans trop l'être alors je vais détailler un peu plus. J'ai codé une série de rectangles (365). Ces rectangles doivent se colorier en fonction de si ils appartiennent à la période x (avec x entier allant de 1 à 12 par exemple).
    Cette période x est définie par une "Date_début" et "une Date_fin". J'ai donc codé une fonction qui me parcourt une colonne dans un formulaire "Num_chrono_plan" (qui correspond à mon numéro de période x) et pour chaque valeur de x, correspond une couleur différente donc chaque période possède sa couleur.
    Pour chaque valeur x, je veux que la fonction aille me chercher la Date_début et la Date_fin et qu'elle me colorie toutes les rectangles entre.

    Le problème c'est que ma fonction, au lieu de colorier, pour Num_plan_chrono = x, les cases de i à j, elle me colorie la case x, (j-i) fois. En plus, elle ne me prend que la Date_début et Date_fin pour Num_chrono_plan = 1 et l'applique partout au lieu d'aller me chercher les valeurs pour Num_chrono_plan = 2, etc.

    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 i As Integer
    Dim Date_début As Date
    Dim Date_fin As Date
    Dim d As Integer
    Dim Date_début_NbJours As Double
    Dim Date_fin_NbJours As Double
    Dim Debut_Annee As Date
    Dim Num_chrono_plan As Integer
    Dim MonParametre As String
     
    'Implémentation de la date du début d'année
    Debut_Annee = "01/01/" & [Forms]![MonFormulaire]![CbAnnee]
     
    MonParametre = [Forms]![MonFormulaire]![MonParametre]
    Num_chrono_plan = [Forms]![MonFormulaire]![Num_chrono_plan]
     
    'Colorie les périodes pour MonParametre en fonction du Num_chrono_plan
     
    For Num_chrono_plan = 1 To 1
    Date_début_NbJours = DateDiff("d", Debut_Annee, [Forms]![MonFormulaire]![Date_début]) + 1
    Date_fin_NbJours = DateDiff("d", Debut_Annee, [Forms]![MonFormulaire]![Date_fin]) + 1
     
        If MonParametre <> "" Then
            For i = Date_début_NbJours To Date_fin_NbJours
            [Forms]![MonFormulaire]("" & Num_chrono_plan & "").BackColor = vbBlue
            [Forms]![MonFormulaire]("" & Num_chrono_plan & "").BackStyle = 1
            Next i
        End If
     
    Next Num_chrono_plan
     
    For Num_chrono_plan = 2 To 2
    ... etc ...
    Voyez le résultat sur l'image jointe, or moi je voudrais qu'il me colorie en bleu les 61 premières cases si on suit l'exemple sur l'image, puis en blanc les 61 suivantes, etc ...

    Quand je fais le pas-à-pas, le code me réitère 61 fois le coloriage de la case 1 donc il ne parcourt pas mon tableau, et je ne sais vraiment pas pourquoi.

    Merci d'avance.

    PS : Si je passe par une requête SQL pour aller chercher mon Num_chrono_plan et aussi une pour mes 2 dates début et fin, ça sera pareil? Je ne sais pas si ça marchera comme je le veux puisque logiquement, ça fait la même chose que d'aller le chercher directement dans mon formulaire non?
    Images attachées Images attachées  

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 040
    Par défaut
    ceci ira peut-être mieux ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If MonParametre <> "" Then
            For i = Date_début_NbJours To Date_fin_NbJours
            [Forms]![MonFormulaire]("" & i & "").BackColor = vbBlue
            [Forms]![MonFormulaire]("" & i & "").BackStyle = 1
            Next i
        End If
    ....

  3. #3
    Membre confirmé Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Par défaut
    Merci beaucoup !!! Je suis vraiment trop étourdi !! A force d'être la tête dans le code je ne vois plus les trucs qui pour d'autres pourraient leur sauter aux yeux ! C'est toujours bon d'avoir une vue extérieure plus objective sur son travail surtout quand celle-ci est bien meilleure que nous.

    Sinon, j'ai toujours le problème de la Date_fin et Date_début qui ne sont pas changées, il me reprend toujours les dates pour Num_chrono_plan = 1 et pas pour les autres. Une idée ?? Je pense à une requête SQL qui irait me chercher dans mon tableau les dates correspondantes, mais le tableau est déjà rempli grâce à une requête qui va chercher les dates dans une table.

    Donc appeler les dates directement dans le tableau affiché dans le formulaire par une requête revient à faire une requête qui irait me la chercher directement dans la table qui alimente mon formulaire : donc je ferai 2 fois la même chose ??

    Bref, je vois vraiment pas pourquoi est-ce qu'il ne veut pas me donner les bonnes dates alors que je lui fais parcourir les cases dates en fonction du Num_chrono_plan.

  4. #4
    Membre confirmé Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Par défaut
    Alors j'ai essayé de le faire avec une requête SQL mais j'ai un bug, il me dit "Trop peu de paramètres. 2 attendus" quand on fait le pas-à-pas, il s'arrête sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Date_début = CurrentDb.OpenRecordset(Str_Date_début)
    Je vous joins donc le code qui va avec, parce que je l'ai changé un peu depuis la dernière fois, pour la requête :
    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
     
    Dim R As Control
    Dim i As Integer
    Dim d As Integer
    Dim Date_début_NbJours As Double
    Dim Date_fin_NbJours As Double
    Dim Debut_Annee As Date
    Dim Num_chrono_plan As Integer
    Dim MonParametre As String
    Dim Str_Date_début As String
    Dim Str_Date_fin As String
    Dim Date_début As DAO.Recordset
    Dim Date_fin As DAO.Recordset
     
     
    'Implémentation de la date du début d'année
    Debut_Annee = "01/01/" & [Forms]![MonFormulaire]![CbAnnee]
     
    MonParametre= [Forms]![MonFormulaire]![MonParametre]
    Num_chrono_plan = [Forms]![MonFormulaire]![Num_chrono_plan]
     
    'Requête pour aller chercher les Date_début et Date_fin pour chaque Num_chrono_plan de 1 à 12
    For Num_chrono_plan = 1 To 12
    Str_Date_début = "SELECT MaTable.Date_début FROM MaTable WHERE MaTable.MonCritereDeTri = [Forms]![MonFormulaire]![MonCritereDeTri] AND MaTable.Num_chrono_plan = [Forms]![MonFormulaire]![Num_chrono_plan]"
    Str_Date_fin = "SELECT MaTable.Date_fin FROM MaTable WHERE MaTable.MonCritereDeTri = [Forms]![MonFormulaire]![MonCritereDeTri] AND MaTable.Num_chrono_plan = [Forms]![MonFormulaire]![Num_chrono_plan]"
    Set Date_début = CurrentDb.OpenRecordset(Str_Date_début)
    Set Date_fin = CurrentDb.OpenRecordset(Str_Date_fin)
    If Date_début.EOF = True And Date_fin.EOF = True Then
     
    'Calcul à quel ième jour les dates correspondent
    Date_début_NbJours = DateDiff("d", Debut_Annee, Date_début) + 1
    Date_fin_NbJours = DateDiff("d", Debut_Annee, Date_fin) + 1
     
    'Colorie en fonction de la valeur de Num_chrono_plan
    If Num_chrono_plan = 1 Then
     
        If MonParametre <> "" Then
            For i = Date_début_NbJours To Date_fin_NbJours
            [Forms]![MonFormulaire]![MonParametre]("" & i & "").BackColor = vbBlue
            [Forms]![MonFormulaire]![MonParametre]("" & i & "").BackStyle = 1
            Next i
        End If
     
    ElseIf Num_chrono_plan = 2 Then
    etc ...
    End If
    Next Num_chrono_plan
    Malheureusement, mon aide F1 ne marche pas sur la méthode OpenRecordset du coup je ne vois pas ce qui me manque, peut être le type? Le problème c'est que si je mets "Date" comme type, il me prend la fonction et non le type. Comment faire?

    Merci.

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 040
    Par défaut
    dans ta syntaxe ci-dessus, date_debut est un recordset mais le champ d'un recordset est date_debut(0) pour le 1er, date_debut(1) pour le 2eme ...
    ainsi tu as plusieurs erreurs de syntaxe et de types.

    Essaie plutôt avec la fonction Dlookup :
    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
     
    dim Date_début as date
    dim Date_fin as date
    ...
     
    'Requête pour aller chercher les Date_début et Date_fin pour chaque Num_chrono_plan de 1 à 12
    For Num_chrono_plan = 1 To 12
    Date_début = dlookup("Date_début","MaTable","MonCritereDeTri ='" & [Forms]![MonFormulaire]![MonCritereDeTri] & "' AND Num_chrono_plan =" & [Forms]![MonFormulaire]![Num_chrono_plan])
    Date_fin = dlookup("Date_fin","MaTable","MonCritereDeTri ='" & [Forms]![MonFormulaire]![MonCritereDeTri] & "' AND Num_chrono_plan =" & [Forms]![MonFormulaire]![Num_chrono_plan])
     
    'Calcul à quel ième jour les dates correspondent
    Date_début_NbJours = DateDiff("d", Debut_Annee, Date_début) + 1
    Date_fin_NbJours = DateDiff("d", Debut_Annee, Date_fin) + 1
     
    ...

  6. #6
    Membre confirmé Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Par défaut
    Merci beaucoup micniv !! Là, j'aurai bien été incapable de trouver ça tout seul, même avec beaucoup de volonté.

    J'ai donc testé ta solution mais le problème, c'est qu'il me sort un bug :
    "L'expression entrée comme paramètre de requête est à l'origine de l'erreur suivante : 'Impossible pour Microsoft Access de trouver le nom 'Nom_De_MonCritereDeTri' entré dans l'expression' "
    quand je fais F8 sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Date_début = dlookup("Date_début","MaTable","MonCritereDeTri =" & [Forms]![MonFormulaire]![MonCritereDeTri] & " AND Num_chrono_plan =" & [Forms]![MonFormulaire]![Num_chrono_plan])
    Je précise juste que, si on regarde l'image que j'ai jointe, en fait MonFormulaire est composé d'un sous-formulaire qui correspond au tableau créé grâce à une requête qui va me chercher, dans MaTable, les informations visibles (Num_chrono_plan, Date_début, Date_fin, MonParametre et Nbre) mais aussi MonCritereDeTri qui lui n'est pas affiché dans le tableau mais qui sert donc à sélectionner la série qu'on visualise.

    Le problème viendrait-il du fait que MonCritereDeTri n'est pas visible dans MonSousFormulaire ? J'ai tenté de régler le problème en le rajoutant mais ça n'a pas l'air de fonctionner plus et là, je sèche totalement.

    Sinon, il y a t-il une piste avec une requête SQL ??

    Merci pour ton précieux temps.
    Images attachées Images attachées  

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

Discussions similaires

  1. Code qui permet à l'utilisateur de cliquer sur un bouton une seule fois
    Par FLORE2222 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 18/03/2012, 10h31
  2. code qui s'exécute une seule fois
    Par sam01 dans le forum Langage
    Réponses: 7
    Dernier message: 04/06/2010, 17h12
  3. Code qui ne fonctionne qu'une fois sur 2!
    Par Optimiss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/03/2010, 10h41
  4. code qui s excute une fois
    Par sisna dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 20/08/2008, 11h35
  5. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56

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