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 :

Comment comparer la date d'une cellule avec la date d'aujourd'hui (mega debutant)


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut Comment comparer la date d'une cellule avec la date d'aujourd'hui (mega debutant)
    Bonjour,

    Je viens juste de m'initier a VBA. J'ai reussi a faire quelques macros comme par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CommandButton1_Click()  
      Rows("5:5").Select       'se placer au debut du tableau Linge5
      Selection.Insert Shift:=xlDown    'inserer une nouvelle ligne
      ActiveCell.FormulaR1C1 = Date    'Mettre la date d'aujourd'hui dans A5
    End Sub
    Cette macro ajoute insert une date a ma liste de date:
    Nom : ima.JPG
Affichages : 1956
Taille : 25,8 Ko

    Comme cette macro marche bien j'ai essayé d'aller un peu plus loin en inserant la date d'aujourd'hui que si elle n'est pas deja presente en debut de liste.
    Voici le code que j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub CommandButton1_Click()   
        If Range(A5).Value <> Date Then
            Rows("5:5").Select            
            Selection.Insert Shift:=xlDown    
            ActiveCell.FormulaR1C1 = Date  
       End If
    End Sub
    Lorsque j'exectue cette macros j'ai le droit a un joli message d'erreur.

    C'est clairement dans le if que ca cloche mais je vois pas pourquoi...
    quelqu'un peut il m'aider?

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Ce serait bien si tu nous disais sur quelle ligne tu as ton message d'erreur. Cela étant, je n'aime pas les Select et les Selection.Insert.

    Le code suivant fonctionne bien chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        If Range("a5").Value <> Date Then
            Range("5:5").Insert shift:=xlDown
            Range("a5").Value = Date
        End If
    Ok chez toi?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 114
    Points
    1 114
    Par défaut
    Bonjour,

    Apparement, c'est une faute de frappe

    au lieu de Range(A5) écris Range("A5")

    Aussi, puisque tu te lances, évite les slect-selection toujours très lents

    tu pourrais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Range("A5").Value <> Date Then
        Rows(5).Insert Shift:=xlDown
        Range("A5") = Date
       End If
    Enfin, quand tu signale une erreur de code, indique toujours la ligne qui plante et le texte (soi-disant) explicatif: cela facilite grandement la recherche d'une solution;

    Bon WE, j'espère prolongé!

    Michel

    Edit: Excuse-moi, Pierre, je n'avais pas rafraichi !
    Michel_M

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu peux également avoir un pb de type de données
    Si ta cellule ne contient pas une date, ça pourrait aussi bugger. J'ajouterais un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if isdate(Range("A5").Value) then
        If Range("A5").Value <> Date Then
             Rows(5).Insert Shift:=xlDown
             Range("A5") = Date
        End If
    endif
    mais tu peux t'en passer si tu es certain que ta cellule contient une date.

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Salut Ouskel'n'or

    Citation Envoyé par ouskel'n'or
    Tu peux également avoir un pb de type de données
    Si ta cellule ne contient pas une date, ça pourrait aussi bugger. J'ajouterais un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if isdate(Range("A5").Value) then
        If Range("A5").Value <> Date Then
             Rows(5).Insert Shift:=xlDown
             Range("A5") = Date
        End If
    endif
    mais tu peux t'en passer si tu es certain que ta cellule contient une date.
    Pour info, le test n'est pas nécessaire ici. Il pourrait même être gênant dans le cas d'une date erronée saisie par l'utilisateur, et qui devrait être remplacée par la date du jour...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    Merci les gars ca marche nickel.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    je sais que vous avez resolu mon probleme mais en avançant dans mon application je suis face a un nouveau probleme.
    L'enregister de macro me géner des lignes que je comprends pas.

    tout d'abord je vous presente ce que j'ai fait:
    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
     
     
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim r As String
        i = 1
        Do Until IsDate(Cells(i, 1))
            i = i + 1
        Loop
        Cells(i, 1).Select 'selection la premiere date de la colonne date
        If Selection.Value <> Date Then ' la premier date de la colonne n est pas la date d'aujourd'hui
            r = Trim(Str(i)) & ":" & Trim(Str(i))
            Range(r).Insert Shift:=xlDown        'inserer une ligne a la ligne i, ex :Range("5:5").Insert Shift:=xlDown
            ActiveCell.FormulaR1C1 = Date  'Mettre le date d'aujourd'hui dans A5
            r = "B" & Trim(Str(i))  'ex B5
            Range("r").Value = Application.Evaluate(Range("D3").Value) 'on lui affecte la valeur du resultat du calcule contenu dans D3
     
            'modifi la plage de donné de mon graph'
            ActiveSheet.ChartObjects("Graphique 5").Activate
            ActiveChart.SeriesCollection(1).Select
            ActiveChart.SeriesCollection(1).XValues = "=Feuil1!R5C1:R15C1"
            ActiveChart.SeriesCollection(1).Values = "=Feuil1!R5C2:R15C2"
        End If
    End Sub
    Nom : ima1.JPG
