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 :

Copy Paste Value en fonction de la date


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Copy Paste Value en fonction de la date
    Bonjour,
    Dans la colonne A d'une feuille Excel j'ai des dates, je voudrais que lorsqu'une de ces dates correspond à la date du jour toute la ligne correspondante soit copy/paste value.
    Est ce que quelqu'un a une idée afin de résoudre ceci ?

    Merci de votre aide

    Arnaud

  2. #2
    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 546
    Points
    15 546
    Par défaut
    Bonjour nono21x29,7, bienvenue sur le forum,
    Tu vois ça comment ? Exécution à l'ouverture du fichier ? Un bouton ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    je voudrais que cette macro se lance tous les jours à une heure donnée, disons 18h00

  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 546
    Points
    15 546
    Par défaut
    Pour que cette macro s'exécute à une heure donnée, ton classeur doit être ouvert. Tu en es conscient ?
    Pour lancer une macro à heure fixe regarde à OnTime, dans l'aide en ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Extrait de l'aide en ligne
    Application.OnTime TimeValue("18:00:00"), "Ta_Procedure"

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Je suis au point pour lancer la macro à heure fixe, ce que je n'arrive pas à écrire c'est le code de la macro en elle même

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour,
    Voici un code pour "Ta_procedure"

    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
    Sub Ta_Procedure()
     
    Dim cell As Range
    Today = Date 'Défini la date du jour
     
    For Each cell In Range("a:a") 'ballaie la plge mentionnée
     
        If cell.Value = Today Then
        cell.EntireRow.Copy 
        cell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        End If
    Next
     
    End Sub

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    je ne comprends pas pourquoi ca ne fonctionne pas, dans This WorkBook j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_WindowActivate(ByVal Wn As Window)
        Application.OnTime TimeValue("13:35:00"), "report"
    End Sub
    et dans la Excel Sheet concernée, j'ai


    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
    Sub report()
     
    Dim cell As Range
    Today = Date 'Défini la date du jour
     
    For Each cell In Range("a:a") 'ballaie la plge mentionnée
     
        If cell.Value = Today Then
        cell.EntireRow.Copy
        cell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        End If
    Next
    End Sub
    Pourtant à l'heure définie rien ne se passe, aurais-tu une idée ?

  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 546
    Points
    15 546
    Par défaut
    Find est infiniment plus rapide que For each Next pour trouver une donnée.
    Comme j'ignore ta manière de traiter les dates dans ta feuille (format) je te suggère de passer par le N° de série pour les comparer à la date du jour. Ainsi tu pourras toutes les passer en revue d'un seul coup d'un seul sans avoir à lire ligne par ligne.
    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
    Sub Test()
    Dim c As Range, LaDate As Long, LeFormat As String
    'On relève le format de date
        LeFormat = Columns(1).NumberFormat
    'On donne le format du N° de série à la colonne
        Columns(1).NumberFormat = "General"
    'on convertit la date cherchée en N° de série
        LaDate = CDbl(Date)
    'on lance la recherche de LaDate sur la plage de cellule A1:A & dernière ligne
        With Worksheets("feuil1").Range(Cells(1, 1), Cells(Range("A65535").End(xlUp).Row, 1))
            Set c = .Find(LaDate)
            If Not c Is Nothing Then 'si donnée trouvé, on copie la ligne
                MsgBox "Trouvé !"
                Rows(c.Row).Copy
                Rows(c.Row).PasteSpecial Paste:=xlPasteValues
              Else
                MsgBox "Pas trouvé !"
            End If
        End With
    'On rétablit le format
        Columns(1).NumberFormat = LeFormat
    End Sub
    Si la date d'aujourd'hui peut être rencontrée plusieurs fois tu devras utiliser une boucle dont tu trouveras un exemple facile à adapter dans l'aide en ligne à Find.

  9. #9
    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 546
    Points
    15 546
    Par défaut
    Je viens de voir ton dernier message. Il est for probable que ton code ne fonctionne pas parce que la date n'est pas trouvée.
    Teste ton code en ajoutant deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub report()
     
    Dim cell As Range
    Today = Date 'Défini la date du jour
    Msgbox ToDay
    For Each cell In Range("a:a") 'ballaie la plge mentionnée
     
        If cell.Value = Today Then
              msgbox Cell.row 'donne le N° de ligne
              cell.EntireRow.Copy
              '...

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    la macro marche parfaitement quand je la lance manuellement mais en revanche elle ne se lance pas à heure fixe comme attendu

    quelqu'un a-t-il une idée ?

  11. #11
    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 546
    Points
    15 546
    Par défaut
    Place l'appel à la macro dans Thisworkbook, dans la macro Workbook_Open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        Application.OnTime TimeValue("18:00:00"), "report"
    End Sub
    Et place la macro Report dans un module standard
    Bonne soirée

    PS - Ce code fonctionne

  12. #12
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    la macro n'est pas dans un module mais dans la feuille concernée et ca ne marche donc pas, comment pourrais je faire pour la lancer sans la déplacer ?

  13. #13
    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 546
    Points
    15 546
    Par défaut
    Citation Envoyé par nono1712 Voir le message
    comment pourrais je faire pour la lancer sans la déplacer ?
    Tu la déplaces, elle n'a rien à faire là où tu l'as placée.

Discussions similaires

  1. [XL-2002] Copie du contenu de cellule en fonction de la date
    Par hobaken dans le forum Conception
    Réponses: 9
    Dernier message: 18/03/2013, 22h57
  2. [XL-2010] Copy/paste en fonction d'une cellule
    Par RodKAZ dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2013, 13h33
  3. Copie range dynamique en fonction de la date
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/03/2012, 13h41
  4. fonction copy/paste du TextComponent
    Par adel.87 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/11/2007, 16h56
  5. Trier les enregistrements en fonction de la date
    Par mpereg dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 12/09/2004, 14h16

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