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 :

mise en forme conditionnelle via VBA dans un planning


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2020
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2020
    Messages : 37
    Points : 20
    Points
    20
    Par défaut mise en forme conditionnelle via VBA dans un planning
    bonjour,

    Voici moi problème : J'ai réalisé un planning dans lequel je souhaiterais pouvoir mes en couleur certaines cases, en fonction de leur Abréviation , via une mise en forme conditionnelle ( par ex : "FR", "AL" ou "IT" )
    Pour ne pas devoir mettre la mise en forme manuellement pour chacune des cases, j'ai pensé ajouter une formule dans mon module "Planning". J'ai donc utilisé la fonction FormatConditions.item(0).Modify acExpression.

    Malheureusement ces lignes de code ne fonctionnent pas (ligne 39 à 47) et soit l'erreur 7966 :
    Le paramètre que vous avez entré est trop élevé
    , soit l'erreur 438 :
    Propriété ou méthode non gérée par cet objet
    Je met le bout de code de mon module "Planning" :


    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
    Public Sub MajPlanning()
    Dim j As Integer
    Dim DateJ As Date
     
     
    DateJ = Forms!F_PlanningSemaines.DateD
    For j = 1 To 5
    Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("NumSem" & j).Caption = "Semaine " & NumSemaine(DateJ)
    DateJ = DateJ + 7
     
    Next j
     
     
    DateJ = Forms!F_PlanningSemaines!DateD
    For j = 1 To 35
     
     
     
    Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).Caption = UCase(Left(Format(DateJ, "ddd"), 1)) & vbCrLf & Day(DateJ) & vbCrLf & UCase(Format(DateJ, "mmm"))
     
     
       If EstWeekEnd(DateJ) Then
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).BackColor = rgb(242, 242, 243)
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).BackColor = rgb(242, 242, 243)
       ElseIf EstFerie(DateJ) Then
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).BackColor = rgb(235, 235, 237)
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).BackColor = rgb(235, 235, 237)
       ElseIf EstAujourdhui(DateJ) Then
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).BackColor = rgb(100, 100, 100)
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).BackColor = rgb(100, 100, 100)
     
       ElseIf EstMaintenant(DateJ) Then
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).BackColor = rgb(223, 219, 231)
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).BackColor = rgb(223, 219, 231)
       Else
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).BackColor = vbWhite
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).BackColor = vbWhite
     
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).FormatConditions.Item(0).Modify acExpression, , "IsNull([Jour" & j & "])=true"
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).FormatConditions.Item(0).BackColor = 10083238
     
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).FormatConditions.Item(0).Modify acExpression, , "InStr([" & j & "],'FR')<>0" ' Si l'abréviation "FR" est présente dans la zone de texte "JourJ" on la colorie en vert
          Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).FormatConditions.Item(0).BackColor = vbGreen
     
         ' Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).BackColor = 16761024
         ' Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).FormatConditions.Item(0).BackColor = 16777164
         ' Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).FormatConditions.Item(0).Modify acExpression, , "[IDAbreviation]='FR'"
       End If
     
    DateJ = DateJ + 1
    Next j
     
    Forms!F_PlanningSemaines!SF_PlanningSemaines.Form.Requery
     
    End Sub
    Merci d'avance pour votre aide et bien à vous.

  2. #2
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    bonjour,

    j'ai pas l'habitude d'utiliser les mises en formes conditionnelles de cette manière,
    mais j'essaierais avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne 39 Forms!F_PlanningSemaines!SF_PlanningSemaines.Formfrm("Jour" & j).FormatConditions.Item(0).Modify acExpression, , IsNull(("Jour" & j)) = True
    ligne 42 Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).FormatConditions.Item(0).Modify acExpression, , InStr(("Jour" & j), "FR") <> 0
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne 39 Forms!F_PlanningSemaines!SF_PlanningSemaines.Formfrm("Jour" & j).FormatConditions.Item(0).Modify acExpression, , IsNull(Forms!F_PlanningSemaines!SF_PlanningSemaines.Formfrm("Jour" & j)) = True
    ligne 42 Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).FormatConditions.Item(0).Modify acExpression, , InStr(Forms!F_PlanningSemaines!SF_PlanningSemaines.Formfrm("Jour" & j), "FR") <> 0
    Un travail qui plait est à moitié fait.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2020
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2020
    Messages : 37
    Points : 20
    Points
    20
    Par défaut mise en forme conditionnelle dans un planning
    merci pour votre réponse, ça ne fonctionne cependant pas !

    mon problème est que je souhaiterais que toutes les cases de mon planning (10 lignes x 31 jours) puissent être coloriées si la case n'est pas vide et qu'elle contient une abréviation (p.ex "FR").
    En passant par la mise en forme conditionnelle, le travail est laborieux pour donner la condition à toutes les cases. J'ai essayé de mettre la fonction suivante dans la mise en forme conditionnelle des cases :

    Gauche([1];1="FR" pour la case 1, si elle contient l'abréviation "FR"
    Gauche([2];1="FR" pour la case 2...
    Gauche([1];1="AL" pour la case 1 si elle contient l'abréviation "AL"
    ...

    Comment remplacer ce [1] [2]...par une variable qui correspond à la case correspondante ?

    C'est pour cette raison que je pensais passer par le code VBA

    Merci de votre réponse

  4. #4
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,
    c'est normal que ça ne fonctionne pas, je me suis trompé dans le code, il faut remplacer les FormFrm. par Form. ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne 39 Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).FormatConditions.Item(0).Modify acExpression, , IsNull(("Jour" & j)) = True
    ligne 42 Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).FormatConditions.Item(0).Modify acExpression, , InStr(("Jour" & j), "FR") <> 0
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne 39 Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j).FormatConditions.Item(0).Modify acExpression, , IsNull(Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j)) = True
    ligne 42 Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Col" & j).FormatConditions.Item(0).Modify acExpression, , InStr(Forms!F_PlanningSemaines!SF_PlanningSemaines.Form("Jour" & j), "FR") <> 0
    Un travail qui plait est à moitié fait.

  5. #5
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonsoir le forum
    @ Mike1971, il y a un bug dans Access 2007, 2010 et sans doute les versions suivantes, dans l'utilisation de "FormatConditions.Modify" (voir ici).

    Je te propose d'utiliser l'évènement Form_Current() de ton sous-formulaire, pour remplacer les lignes 39 à 43:

    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
    Private Sub Form_Current()
     
        Dim j As Byte
     
        For j = 1 To 35
            If IsNull(Me("jour" & j)) Then
                Me("jour" & j).BackColor = 10083238
            End If
     
            If InStr(1, Me("Col" & j).Caption, "FR") <> 0 Then
                Me("jour" & j).BackColor = vbGreen
            ElseIf InStr(1, Me("Col" & j).Caption, "AL") <> 0 Then
                Me("jour" & j).BackColor = une_autre_couleur
            End If
     
        Next i
        DoCmd.Save acForm, Me.Name
     
    End Sub
    Cdlt

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2020
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2020
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour l’éclairage. Effectivement une erreur est toujours présente.
    Je vais essayer ton codage et voir si ça passe comme ça.
    Cordialement

  7. #7
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 284
    Points : 284
    Points
    284
    Par défaut
    Bonjour,
    Juste une précision, il n'y a pas de FormatConditions pour les étiquettes ! ! !
    Un travail qui plait est à moitié fait.

Discussions similaires

  1. Mise en forme conditionnelle via code vba access
    Par F.Cambria dans le forum VBA Access
    Réponses: 6
    Dernier message: 12/08/2020, 09h39
  2. [XL-2019] Création de mise en forme conditionnelle via VBA en fonction de mise en forme existante
    Par centflots dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/03/2020, 18h13
  3. [XL-2016] Modification Règles de mise en forme conditionnelle via Macro VBA?
    Par VinciCG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/03/2019, 19h17
  4. Mise en forme conditionnelle en VBA / Cut-Paste
    Par priest69 dans le forum IHM
    Réponses: 4
    Dernier message: 03/09/2005, 13h54

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