Affichages : 1779
Taille : 38,6 Ko

    je sais vous m'avez conseillé de pas utiliser de selection mais il marche super bien et pour moi la vitesse n'est pas déterminante.
    Sinon je but de cette macro et d'ajouter une date et une valeur à une liste qui elle même sert pour faire un graph excel.
    Pour modifier la plage de donner du graph (une fois la nouvelle date et le nouvelle valeur ajouté) j'ai utilisé l'enregistreur de macro. En suite j'ai fait un peu de nétoyage pour conserver le stricte minimum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            'modifi la plage de donné de mon graph'
            ActiveSheet.ChartObjects("Graphique 5").Activate
            ActiveChart.SeriesCollection(1).Select
            ActiveChart.SeriesCollection(1).XValues = "=Feuil1!R5C1:R15C1"
            ActiveChart.SeriesCollection(1).Values = "=Feuil1!R5C2:R15C2"
    Cette macro marche nickel mais je comprends pas trop ce que ca veut dire...
    Enfaite c surtout les termes Feuil1!R5C1:R15C1 et Feuil1!R5C2:R15C2 que je comprend pas. Ca veux dire quoi?

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par Tu
    Cette macro marche nickel mais je comprends pas trop ce que ca veut dire...
    Enfaite c surtout les termes Feuil1!R5C1:R15C1 et Feuil1!R5C2:R15C2 que je comprend pas. Ca veux dire quoi?
    ActiveChart.SeriesCollection(1).XValues = "=Feuil1!R5C1:R15C1"
    Les X de ton graphe sont pris de la ligne 5 (Row 5) à 15, colonne 1 (C1)

    ActiveChart.SeriesCollection(1).Values = "=Feuil1!R5C2:R15C2"
    Les valeurs pour chaque X de ton graphe de la Ligne 5 à 15, Colonne 2

  9. #9
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    Bonjour
    si tu te sers de macro pour rafraichir ton graphique essayes plutot
    Insertion
    Nom
    Définir

    dans le champ du haut
    dates
    dans celui du bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =decaler(feuil11!a4;1,0,nbval(feuil1!a5;a100);1)
    ajouter
    dans le champ du haut
    valeur
    dans celui du bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =decaler(feuil11!b4;1,0,nbval(feuil1!a5;a100);1)
    dans ton graphique
    tu remplaces ={1} par ='nom_classeur.xls!'valeur
    et dans valeur en x ='nom_classeur.xls!'dates
    Daranc

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    Merci a tous


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/10/2014, 14h01
  2. Réponses: 4
    Dernier message: 05/03/2012, 13h54
  3. mettre une date dans une cellule avec le bon format
    Par wrm8787 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/02/2009, 17h54
  4. Comment récuperer la position d'une cellule avec un Range.
    Par branqueira dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/05/2007, 11h39
  5. Réponses: 2
    Dernier message: 13/02/2007, 17h40

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