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

Macros et VBA Excel Discussion :

VBA FormatCondition Formule en utilisant Variables pré-créés


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Par défaut VBA FormatCondition Formule en utilisant Variables pré-créés
    Bonjour à tous,
    Ce que je veux faire en théorie est "simple". Je souhaite sur deux colonnes indiqué par un commentaire la date de modification (ça j'arrive à faire) ET ENSUITE comparer ce commentaire de date de modification à la date actuelle
    --> en cas de DateModif < DateActuelle - 7 : cellule en rouge --> sinon pas de remplissage
    Du coup je veux utiliser la variable "commentaire" que j'ai créée et la comparer à une variable "MyDate" = DateActuelle - 7 jours

    Je vous présente ce que j'ai fais. Je m'excuse, mon niveau est très faible en VBA et mon code s'en ressent d'autant. c'est très brouillon.
    La partie "Commentaire" fonctionne, mais pas du tout la règle de mise en forme.

    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 Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Dim ObjRange As Range
    Dim MyDate As Date
     
    If Intersect(Target, Range("A2:B7")) Is Nothing Or Target.Count > 1 Then: Exit Sub
    Set rng = Cells(Target.Row, Target.Column)
     
    DateT = Format(Date, "dd/mm/yy")
    CellDate = CDate(DateT)
    MyDate = Date - 7
     
    Set ObjRange = Range("A2:B7")
    With ObjRange
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, Formula1:="CellDate = MyDate"
        .FormatConditions(1).Interior.ColorIndex = 46
    End With
     
    rng.ClearComments
    Comment = CStr(CellDate)
    rng.AddComment (Comment)
     
     
    End Sub
    Merci d'avance pour votre aide
    Je suis à votre disposition pour éclaircir mes imprécisions

    A bientôt

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour et bienvenue au forum,

    Avant de répondre à ta question, 2 petits commentaires de formes :
    1. Lorsque tu écris du code, écris le entre balises code (bouton #), c'est plus lisible.
    2. Ici, c'est le forum Excel, il existe un forum entièrement dédié à VBA Excel. Pour la prochaine fois


    Maintenant, venons-en à ton code. Il y a plusieurs incohérences.
    1. Tout d'abord, pourquoi une macro pour écrire une MFC ? Ne peux-tu pas directement écrire la MFC dans Excel ? Ce serait plus simple.
    2. Target représente la cellule modifiée, donc Cells(Target.Row, Target.Column) ... c'est Target ! Ton rng, c'est Target. Cela ne te sert à rien de déclarer un objet rng, travaille directement avec Target
    3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateT = Format(Date, "dd/mm/yy")
     CellDate = CDate(DateT)
     MyDate = Date - 7
    Ici, tu as un micmac de formules dont je ne comprends pas bien l'intérêt. utiliser CellDate revient à utiliser Date...
    4. Ta condition de MFC est CellDate = MyDate or CellDate est Date et MyDate est Date + 7, donc tu n'auras JAMAIS le cas CellDate = MyDate.
    5. Enfin, ta condition de MFC est mal renseignée. Tu utilises mal les variables. Petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    i = 3
    MsgBox "Monsieur Dupond a " & i & " enfants."          'renvoie : Monsieur Dupon a 3 enfants.
    MsgBox "Monsieur Dupond a i enfants."          'renvoie : Monsieur Dupond a i enfants.
    Donc, tu devrais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .FormatConditions.Add Type:=xlExpression, Formula1:="=" & CellDate & " = " & MyDate
    Il reste toujours que cette condition n'a jamais lieu ...

    Il faudrait que tu précises la condition de ta MFC, mais a mon avis, tu ne devrais que garder la partie modification du commentaire dans ta macro et faire la MFC une fois à la main en Excel.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2015
    Messages : 4
    Par défaut Merci
    Merci beaucoup Riaolle,
    Désolé tant pour les erreurs de forme que pour le mauvais positionnement de ma question dans le forum

    Merci pour les différentes infos qui m'éclairent pas mal

    Quand tu me dis "Ta condition de MFC est CellDate = MyDate or CellDate est Date et MyDate est Date - 7, donc tu n'auras JAMAIS le cas CellDate = MyDate." effectivement c'est un problème ... mais je veux que CellDate soit Date "au moment de ma modif" .

    Je ne sais pas comment faire : chaque fois que je clique et modifie une cellule, ma macro permet d'afficher en commentaire la date du jour, et donc la date de modification (d'où la variable CellDate) . Et du coup cette variable est différente pour chaque cellule selon la date à laquelle j'ai modifié la cellule. C'est donc cette "Valeur de date de modification" (celle qui est aussi dans mon commentaire de cellule) que je veux tester par rapport à la date du jour. --> et ensuite faire une MFC selon le résultat de ce test.
    Mais je n'y arrive pas

    Une petite idée?

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    OK, je comprends un peu mieux ce que tu veux faire. En fait, la date en commentaire est une date plus ou moins fixe que tu veux comparer à la date d'aujourd'hui - 7 qui elle varie chaque jour.
    Il faudrait que tu passes par une MFC utilisant la fonction AUJOURDHUI(). Avec l'enregistreur de macro, tu peux créer une MFC avec par ex. la formule 31/07/2017=AUJOURDHUI()-7 et voir ce que ça donne comme macro.

Discussions similaires

  1. [XL-2010] [VBA] Comment faire une formule avec une variable ?
    Par Fackem dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 07/08/2014, 16h04
  2. Réponses: 5
    Dernier message: 27/02/2014, 13h09
  3. Réponses: 5
    Dernier message: 25/08/2012, 16h09
  4. [AC-2003] Utiliser variable dans requête Select [VBA]
    Par jacda dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 12/11/2009, 17h26
  5. [Toutes versions] formule vba avec nom de feuille variable
    Par leptitdave dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/08/2009, 12h30

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